接口自动化进阶01-HTTPrunner(附带说明文档)
前言:这篇只是一篇可有可无(用心良苦)的的学习笔记。
而今天主题主要介绍HTTPrunner的特点,弊端,针对弊端的其他推荐;安装,安装问题的排查;快速上手指南的总结。
一、HTTPrunner的特点
- 继承 Requests ,可以实现HTTPS需求
- 采用 YAML/JSON 的形式描述测试场景
- 借助辅助函数(debugtalk.py),实现复杂的动态计算逻辑
- 支持测试用例分层,可以实现测试用例复用
- 测试前后支持hook机制
- 响应结果支持丰富校验机制
- 基于har实现接口录制和用例生成功能
- 结合locust框架,可实现分布式性能测试
- 执行方式采用CLI 调用,可与 Jenkins 等持续集成工具完美结合
- 测试结果报告简洁,有详细的统计信息和日志记录
总结:测试的用例可以实现分层,采用的是YAML/JSON 形式编写测试用例,测试场景,测试前后都是支持hook机制,测试中间可以借助辅助函数,实现复杂的功能,同时测试的结果可以进行判断,可以实现持续继承,且生成报告,函数都是封装好的,所以使用是非常的友好。
但是这是一个开源的项目,意味着总不会那么的完美对吧。于是我们可以找到他的开源项目,发现最新版本3.0以上的问题还是比较多的,于是这边还是建议使用的是2.0以上版本的,于是这就代表了我们安装的过程中需要指定版本。
二、HTTPrunner弊端
- 语法格式没法校验,报错是执行测试分析结果才会得知。所以作者推荐的是json格式编写,假如yaml格式不熟练的话,可以先编写json格式的测试用例,再利用json的在线工具检测语法,然后实现排查。这就非常需要你遵循别人家的规则了。
- 数据驱动依赖接口返回,先后顺序问题,解决需要慢慢分布解决。
三、推荐方案
针对这种问题,对于复杂的接口可以利用Unittest+Request+HTMLRunner,但是学习成本比较高,维护成本比较高,需要较好的代码能力和业务逻辑理解能力,和项目的稳定性等多方面考虑。
于是假如接口层面不是太复杂,可以直接使用框架,成本比较低,后续可以实现二次开发
四、安装教程说明
-
安装环境的前提:建议使用 Python 3.6 及以上版本,还有重点就是把fiddler其他抓包工具关闭,防止端口占用。
-
官方推荐的安装方式:
这里安装的是最新版本,这边不建议安装最新版本,因为最新版本的问题还是会比较多,详细可看开源项目
-
个人推荐安装方式:pip install httprunner==2.5.7
-
安装结果校验: hrun -V,假如检测到版本号就是安装成功。而这里的安装成功代表的是你安装成功了HttpRunner 的必要依赖库。假如你只是要用到HTTPrunner,那么就需要安装 poetry
-
安装 poetry教程(附带的):
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
$ git clone https://github.com/HttpRunner/HttpRunner.git
$ poetry install
$ poetry run python -m unittest discover
$ poetry show --tree#调试运行 hrun
$ poetry run python -m httprunner -h#调试运行 locusts
$ pipenv run python -m httprunner.ext.locusts -h -
为啥有第五步的安装教程:因为主要是locusts,这个是属于性能压力测试方面。
五、快速上手
首先从作者的角度来看,做了一项测试准备和测试结果的输出的一个流程,采用的是错误引出对应的方法的使用。
而我当然是没有可能中规中矩的按照这种思路再说一遍,那还不如直接看文档,于是我就要破案常规的使用中需要注意的点(有种像做场景法的模式去说明作者的妙啊)
-
测试目的----HTTPrunner快速上手的接口思路把控
-
测试要点----常规的接口思想,常规步骤是什么呢
首先解释的是常规的接口思想:请求地址(URL),请求头,请求参数,响应状态,响应的信息(这里写的就是有点口头了,虽然还是可以细分)
第二就是解释下常规的步骤是什么:get请求,post请求(对应的请求形式,自行百度),既然有请求就会有请求的关联(关联这词也可以百度),而用口头话说就是找爸爸的钱包,然后去把钱包的钱拿出来,然后装到自己口袋里(就是相当于把响应的数据的某一部分拿过来作为下一步骤的请求的数据),那么说完了请求有关联,那么当然会有参数化,那么怎么理解参数化呢?我又尝试用口头话说了就是:聊天你可以找美女A也可以美女B也可以帅哥A ,而多元的选择就类似参数化,在接口中对应的请求就都会有参数化,比如get请求也会有参数化,post请求也会有参数化(那么可以自行百度)。
总结就是:请求里有什么内容(地址,请求头,请求参数,判断响应结果,判断响应状态,输出结果),内容可以干什么事情(参数关联,参数化数据驱动,参数加密,参数解密,地址设置全局变量,变量的申明调用,提取公共变量等),请求完之后就是输出内容报告(在输出前期就是要判断响应的结果),这就需要了解得是接口的类型,接口的每一个字段的信息,越细致越看透。
-
测试要点----接口的流程注意点又会是什么?,作者是怎么一步一步讲解的呢?(这里就是开始掌握作者的HTTPrunner)
-
抓包,导出为 HAR 格式的文件
-
har 转换为 HttpRunner 的测试用例文件,如:$ har2case docs/data/demo-quickstart.har -2y
-
查看对应的yaml文件:
-
运行对应的yaml文件:hrun docs/data/demo-quickstart-0.yml(hrun 对应路径的yml)
-
排查错误:断言中与token的值是否为固定值,参数关联,利用到前者的token(参数提取(extract)和参数引用的功能($var))
-
优化:URL(base_url 抽取出来,放在config)
-
优化:抽取公共变量(config 的 variables)
-
优化:实现动态逻辑运算(debugtalk.py,定义相关的函数和变量。)后续进阶讲解
-
优化:参数化( parameters 关键字),这需要一个测试场景的文件(yml)
9.测试报告,在report文件夹下生成的是HTML格式,可以看到对应的请求信息,错误信息。
-
-
测试要点-----明确框架的逻辑结构
- 测试用例=测试脚本(业务逻辑(预置条件,测试步骤,预期结果)+debugtalk.py)+测试数据(业务数据逻辑)
- 测试步骤=每一个API请求
- 测试用例集=测试场景(无序)
-
测试结果----把这种快速入门的思路带到细化的点的思考
- 测试场景:参数化,非参数化
- 测试用例组织
- hook机制
- debugtalk.py辅助函数应用
- 环境变量
- 参数化
- 持续集成
- 以上都会在下期的文章中写到。