接口测试 基于 HttpRunner4.0 的接口自动化测试实践

xinxi · 2022年05月15日 · 最后由 yuyin 回复于 2024年10月10日 · 11060 次阅读

前言

前几天逛测试论坛,发现 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 中,可以引用变量和调用函数

  • 变量引用: 约定通过 ${} 或 $ 的形式来引用变量,例如 $foo1 或 ${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 测试的整个过程。

项目部署

后台管理系统,如下图:

下载代码

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

共收到 6 条回复 时间 点赞

谢谢分享!我认为很不错,收藏啦

nohup java -jar mall-admin-1.0-SNAPSHOT.jar & windows 环境下要运行什么语句

4.0 版本中是否还继续支持 ${ENV()}


为啥我 loadcase 是 0,然后也没报错

我单独测试 mall_login_testcase.yml,即 hrp run testcases/mall_login_testcase.yml --gen-html-report 时发现请求失败了。检查好久才发现 hrp run 会在正常请求的 url 后面添加一个 “/”。
例如正常的 POST 请求是 “POST /admin/login HTTP/1.1”,
然而,运行上述命令后,打印的日志中看到请求行是 “POST /admin/login/ HTTP/1.1”,即 url 末尾添加一个 “/”,导致请求失败。。。😔

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册