这一篇主要针对htpprunner框架yaml格式的测试用例中各字段进行一个深度的说明
生成的用例格式如下:
config:
name: `testcase description`
teststeps:
- name: ""
request:
method: POST
url: https://api/captcha/captchaImage
headers:
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Length: "6"
Content-Type: application/json;charset=UTF-8
HRUN-Request-ID: HRUN-05d35840-a189-49f3-9831-5ad2e68e97ea-972746
RequestId: 600b6c861803445eb48539c8b8edf7b6
User-Agent: python-requests/2.27.1
body: None
validate:
- check: status_code
assert: equals
expect: 200
msg: assert response status code
- check: headers."Content-Type"
assert: equals
expect: application/json;charset=UTF-8
msg: assert response header Content-Type
- check: body.code
assert: equals
expect: General.Success
msg: assert response body code
- check: body.msg
assert: equals
expect: 接口调用成功
msg: assert response body msg
下面按照源码层级来一个个字段添加相关说明:
class TestCase(BaseModel):
config: TConfig
teststeps: List[TStep]
上面源码可以看出,主层级就两个,其一config用于配置的,teststeps测试用例步骤
Config
class TConfig(BaseModel):
name: Name
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
# configs for other protocols
thrift: TConfigThrift = None
db: TConfigDB = TConfigDB()
字段说明:
name: 配置名字,必填
verify: 用于指定是否验证 SSL 证书,默认为false
base_url:请求地址,默认为空
varibales: 全局变量,这是一个VariablesMapping或Text格式的,默认值为一个空字典
parameters: 用于参数化,具体使用规则如下:
方式1:参数列表
user_agent: [ "iOS/10.1", "iOS/10.2" ]
方式2:csv文件,使用框架能力中提供的函数${parameterize()}或${P()}实现
username-password: ${parameterize($file)}
方式3:自定义函数(函数定义在debugtalk.py文件中)
user_id: ${get_user_id(10)}
export: 用在测试过程中将变量的值导出为环境变量,以便在后续的请求或测试中使用。接口关联使用
path: 用于指定请求的路径或接口地址
thrift: 用于指定使用 Thrift 协议进行请求和响应的通信(说实话,我没用过)
db: 用于指定与数据库的连接和操作
使用配置如下:
db:
engine: pymysql
host: localhost
port: 3306
database: mydb
username: root
password: password123
sql: SELECT * FROM users WHERE id = 123
Step
class TStep(BaseModel):
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] = []
retry_times: int = 0
retry_interval: int = 0 # sec
thrift_request: Union[TThriftRequest, None] = None
sql_request: Union[TSqlRequest, None] = None
字段说明:
name:步骤名称
request: 接口请求参数
testcase(api):测试用例步骤,一般是用于指定api文件路径,以前版本也可以写成api,当前v4版本两种都支持
variables: 测试步骤内的局部变量
setup_hooks: 用户测试用例前置处理
teardown_hooks: 后置处理
extract:用于提取返回报文中的参数
export:用于导出参数,一般都是配合extract一起使用
validators: 用于接口断言
validate_script: 断言脚本
retry_times:重试时间
retry_interval:重试次数
thrift_request: 用于指定使用 Thrift 协议的请求参数
sql_request: 用户数据库请求参数,使用和config.db配置一致
Request
class TRequest(BaseModel):
"""requests.Request model"""
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
字段说明:
method: 请求方式
url: 请求地址
params: get请求参数
headers: 请求头
req_json(json): json格式的请求参数
data: data格式的请求参数
cookies: 请求的cookie
timeout: 请求超时时间,默认为120s
allow_redirects: 用于是否可以重定向,默认为false
verify: 用于指定是否验证 SSL 证书,默认为false,此参数设置时,优先级大于全局变量中的设置
upload: 用户上传文件的请求参数