httprunner3源码解读(2)models.py「建议收藏」

httprunner3源码解读(2)models.py「建议收藏」源码目录结构我们首先来看下models.py的代码结构我们可以看到这个模块中定义了12个属性和22个模型类,我们依次来看属性源码分析importosfromenumimportEnu

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

源码目录结构

我们首先来看下models.py的代码结构
httprunner3源码解读(2)models.py「建议收藏」
我们可以看到这个模块中定义了12个属性和22个模型类,我们依次来看
 

属性源码分析

import os
from enum import Enum
from typing import Any
from typing import Dict, Text, Union, Callable
from typing import List

from pydantic import BaseModel, Field
from pydantic import HttpUrl

Name = Text
Url = Text
BaseUrl = Union[HttpUrl, Text]
VariablesMapping = Dict[Text, Any]
FunctionsMapping = Dict[Text, Callable]
Headers = Dict[Text, Text]
Cookies = Dict[Text, Text]
Verify = bool
Hooks = List[Union[Text, Dict[Text, Text]]]
Export = List[Text]
Validators = List[Dict]
Env = Dict[Text, Any]

一句话总结:用到了typingpydantic模块,目的是告诉读者我这些属性是什么类型的
 

模型类源码分析

这里以代码注解的方式讲解
 

MethodEnum

class MethodEnum(Text, Enum):
    """
    枚举请求方法,定义了常用的http请求方法
    """
    GET = "GET"
    POST = "POST"
    PUT = "PUT"
    DELETE = "DELETE"
    HEAD = "HEAD"
    OPTIONS = "OPTIONS"
    PATCH = "PATCH

 

TConfig

class TConfig(BaseModel):
    """
    定义配置信息,包含如下:
    1.name      (str)
    2.verify    (bool)
    3.base_url  (http/https开头的str类型)
    4.variables (dict)
    5.parameters(dict)
    6.export    (list[str])
    7.path      (str)
    8.weight    (int)
    """
    name: Name  # str类型
    verify: Verify = False  
    base_url: BaseUrl = ""
    # Text: prepare variables in debugtalk.py, ${gen_variables()}
    variables: Union[VariablesMapping, Text] = {}
    parameters: Union[VariablesMapping, Text] = {}
    # setup_hooks: Hooks = []
    # teardown_hooks: Hooks = []
    export: Export = []
    path: Text = None
    weight: int = 1

 

TRequest

class TRequest(BaseModel):
    """
    requests.Request model
    
    1.method  (枚举类型)
    2.url     (str)
    3.params  (dict)
    4.headers (dict)
    5.req_json(dict/list/str)
    6.data    (dict/str)
    7.cookie  (dict)
    8.timeout (float)
    9.allow_redirects (bool)
    10.verify (bool)
    11.upload (dict)
    """
    
    method: MethodEnum
    url: Url
    params: Dict[Text, Text] = {}
    headers: Headers = {}
    req_json: Union[Dict, List, Text] = Field(None, alias="json")
    data: Union[Text, Dict[Text, Any]] = None
    cookies: Cookies = {}
    timeout: float = 120
    allow_redirects: bool = True
    verify: Verify = False
    upload: Dict = {}  # used for upload files

 

TStep

class TStep(BaseModel):
    """
    测试步骤,里面包含了request请求

    1.name              (str)
    2.request           (TRequest)
    3.testcase          (str/Callable)
    4.variables         (dict)
    5.setup_hooks       (list(dict))
    6.teardown_hooks    (list(dict))
    7.extract           (dict)
    8.export            (list)
    9.validators        (list(dict))
    10.validate_script  (list[str])
    """
    name: Name
    request: Union[TRequest, None] = None
    testcase: Union[Text, Callable, None] = None
    variables: VariablesMapping = {}
    setup_hooks: Hooks = []
    teardown_hooks: Hooks = []
    # used to extract request's response field
    extract: VariablesMapping = {}
    # used to export session variables from referenced testcase
    export: Export = []
    validators: Validators = Field([], alias="validate")
    validate_script: List[Text] = []

 

TestCase

class TestCase(BaseModel):
    """
    测试用例,包含了测试步骤和配置信息
    """
    config: TConfig
    teststeps: List[TStep]

 

ProjectMeta

class ProjectMeta(BaseModel):
    """
    项目结构
    1.debugtalk_py   (str)                   debugtakl文件内容
    2.debugtalk_path (str)                   debugtalk文件路径
    3.dot_env_path   (str)                   env文件路径
    4.functions      (dict(Callable/str))    在debugtalk中定义的函数
    5.env            (dict)                  环境
    6.RootDir        (str)                   根路径(绝对路径),debugtalk位于的路径
    """
    debugtalk_py: Text = ""  # debugtalk.py file content
    debugtalk_path: Text = ""  # debugtalk.py file path
    dot_env_path: Text = ""  # .env file path
    functions: FunctionsMapping = {}  # functions defined in debugtalk.py
    env: Env = {}
    RootDir: Text = os.getcwd()  # project root directory (ensure absolute), the path debugtalk.py located

 

TestsMapping

class TestsMapping(BaseModel):
    """
    测试映射
    1.project_meta
    2.testcases 测试用例集,list下有多个用例
    """
    project_meta: ProjectMeta
    testcases: List[TestCase]

 

TestCaseTime

class TestCaseTime(BaseModel):
    """
    测试用例时间

    1.start_at:开始时间默认为0
    2.start_at_iso_format:以iso格式启动
    3.duration:持续时间
    """
    start_at: float = 0
    start_at_iso_format: Text = ""
    duration: float = 0

 

TestCaseInOut

class TestCaseInOut(BaseModel):
    """
    测试用例的输入输出:

    config_vars:配置变量
    export_vars:导出变量
    """
    config_vars: VariablesMapping = {}
    export_vars: Dict = {}

 

RequestStat

class RequestStat(BaseModel):
    """
    请求指标:

    content_size:内容大小
    response_time_ms:响应时间(ms)
    elapsed_ms:逝去的时间(ms)
    """
    content_size: float = 0
    response_time_ms: float = 0
    elapsed_ms: float = 0

 

AddressData

class AddressData(BaseModel):
    """
    客户端与服务器地址数据

    client_ip:客户端ip地址
    client_port:客户端端口号
    server_ip:服务器ip地址
    server_port:服务器端口号
    """
    client_ip: Text = "N/A"
    client_port: int = 0
    server_ip: Text = "N/A"
    server_port: int = 0

 

RequestData

class RequestData(BaseModel):
    """
    请求数据

    method:请求方法,默认为GET
    url:url地址
    headers:请求头
    cookies:cookie信息
    body:请求体
    """
    method: MethodEnum = MethodEnum.GET
    url: Url
    headers: Headers = {}
    cookies: Cookies = {}
    body: Union[Text, bytes, List, Dict, None] = {}

 

ResponseData

class ResponseData(BaseModel):
    """
    响应数据

    status_code:状态码
    headers:响应头
    cookies:cookie信息
    encoding:编码格式
    content_type:内容类型
    body:响应体
    """
    status_code: int
    headers: Dict
    cookies: Cookies
    encoding: Union[Text, None] = None
    content_type: Text
    body: Union[Text, bytes, List, Dict]

 

ReqRespData

class ReqRespData(BaseModel):
    """
    请求响应数据
    request:RequestData
    response:ResponseData
    """
    request: RequestData
    response: ResponseData

 

SessionData

class SessionData(BaseModel):
    """
    request session data, including request, response, validators and stat data
    """

    success: bool = False
    # in most cases, req_resps only contains one request & response
    # while when 30X redirect occurs, req_resps will contain multiple request & response
    req_resps: List[ReqRespData] = []
    stat: RequestStat = RequestStat()
    address: AddressData = AddressData()
    validators: Dict = {}

 

StepData

class StepData(BaseModel):
    """
    teststep data, each step maybe corresponding to one request or one testcase
    测试步骤数据,每个步骤可能对应一个请求或一个测试用例
    """

    success: bool = False
    name: Text = ""  # teststep name
    data: Union[SessionData, List['StepData']] = None
    export_vars: VariablesMapping = {}

 

TestCaseSummary

class TestCaseSummary(BaseModel):
    """
    测试用例结果

    name:测试用例名字
    success:测试用例成功的状态
    case_id:测试用例的id
    time:测试用例的时间
    in_out:测试用例的导入导出数据
    log:测试用例的日志
    step_datas:测试步骤的数据
    """
    name: Text
    success: bool
    case_id: Text
    time: TestCaseTime
    in_out: TestCaseInOut = {}
    log: Text = ""
    step_datas: List[StepData] = []

 

PlatformInfo

class PlatformInfo(BaseModel):
    """
    平台信息

    httprunner_version:httprunner版本号
    python_version:python版本
    platform:平台
    """
    httprunner_version: Text
    python_version: Text
    platform: Text

 

TestCaseRef

class TestCaseRef(BaseModel):
    """
    包含testcase
    """
    name: Text
    base_url: Text = ""
    testcase: Text
    variables: VariablesMapping = {}

 

TestSuite

class TestSuite(BaseModel):
    """
    测试套件
    TestSuite包含TestCaseRef
    TestCaseRef包含testcase
    """
    config: TConfig
    testcases: List[TestCaseRef]

 

Stat

class Stat(BaseModel):
    """
    统计信息

    total:总数
    success:成功的用例数
    fail:失败的用例数
    """
    total: int = 0
    success: int = 0
    fail: int = 0

 

TestSuiteSummary

class TestSuiteSummary(BaseModel):
    """
    测试套件结果

    success:成功的状态
    stat:统计信息
    time:测试用例花费的时间
    platform:平台信息
    testcases:测试用例集
    """
    success: bool = False
    stat: Stat = Stat()
    time: TestCaseTime = TestCaseTime()
    platform: PlatformInfo
    testcases: List[TestCaseSummary]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164819.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月29日 下午5:36
下一篇 2022年7月29日 下午5:46


相关推荐

  • 下载MODIS数据「建议收藏」

    下载MODIS数据「建议收藏」下载Modis数据

    2022年5月26日
    37
  • 人生哲理「建议收藏」

    人生哲理「建议收藏」九大人生哲理 1、跌倒了,才懂得平顺最重要;2、病倒了,才懂得身体最重要;3、郁闷了,才懂得快乐最重要;4、挫折了,才懂得信心最重要;5、错过了,才懂得珍惜最重要;6、潦倒了,才懂得金钱最重要;7、丢人了,才懂得名誉最重要;8、成功了,才懂得过程最重要;9、迟暮了,才懂得时间最重要。 生命的要义 人生要做两件事:一件感恩,一件感悟;人生要迈两

    2022年6月2日
    61
  • 单模光纤与多模光纤的区别

    单模光纤与多模光纤的区别1 单模光纤单模光纤由 9um 的玻璃芯和 125um 的覆盖层组成 单模光纤主要用来承载具有长波长的激光束 单模只传输一种模式 和多模光纤相比 他的色散要少 由于使用更小的玻璃芯和单模光源 所以单模光纤支持很长的距离 传输距离可达 10km 甚至几十 km 实验室常用的单模光纤是黄色的 且是长波长光纤 1310nm 和 1550nm 1310nm 的长波光纤最长支持 10km 的传输 1550nm 的长波光

    2026年3月26日
    2
  • zabbix添加snmp监控项_SNMP协议

    zabbix添加snmp监控项_SNMP协议目录一、SNMPTrap消息处理流程二、snmptt1、SNMPTrap、snmptt安装2、配置文件修改3、SNMPTrapFile文件创建4、监控项创建三、perl脚本 1、SNMPTrap安装2、从zabbix源码包中拷贝perl脚本到/usr/bin/目录下,并增加执行权限3、修改snmptrapd.conf配置4、修改zabbix配置 …

    2022年8月20日
    9
  • 1082. 数字游戏(数位dp)[通俗易懂]

    1082. 数字游戏(数位dp)[通俗易懂]科协里最近很流行数字游戏。某人命名了一种不降数,这种数字必须满足从左到右各位数字呈非下降关系,如 123,446。现在大家决定玩一个游戏,指定一个整数闭区间 [a,b],问这个区间内有多少个不降数。输入格式输入包含多组测试数据。每组数据占一行,包含两个整数 a 和 b。输出格式每行给出一组测试数据的答案,即 [a,b] 之间有多少不降数。数据范围1≤a≤b≤231−1输入样例:1 91 19输出样例:918#include<bits/stdc++.h>usin

    2022年8月9日
    8
  • Ubuntu18.04安装Ros(最新最详细亲测)「建议收藏」

    Ubuntu18.04安装Ros(最新最详细亲测)「建议收藏」跟我一步一步来,带你轻松安装ROS

    2022年6月15日
    218

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号