基于HttpRunner4.0的接口自动化测试实践[内含用例设计和编写]
前言
前几天逛测试论坛,发现HttpRunner竟然推出v4.0版本,感到非常的激动和欢喜。对于HttpRunner工具,在我上家公司是使用HttpRunner1.0版本为基础二次开发成公司通用接口自动化框架并且集成到测试管理平台,直到现在也一直服务公司内部业务测试,不仅可以快速进行需求自动化测试、还可以进行回归测试验证服务框架升级等需求。
回想前几年,当时好用的接口自动化框架和平台并不多,接口自动化框架大多数都是基于pytest写的纯代码的形式的,还是需要测试人员有代码能力,当时我们急需要一款不用写代码,并且可以集成到CICD上。
虽然现在这家公司内部已经有一套统一的接口自动化工具,但是我还是希望让更多的人看到HttpRunner这么优秀的工具存在。
版本对比
这个图包含HttpRunner1到4的功能对比:
在功能升级上,如下几个功能是我比较期待的功能:
多协议支持: 现在公司内部一般都存在多个协议,支持了多协议测试,这个功能完全可以使用一套接口测试工具解决,不用再切换其他工具了。
脚本转换工具: 支持了其他接口周边工具,比如可以从swagger就能转换成接口测试用力,极大的提高了工作效率。
性能测试: 在早期的HttpRunner是使用Locust作为性能引擎发压,性能上还有些不足。HttpRunner4.0使用boomer作为性能引擎发压,boomer是golang编写的,性能强劲。
安装
HttpRunner v4 采用 Golang 开发,已针对主流操作系统预编译了二进制文件,只需在系统终端中执行一条命令即可完成安装部署。
安装命令如下:
bash -c "$(curl -ksSL https://httprunner.com/script/install.sh)"
验证是否安装成功:
hrp --help
查看版本命令:
hrp -v
hrp version v4.0.0
体验
创建项目
有了HttpRunner工具以后,需要本地创建一个工程项目。
恰好HttpRunner支持使用脚手架创建工程项目,会自动生成需要的工程结构。
执行命令如下:
hrp startproject apiDemo
执行命令完成后,在本地会创建一个"apiDemo"文件夹。
如下是项目工程的目录结构:
会自动创建一个python虚拟环境、debugtalk、testcase、report等结构。
用例组织
其中,testcases文件夹中包含了多个示例测试用例。主要包含基本配置、请求配置两部分。
config(基本配置): 主要配置用例的公共参数、请求host等参数。
teststeps(用例配置: 主要配置用例的接口path、请求参数、断言参数等。teststeps可以包含多个测试用例,执行顺序是从上到下顺序执行。
用例Case中,可以引用变量和调用函数
变量引用: 约定通过 的形式来引用变量,例如 fool1或{foo1},变量定义需要在config的variables定义。
函数调用:约定通过调用插件函数{sum_two(1, 2)},函数调用需要在debugtalk.py代码中编写。
比如需要用例需要执行两个参数求合,这种符合业务场景的方法,在debugtalk.py编写。
debugtalk.py需要通过 funppy 进行 register 和 serve() 即可。
把sum_two_int函数映射成sum_two函数,便于在用例中调用执行。
if __name__ == '__main__':
funppy.register("sum_two", sum_two_int)
funppy.serve()
实战
到此为止,我们对HttpRunner4.0有了基本认识,接下使用项目实战一把。
开源的电商项目mall作为本次项目案例.本文主要介绍,从项目部署 => 需求分析 => 用例设计 API测试,微服务API测试的整个过程。
项目部署
后台管理系统,如下图:
GitHub地址:
https://github.com/macrozheng/mall
部署教程:
https://macrozheng.github.io/mall-learning/#/README
下载代码
git clone https://github.com/macrozheng/mall.git
打包代码
mvn install
部署命令
nohup java -jar mall-admin-1.0-SNAPSHOT.jar &
mall后端服务集成swagger,可以自动生成接口文档,swagger地址如下:
http://localhost:8080/swagger-ui.html#/
打开上面地址,出现下图说明访问正常。
需求分析
mall是一个完整的电商管理系统,包含:商品管理、订单管理、营销模块等。
本次需求模块是"广告列表"功能。
梳理如下功能点:
测试用例
首先我们需要对测试的场景进行抽离,明确场景的接口、参数等。
接口测试用例编写
编写登录测试接口
我们测试的项目,需要先执行登录接口。
这里考虑到把登录接口独立出来成mall_login_testcase.yml,为了能方便其他接口用例方便复用。
从登录接口返回数据结果中得到鉴权参数,传递给其他接口放到请求头中。
其他接口测试用例在teststeps中引入登录用例即可。
编写广告测试接口
创建广告接口为例子,根据接口请求参数定义好参数。由于为了让每次创建的广告是唯一的,需要让name参数每次不一样,比如使用固定前缀 + 时间戳的方式,就能做到唯一。
在debugtalk.py文件中创建get_time函数返回当前时间戳,然后在变量中引入即可。
变量引入:
variables:
ad_name: ad_name_${get_time()}
验证结果这块,支持判断结果等于、不等于、大于等于等常见判断方法,在这里是使用eq这种缩写关键字替代。
validate:
- eq: ["status_code", 200]
- ge: ["body.data", 1]
在删除广告接口的入参需要广告id,这里需要动态的从查询列表中获取,使用extract关键字得到创建接口成功后的广告id。
执行测试
根据需要测试的接口用例完成接口用例的编写设计,尝试执行一下接口测试用例脚本。
执行命令如下:
hrp run testcases/mall_ad_testcase.yml l --gen-html-report
在执行过程中,会打印请求参数、响应参数,便于调试用例。
执行成功后,会在reports目录下生成报告,是html格式使用浏览器打开即可。
Summary部分执行情况等信息、执行时间、执行平台等参数。
Details部分是按照用例执行顺序展示,点击log日志,可以看到Request和Response两部分详细信息。
结语
本文介绍了,HttpRunner4.0安装到使用上的一些实战效果,可以证明的是HttpRunner4.0可以满足绝大工作场景并且在使用过程中也没什么bug,希望大家能上手使用。
github地址: https://github.com/httprunner/httprunner