一、结构解析
HttpRunner v3.x 支持三种测试用例格式,即 pytest,YAML 和 JSON。
1.1、用例结构
每个测试用例都是 HttpRunner 的子类(一个类即为一个测试用例),并且必须具有两个类属性:config
和 teststeps
。
-
config
:配置测试用例级别的设置,包括 base_url,verify,variables,export。 -
teststeps
:测试步骤的列表(List [Step]
),每个步骤对应一个 API 请求或另一个测试用例的应用。此外,还支持variables
/extract
/validate
/hooks
来创建极其复杂的测试方案。
1.2、链式调用
HttpRunner v3.x 的最强大功能之一是链式调用,使用它无需记住任何测试用例格式的详细信息,并且在 IDE 中编写测试用例时可以智能完成。
1.3、config下的属性设置
1.name 必填 用例名称
运行后,在debug日志里,可以看的用例名称被展示出来。
2.base_url 选填
此配置一般在多环境切换中使用,比如你的这套测试用例在qa环境,uat环境都要使用,那么就可以把基础地址(举例http://demo.qa.com),设置进去。在后面的teststep中,只需要填上接口的相对路径就好了(举例 /get)。
这样的话,切换环境运行,只需要修改base_url即可。
3.variables 选填 变量
config中的变量为公共变量,step中还会有步骤变量。
step变量优先级高于config变量,重名变量优先引用step中变量。
4.verify 选题 是否验证服务器TLS证书的开关
通常设置为flase,当你发现SSL报错了,可以检查一下是不是verify没传,或者设置了True。
SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)'))
5.export 选填 导出
导出变量,用于step间参数的传递
- 在config中配置export“foo3”这个变量。
- 在第一个Step中,.extract() 提取了"body.args.foo2"给变量“foo3”。
- 在第二个Step中,引用变量"foo3"。
1.4、teststeps下的属性设置
1.RunRequest(name)
RunRequest的参数名用于指定teststep名称,它将显示在执行日志和测试报告中。
2. .with_variables
用于存放变量,但是这里的是Step步骤里的变量,不同的Step的变量是相互独立的。所以对于多个Step都要使用的变量,我们可以放到config的变量里去。
另外,如果config和Step里有重名的变量,那么当你引用这个变量的时候,Step变量会覆盖config变量。
3. .method(url)
这里就是指定请求API的方法了,常用的get、post等等。如图所示,就是用的get方法,括号里的url就是要请求的地址了。
这里要注意的是,如果在config里设置了基础url,那么步骤里的url就只能设置相对路径了。
4. .with_params
这个就简单了,测接口不都得要传参么,对于params类型的传参,就放这就行了,key-value键值对的形式。对于body形式的传参,看后面。
5. .with_headers
同样,有header要带上的就放这里。
6. .with_cookies
需要带cookie的,可以用.with_cookies方法。
7. .with_data
对于body类型的传参,可以用.with_data。
8. .with_json
如果是json类型的body请求体,可以用.with_json。
9. .extract
这里就是要做提取操作了,使用.with_jmespath(jmes_path: Text, var_name: Text)。
这里是采用了JMESPath语言,JMESPath是JSON的查询语言,可以便捷的提取json中你需要的元素。
第一个参数是你的目标元素的jmespath表达式,第二个元素则是用来存放这个元素的变量,供有需要的引用。
这里不展开,后面单讲。
10. .validate
断言,我们测试最终就是要验证接口返回是否符合预期。
那在httprunner框架中,可以使用assert_XXX(jmes_path: Text, expected_value: Any)来进行提取和验证。
第一个参数还是jmespath表达式,第二个参数则是预期值。
assert_XXX这种方式相信用过自动化测试框架的都不会陌生,所以也非常容易上手。目前httprunner还是封装了非常丰富的断言方法的,相信可以满足绝大多数的需求了。
- equals: 是否相等
- less_than: 小于
- less_than_or_equals: 小于等于
- greater_than: 大于
- greater_than_or_equals: 大于等于
- not_equals: 不等于
- string_equals: 字符串相等
- length_equals: 长度相等
- length_greater_than: 长度大于
- length_greater_than_or_equals: 长度大于等于
- length_less_than: 长度小于
- length_less_than_or_equals: 长度小于等于
- contains: 预期结果是否被包含在实际结果中
- contained_by: 实际结果是否被包含在预期结果中
- type_match: 类型是否匹配
- regex_match: 正则表达式是否匹配
- startswith: 字符串是否以什么开头
- endswith: 字符串是否以什么结尾