httprunner框架有多种编写测试用例的形式,一般常用第二种和第三种;无论选择哪一种,httprunner都会生成一个.py文件。所以可按照个人习惯选择。
一、录制测试用例
-
charles抓包
-
导出.har文件
生成yml格式用例
命令:har2case har_case/huo_test.har -2y
生成.py格式用例
命令:har2case har_case/huo_test.har
根据生成的用例,进一步进行优化
二、编写测试用例-yml格式
config:
name: xxx
variables: # config variables
varA: "configA"
varB: "configB"
varC: "configC"
parameters: # parameter variables
varA: ["paramA1"]
varB: ["paramB1"]
teststeps:
-
name: step 1
variables: # step variables
varA: "step1A"
request:
url: /$varA/$varB/$varC # varA="step1A", varB="paramB1", varC="configC"
method: GET
extract: # extracted variables
varA: body.data.A # suppose varA="extractVarA"
varB: body.data.B # suppose varB="extractVarB"
-
name: step 2
varialbes:
varA: "step2A"
request:
url: /$varA/$varB/$varC # varA="step2A", varB="extractVarB", varC="configC"
method: GET
三、编写测试用例-.py格式
每个HttpRunner测试用例是HttpRunner的子类,并且必须包含config和teststeps两个属性。
config配置
2.1 name(必须的): testcase的一部分,会显示在测试报告和运行日志中。
2.2 base_url(可选择的): 功能路径,url的一部分
2.3 variables(可选择的):testcase通用变量。每个step中可以引用没有在step中设置的变量。换句话说,step中设置的变量的级别比在config中设置的变量级别更高。
2.4. verify(可选择的):指定是否验证服务器的TLS证书。如果想要记录testcase中的http数据特别有用。如果不设置或者设置为true则会产生SSLError错误。
2.5. export(可选择的):提取testcase的session变量。测试用例是为黑盒,config中的的variables视为输入,export为输出。特别是,当该testcase中的某个输出作为下一个testcase中的输入的时候特别有用。-
teststeps列表
3.1. 每一个testcase中包括一个或者多个排序的steps列表(List[Step])。每一个step相当于一个api的request或者另一个testcase的引用
3.2. .with_variables: teststep的变量。 每个步骤中的变量都是相互独立的,因此如果想相互共享variable的话,需要把variable配置在config中。另外teststep中的变量会覆盖config中相同名称的变量。
.method(url): 指定http的方法和SUt的url,它对应于requests.request的方法和url参数。如果配置中设置了base_url,则此处之能设置相对路径。
.with_params 指定request url的参数,这个相当于requests.request中的params参数的数据。
.with_headers 指定request的http headers。相当于requests.request的headers参数部分。
.with_cookies 指定request的http cookies。相当于requests.request的cookies参数部分。
.with_data 指定request的http body。相当于requests.request的data参数部分。
.with_json 指定request的http json。相当于requests.request的json参数部分。
.extract 使用jmespath提取json 应答数据: .with_jmespath(jmes_path:Text, var_name:Text)-->jmes_path: jmespath表达式,可以参考https://jmespath.org/tutorial.html做详细了解;var_name: 存储提取值的变量名,该变量可以被后续的steps中直接使用。
.validate 使用jmespath提取json应答数据,并使用.assert_xxx(jmes_path:Text, expected_value:Any)验证期望值。其中jmes_path表示jmespath表达式; expected_value为预期值,变量或者函数表示。如下图: