【接口/性能】HttpRunner02-用例分层

1. HttpRunner安装

pip install httprunner

可在git上下载源码:https://github.com/HttpRunner/HttpRunner

2. 背景

在HttpRunner中,测试用例引擎最大的特色就是支持YAML/JSON格式的用例描述形式。

不过,问题在于,接口通常会出现在多个测试场景中,而每次都需要对接口进行定义描述,包括请求的URL、Header、Body、以及预期响应值等,这就会产生大量的重复。

3. 接口-模块-场景分层

httprunner中实现了接口-模块-场景分层。通过startproject命令创建项目,可以看到以下目录。


$ hrun --startproject OWInterfacesV2

INFO:root: Start to create new project: D:\python\OWInterfacesV2

INFO:root:      created folder: D:\python\OWInterfacesV2

INFO:root:      created folder: D:\python\OWInterfacesV2\tests

INFO:root:      created folder: D:\python\OWInterfacesV2\tests\api

INFO:root:      created folder: D:\python\OWInterfacesV2\tests\suite

INFO:root:      created folder: D:\python\OWInterfacesV2\tests\testcases

INFO:root:      created file: D:\python\OWInterfacesV2\tests\debugtalk.py


tests

├── api

├── debugtalk.py

├── suite

└── testcases

在组织测试用例描述的文件目录结构时,遵循以下约定:

  • 将项目的所有API接口定义放置在api目录下,并在api目录中按照项目的系统模块来组织接口的定义。

备注:

---接口定义块的标识为api;

---接口定义块中包含def字段,形式为api_name(*args),作为接口的唯一标识ID;需要注意的是,即使api没有参数,也需要带上括号,api_name();这和编程语言中定义函数是一样的。

  • 约定将项目的所有模块定义放置在suite目录下,并在suite目录中按照项目的功能来组织模块的定义。相当于,多个api的组合。

  • 后续,在testcases目录中描述测试场景,可同时引用接口定义和模块定义。

  • 另外,相关的函数定义放置在debugtalk.py中

例如,典型的测试用例文件的目录结构如下所示:
【接口/性能】HttpRunner02-用例分层_第1张图片
image.png

4. 结合项目实践

结合到公司项目中的测试用例,遇到的问题:

一个接口B(如login接口)依赖于前一接口A(如getToken接口)的输出结果(获取validate token),在编写B的各种用例时,每个用例都需调用一次A。

比如下图:

validate接口测试完后,可以extract出输出结果中的token($valtoken),在login_success用例中作为入参。
【接口/性能】HttpRunner02-用例分层_第2张图片
image.png

可是,如果新增一个login相关的用例,lgoin with unexist user,入参$valtoken是需要再次通过validate接口获取一次的。如果用以前的token将会返回invalid token的结果。
【接口/性能】HttpRunner02-用例分层_第3张图片
image.png
这时候不知道怎么再次获取token进行调用

解决方法:

因为很多接口的前提是先获取validate token或先登录,所以把get_validate_token的接口封装出来,放在debugtalk.py下。这样在测试用例中可以直接调用。
【接口/性能】HttpRunner02-用例分层_第4张图片
image.png

同时,也把一些由环境决定的参数提取出来(测试环境或生产环境)。

新增一个env.py文件,将环境的设置和一些公共不变的参数放在其中。如:test或prod环境,baseurl,headers等参数。

在debugtalk.py中添加方法:根据不同环境得到不同的变量,如:get_validate_token(), get_login_token(), login_email(), reg_email()等方法。

注意:

.yml中的测试用例是按顺序执行的。

比如:如果放置用例的顺序是login, logout, query。则在logout后,之前login获取的token就不能用了,到执行query时,用例会失败,提示invalidate token。

为了避免这种非被测内容本身引起的错误,需注意下用例的顺序。这里把logout放置在最后。

你可能感兴趣的:(【接口/性能】HttpRunner02-用例分层)