好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

httprunner(7)测试用例RunRequest

测试用例分层

每个测试用例都有1个或多个测试步骤(List[step]),每个测试步骤对应一个API请求或其他用例的引用。

从上图分析,我们可以看到testsuite中包含了3个测试用例,testcase1中有4个请求和一个步骤teststep12,其中步骤teststep12依赖testcase2,testcase2中的步骤teststep22又依赖于testcase3。 举例说明:模仿上面的用例,我们也写3个用例

testcase1:以最便宜的价格购买一瓶可口可乐(testcase1中的其中一个步骤需要调用testcase2) testcase2:查询价格最低的250ml可口可乐,并进入首页(testcase2中的其中一个步骤需要调用testcase3) testcase3:登录用户user1成功

注意

为了简单,在HttpRunner v2.x中的API概念已经被取消了。你可以将API定义为只有一个请求步骤的测试用例。 ?

测试用例的分层思想:

测试用例(testcase)应该是完整且独立的,每条测试用例应该是都可以独立运行的(重要) 测试用例是测试步骤(teststep)的有序集合 测试用例集(testsuite)是测试用例的无序集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的,可以无序执行 ?

RunRequest

????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")
????????),

从上述代码可知,teststeps中的RunRequest用于发送API请求和对响应结果进行提取和断言 下面详细介绍里面各个方法的作用 ?

RunRequest(name)

RunRequest的参数名用于指定teststep名称,它将显示在执行日志和测试报告中。 RunRequest("get with params")这个步骤的名称就是get with params ?

.with_variables

设置测试步骤的变量。每个测试步骤的变量都是独立的,如果想在多个测试步骤中共享变量,需要在config variables中定义。 注意:如果config variables和.with_variables里有重名的变量,那么当你引用这个变量的时候,Step变量会覆盖config变量。 ?

.method(url)

设置http请求方法,比如get、post、put、patch、delete等等,后面再跟上路径 注意:如果base_url在config中设置了,url只能是相对路径部分。

#?用get方法访问路径为/getTime(相对路径)
.get("/getTime")

#?用post方法访问路径id=3(绝对路径)
.post("http://HdhCmsTestbaidu测试数据/getTime")

?

.with_params

设置url的query,以键值对的形式,相当于requests.request 中的params。

.with_params(**{"foo1":?"$foo1",?"foo2":?"$foo2",?"sum_v":?"$sum_v"})

?

.with_headers

设置请求的headers,相当于requests.request 中的headers。

.with_headers(**{"User-Agent":?"HttpRunner/${get_httprunner_version()}"})

?

.with_cookies

设置Http请求cookies,相当于requests.request 中的cookies。 ?

.with_data

设置Http的请求Body,相当于requests.request 中的data。

.with_data("foo1=$foo1&foo2=$foo2&foo3=$foo3")

?

.with_json

设置Http请求json格式的Body,相当于requests.request 中的json。

.with_json({"foo1":?"foo1",?"foo2":?"foo2",?"foo3":?"foo3"})

?

.extract

利用jmespath提取Json Response body内容,

.with_jmespath(jmes_path:?Text,?var_name:?Text)
jmespath: 目标元素的jmespath表达式,可以参考https://HdhCmsTestcnblogs测试数据/jiakecong/category/1929704.html var_name: 存储提取值的变量名,可以被后面的测试步骤引用。 ?

.validate

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

assert_XXX(jmespath:?Text,?expected_value:?ANy,?message:?Text="")
jmespath: jmespath表达式,可以参考https://HdhCmsTestcnblogs测试数据/jiakecong/category/1929704.html expected_value: 指定期望值或变量,也可以调用方法 message(optional): 用于描述断言失败原因

下图展示HttpRunner内置断言:

查看更多关于httprunner(7)测试用例RunRequest的详细内容...

  阅读:33次