初识httprunner

网友投稿 836 2022-05-29

“一站式接口解决方案”。只需维护一份YAML/JSON/Pytest脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

HTTPrunner3.0比2.0概念简化,集成pytest(插件已达900+),框架引入pydantic系统,内置http web server,测试用例编写语法提示(链式调用rest-assured)。

测试用例:独立性(hook机制,setup/teardown)由一到多个有序的step构成,step可被引用。

Debugtalk.py:作为项目根目录的锚点,用例中的相对路径会在当前目录查找该文件,没找到再去上层找。。把动态运算放在debugtalk.py中,在用例中进行引用。实现约定大于配置的思路。

https://docs.httprunner.org/

https://github.com/HttpRunner/HttpRunner

1.准备python虚拟环境

创建:python -m venv anny-env

进入环境:执行anny-env\Scripts\activate.bat

2.安装httprunner

pip install httprunner  (3.1.4)

检查:httprunner -V       httprunner -h

3.脚手架生成项目httprunner startproject ***

这里用到原始命令httprunner,其他地方可以用子命令hrun

4.生成的项目可通过ide打开,设置中要配置创建的python虚拟环境。

5.通过hrun demo***.py运行demo.yml用例。

用例运行逻辑将.yml/.json用例生成.py用例并格式化,用pytest运行。

6.通过charles抓包导出为.har文件,用har2case命令将.har文件默认转换为.py文件,使用pytest命令运行。

7.也可将.har文件使用har2case -2y转换为.yml文件,使用hrun命令运行。

8.查看报告:默认安装了pytest-html。hrun testcases --html=./reports/demo.html

也支持allure。

以mubu.com为例:

生成脚本:

1. 使用charles抓包mubu.com登录并新建文档录入标题、内容,导出为mubu_login.har文件。

2. 在pycharm中将.har文件转换为.py文件并用Pytest直接运行OK.

3. 查看回放后在mubu.com中生成的文档,发现生成的文档内容为空。

定位脚本问题:

排查方法:缩小范围

引用变量:${}

1.关联参数:找关联参数进行引用变量的替换。

参数关联:提取参数

.extract()

.with_jmespath("body.data.id","docID")

初识httprunner

2.全局变量:对于memberId要通过charles看一下是通过服务端生成还是前端JS生成。如果请求使用memberId前没有出现,就说明在前端生成的。这种情况不用非做关联参数处理,但会存在较多接口存在该值,理解为一个全局变量,因此将其放在config中添加.variables(**{"memberId":"7506370717891848"}),将所有参数替换为${memberId}。全局变量的生效范围只在当前用例中,如果多用例共享,在debugtalk.py中定义。

3.把userid进行参数关联。

这里要注意extract()放的位置

4. 代码调整结束后回放成功,新生成一个demo文档,内容也一致。

5. 对脚本做更多的优化:csrf_token、SESSION不需要写死,去掉。

6. data_unique_id做参数化。

目的:脚本简洁,没有写死的数据

原则:看下数据是否从服务端返回的,如果是做参数化关联。

其他:

1. SLARDAR_WEB_ID:httprunner中的日志埋点的前端框架,每个请求中有一个唯一的埋点,接口请求的后端经过后端服务将链路日志捞取出来,方便问题定位,是前端生成的。

2. 去掉cookies中一些无用的参数,如:reg_entrance,Hm_lvt_*,_gid,_gat,Hm_lpvt_*

3. Jwt-Token不能删除但也不能写死,需要提取并参数化关联。注意Jwt-Token在jmespath中不支持直接-线,要用”Jwt-Token”引起来,不能用单引号。

Base_url抽取:抽取后的请求url中去掉base_url。

4.如果网站只有一个host,用base_url可实现整个替换。如果有两个host,就无法全部替换。

那就需要通过把host设置为全局变量的形式,然后在出现mubu.com的地方引用$host.

这样就实现了把所有请求中的mubu.com进行参数化。

5.用全局变量抽取帐号、密码。

定义局部变量:在step中生效

调整校验器,增加assert.

6.想在接口后等待指定时间:使用setup/teardown hook. sleep方法是写在框架里的。

在hook中调用函数时是需要知道函数的运行结果的,并期望结果能在后续使用。用到hook的另一种用法。

7.模拟签名算法:在debugtalk.py中定义函数

用例中引用函数的值:

用例解耦:

1.把登录用例抽取出来创建一个用例文件,需要引用登录用例的地方这样写:

对于用到的login中提取的参数,两边都进行export输出变量值:

参数化数据驱动:

1.在yaml文件中添加参数:

2.使用hmake生成pytest文件,引入了parameters库。

运行.yml文件就会发现运行了两次。

将生成的.py文件中的参数驱动代码放入需要的文件中。

@pytest.mark.parametrize("param", Parameters({"index": [1, 2]}))

def test_start(self, param):

super().test_start(param)

@pytest.mark.parametrize("param", Parameters({"docTitle": ["demo-1", "demo-2","demo-3"]}))

引用函数生成参数列表:将生成的文件名称函数写入debugtalk中,调用函数。

def gen_doc_title(num):

return [get_random_title() for _ in range(num)]

@pytest.mark.parametrize("param", Parameters({"docTitle": "${gen_doc_title(3)}"}))

对于数据文件比较多的时候,可以引用CSV文件,文件中用,分隔参数。引用时,多个参数用-连接,比如:“phone-password”:“${parameterize(data/accounts.csv)}”引用值。data/accounts.csv是路径。注意执行时有两组数据的话,会执行四次,参数值进行迪卡尔乘积,而不是两次。

查看报告:

1.默认pytest-html   hrun --html=login.html

2.使用allure  hrun --allulredir=reports/     allure serve reports/

性能测试:

1.pip install locust

2.locusts -f testcases/mubu_login_test.py 以并发的形式把性能测试跑起来

Python web前端

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:iOS之深入解析WKWebView加载的生命周期与代理方法
下一篇:如何做好IT项目的运维管理?华汇数据
相关文章