【HttpRunner v3.x】笔记—6. 测试用例-teststeps-RunRequest

简介: 【HttpRunner v3.x】笔记—6. 测试用例-teststeps-RunRequest

之前我们了解了config里的各项参数,今天来了解另一个重要部分——teststeps,在这之前,先看看测试用例的分层模型。


一、测试用例分层模型


一个testcase里(就是一个pytest格式的Python文件)可以有一个或者多个测试步骤,就是teststeps[]列表里的Step。


我的理解每一个Step就可以类比成pytest框架下的def test_xxx()的用例函数,在Step里通常都会要请求API完成测试,也可以调用其他测试用例来完成更多的需求。


可以来看下官方的测试用例逻辑图(2.x版本不同,3.x弃用了2.x的API概念):


1268169-20200630161558885-1498623588.png


可以看到,testsuite包含了testcase,testcase1需要依赖testcase2才可以完成,那么就可以在teststep12对其进行引用;而testcase2又依赖于testcase3,那么也可以在teststep22进行引用。


但是在整个testsuite下,这3个testcase都是相互独立的,可以独自运行。如果需要相互调用,则是在testcase内部去完成处理。


可能看起来有点绕,其实官方想表达的就是测试用例分层的一个思想:


  • 测试用例(testcase)应该是完整且独立的,每条测试用例应该是都可以独立运行的
  • 测试用例是测试步骤(teststep)的有序集合
  • 测试用例集(testsuite)是测试用例的无序集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的;如果确实存在先后依赖关系,那就需要在测试用例中完成依赖的处理


其实这一点,在我们自己使用pytest框架编写测试用例的时候同样贯彻到了。为了自动化测试的稳定性和可维护性,每个测试用例之间相互独立是非常有必要的。


二、teststeps-RunRequest


先上一段Step的代码,结合下面的点对照着看:


teststeps = [
        Step(
            RunRequest("get with params")
            .with_variables(
                **{"foo1": "bar11", "foo2": "bar21", "sum_v": "${sum_two(1, 2)}"}
            )
            .get("/get")
            .with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
            .with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
            .extract()
            .with_jmespath("body.args.foo2", "foo3")
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.args.foo1", "bar11")
            .assert_equal("body.args.sum_v", "3")
            .assert_equal("body.args.foo2", "bar21")
        ),


从上面的代码可以看出,RunRequest的作用就是在测试步骤中请求API,并且可以对于API的响应结果进行提取、断言。


1.RunRequest(name)


RunRequest的参数名用于指定teststep名称,它将显示在执行日志和测试报告中。


1268169-20200630161808327-1052315415.png


2. .with_variables


用于存放变量,但是这里的是Step步骤里的变量,不同的Step的变量是相互独立的。所以对于多个Step都要使用的变量,我们可以放到config的变量里去。


另外,如果config和Step里有重名的变量,那么当你引用这个变量的时候,Step变量会覆盖config变量。


3. .method(url)


这里就是指定请求API的方法了,常用的get、post等等。如图所示,就是用的get方法,括号里的url就是要请求的地址了。


这里要注意的是,如果在config里设置了基础url,那么步骤里的url就只能设置相对路径了。


1268169-20200630161906677-575158943.png


4. .with_params


这个就简单了,测接口不都得要传参么,对于params类型的传参,就放这就行了,key-value键值对的形式。对于body形式的传参,看后面。


1268169-20200630161933895-444317314.png


5. .with_headers


同样,有header要带上的就放这里。


1268169-20200630161958119-1233000425.png


6. .with_cookies


需要带cookie的,可以用.with_cookies方法。


1268169-20200630162027925-86343421.png


7. .with_data


对于body类型的传参,可以用.with_data。


1268169-20200630162053696-1423207074.png


8. .with_json


如果是json类型的body请求体,可以用.with_json。


1268169-20200630162116788-1340691039.png

9. .extract


这里就是要做提取操作了,使用.with_jmespath(jmes_path: Text, var_name: Text)。

这里是采用了JMESPath语言,JMESPath是JSON的查询语言,可以便捷的提取json中你需要的元素。


第一个参数是你的目标元素的jmespath表达式,第二个元素则是用来存放这个元素的变量,供有需要的引用。


这里不展开,后面单讲。


1268169-20200630162153865-2077428340.png


10. .validate


断言,我们测试最终就是要验证接口返回是否符合预期。


那在httprunner框架中,可以使用assert_XXX(jmes_path: Text, expected_value: Any)来进行提取和验证。


第一个参数还是jmespath表达式,第二个参数则是预期值。


assert_XXX这种方式相信用过自动化测试框架的都不会陌生,所以也非常容易上手。目前httprunner还是封装了非常丰富的断言方法的,相信可以满足绝大多数的需求了。


1268169-20200630162233641-31937324.png


到这里,一个接口的请求和验证就完成了,我打算用flask快速写几个demo用的接口,可以对必要的方法更进一步的演示。

相关文章
|
10月前
|
前端开发 测试技术
09-Httprunner-生成测试报告
09-Httprunner-生成测试报告
09-Httprunner-生成测试报告
|
10月前
|
JSON 测试技术 API
02-Httprunner-测试用例结构介绍
02-Httprunner-测试用例结构介绍
|
JSON 测试技术 数据格式
接口测试|HttpRunner模拟发送GET请求&自动生成测试报告
接口测试|HttpRunner模拟发送GET请求&自动生成测试报告
116 0
接口测试|HttpRunner模拟发送GET请求&自动生成测试报告
【HttpRunner v3.x】笔记—7. 测试用例-teststeps-RunTestCase
【HttpRunner v3.x】笔记—7. 测试用例-teststeps-RunTestCase
【HttpRunner v3.x】笔记—7. 测试用例-teststeps-RunTestCase
【HttpRunner v3.x】笔记 ——5. 测试用例-config
【HttpRunner v3.x】笔记 ——5. 测试用例-config
【HttpRunner v3.x】笔记 ——5. 测试用例-config
|
JSON IDE 测试技术
【HttpRunner v3.x】笔记 ——4. 测试用例-结构解析
【HttpRunner v3.x】笔记 ——4. 测试用例-结构解析
【HttpRunner v3.x】笔记 ——4. 测试用例-结构解析
|
测试技术 数据库 数据安全/隐私保护
测试用例设计之业务流程分析法
测试用例设计之业务流程分析法
206 0
测试用例设计之业务流程分析法
|
算法 Java 测试技术
边界值分析法测试用例设计实例
边界值分析法是黑盒测试的重要方法,本文以一道数位DP算法题为例,自主测试黑盒测试用例,并采用JUnit5完成单元测试。
140 0
|
安全 Java 测试技术
python接口自动化(三)--如何设计接口测试用例(详解)
上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前,我们来想一下,如何进行接口测试的准备工作。或者说,接口测试的流程是什么?有些人就很好奇,接口测试要流程干嘛?不就是拿着接口文档直接利用接口 测试工具测试嘛。其实,如果只是三五个接口,你可以这么做一个临时的接口测试。但是,如果是上百个接口,或者,你们公司的这个项目,第一次做接口测试,那么,我们还是很有必要严格遵守接口测试的流程。
297 0
python接口自动化(三)--如何设计接口测试用例(详解)
|
测试技术
正交试验测试用例设计及工具推荐
在科研和生产实践中,人们往往要做许多次实验来进行某项研究。实验条件一般包括很多因素,当因素的值不同时,实验的结果也不一样。如果想把每个因素的每个值都要实验一遍,总实验数就等于各因素的值的个数的乘积,而这个数往往很大,超过了可接受的成本。 例如,假设某个实验由A,B,C,D四个因素,每个因素都有10个不同的取值,那么如果想把每个因素都考虑到,我们需要做 10*10*10*10=10000次实验。 为了减少实验数目,我们必须选出那些最有代表性的例子。于是,就要用到了正交表法(Orthogonal Array Testing Strategy)。
252 0
正交试验测试用例设计及工具推荐