httprunner的安装和使用
前言
在公司实施接口自动化的过程中,接触到了一个不同于python+requests+unittest的接口自动化框架,相比后者,前者对于零基础员工易上手,但是对比后者,自主性较差,后续几篇博客,我会详细记录自己的一些心得。
下载安装
httprunner是python的第三方库,是国内大牛完成编写开发的,所以直接使用pip install httprunner 即可完成安装;需要知道的是,可以通过添加版本号完成指定版本安装
pip install httprunner==2.5.7
不确定自己是否已经完成安装的,可以通过两个方式去确认,首先通过dos命令操作输入pip list查看
pip list
也可以通过 hrun -V 查看httprunner的版本号
hrun -V
如两个图所示,都为httprunner已经安装完毕,个人建议使用httprunner2.5.7的版本,是httprunner较为稳定的版本。
框架介绍
httprunner框架是通过特定的命令,新建一个项目,然后这个项目包即为httprunner的框架,具体命令,会在下文介绍,现在先讲解一下httprunner的框架组成;
httprunner框架的核心由api,testcases,testsuites三个目录加上debugtalk.py文件组成,api文件夹顾名思义是存放单个接口的api的地址,testcases文件夹是存放拼接各个api文件形成的测试用例的地址,testsuites是拼接各个case文件形成测试套件的地址;
在使用过程中,我们一般根据功能测试场景,编写功能测试用例,然后通过抓取该条用例执行过程的中api接口,完成api接口的yml文件编写(httprunner所支持的一种文件编写格式,还可以使用json格式编写),在然后根据功能测试用例中接口的调用顺序编写testcases的顺序,原则上是一个testcase文件表示一个功能测试用例;一个项目模块一个suites文件;
框架的简单使用
创建项目
切换到希望项目存在的路径目录下,使用hrun --startproject 项目名称 完成项目的创建,cd /d 目标路径,dir查看路径目录文件
hrun --startproject stu_demo_hrun
api文件的编写
抓包工具抓包转化为yml文件
<1>使用charles和fiddler导出har文件,转化为yml文件
右键需要导出的接口,选择Export session…;
然后出现下面的弹框,选择文件存储的位置后,选择文件类型为har格式
然后打开dos命令操作行,执行命令:har2case 文件名 -2y
har2case UntitIed.har -2y
转换成功的yml文件还不能直接使用,因为转换的是case,要修改为api;首先使用notepad++打开生成的yml文件,然后去掉下图红框内的内容,保留绿框内容,并且全选缩进,使name,request,validata三个字段顶行,其他字段保持缩进距离,如图二所示
更改完成以后,应该如下图所示,三个红框内容顶行,其他内容保持缩进距离
到这一步,api文件的编写就完成了
testcase文件的编写
如上图,testcase的文件编写,也是yml文件,但是不同于api文件,它手动编写即可,config为测试用例的通用配置,可以理解为全局配置,teststeps则为测试步骤,根据该路径下的api排列顺序决定执行顺序,我文件中所写的step1只是自定义的标识,方便测试报告的阅读而已
testsuite的编写
如图上文字描述,testsuite文件也是一个集成文件,用于集成各个case文件,执行顺序也是按照testcas的排列顺序执行,理论上也是支持case之间进行参数传递和关联,但是根据我的项目经验,还是建议将关联关系放在case中去关联,保持case的独立性
yml 文件的各个字段解析
api文件
以上图为例
字段 | 解析 | 使用 |
---|---|---|
name | 接口的名称 | 执行单个接口时,测试报告上的用例名称 |
base_url | 接口的host地址 | - |
variables | 变量声明 | 当api需要定义一些变量/参数时,需要在该字段下已规定的格式进行定义 |
Status:0 | Status为接口使用的变量的名称,冒号后为变量的值 | Api使用变量,需要如此定义 |
request | api接口的请求体,包括了headers,json,method,url | Api的实际请求体 |
headers | 同接口的headers字段,cookie等信息写在此处 | |
Json | 接口的请求参数按照层级关系控制缩进写在此处 | |
Method | 接口的请求方式 | |
Url | 接口的请求地址 | 当有base_url存在时,可以只写host之后的路径 |
extract | 取值 | 当需要获取接口响应值的某个字段时,需要在该字段下定义 |
json取值 | methodName: content.header.stackTraceElements.0.methodName | |
正则取值 | methodName :左边(.+?)右边 | |
validate | 断言 | - eq: ["$methodName", success] |
https://www.cnblogs.com/luoman/p/12844300.html 其他博主写的断言的详细说明
case文件
和api重复的字段不再重复说明
字段 | 解析 | 使用 |
---|---|---|
config | case文件的公共区域 c | ase中所有步骤都能使用到的一些参数会在该字段下定义 |
Name | case的名称 | |
Variables、base_url | 和api一样,只是作用域是全部的步骤 | |
teststeps | 测试步骤 | 所有的测试步骤,在该路径下 |
suite文件
除了testcases和路径名称是testcase以外和case文件没有任何区别
文件的执行
有点点击你要执行的yml文件(可以是api,也可以是testcase或者testsuite文件),选择copy path 然后如下图选择相对路径;注意!! 请在项目路径下执行下行命令,否则不能正确读取debugtalk的自定义方法
hrun api/演示/PC/storeList门店列表.yml
执行结果
尾言
后续还会更新关于httprunner的一些进阶使用和遇到的坑,如果大佬们发现有什么错误,请帮忙指出