一 环境部署

在 Ubuntu 5.4.0 环境下部署 httprunner 接口测试环境。

1. 安装 python3.x

官方文档中强烈建议使用 python3.4 及以上版本。
安装 python3.x 后进行环境配置,使得 pip 工具可用。

2. 安装 httprunner 工具

安装方式
#pip install httprunner
版本升级
#pip install -U HttpRunner
验证是否安装或升级成功
#hrun -V
2.2.5
执行 hrun -V 后正确显示版本号(升级需注意版本号是否更新),说明安装或升级成功

二 创建项目

1. 进入要创建项目的目录下

#cd /work

2. 使用脚手架工具初步创建项目的目录结构

#hrun --startproject [test] # test 为项目名称

3. 手动创建 data、module 文件夹,以及在 testsuits 目录下创建相关文件

#cd /work/test
#mkdir data module
#cd testsuits
#touch core_cases.yml # 核心用例集
#touch all_cases.yml # 完整用例集

4. 项目的目录结构

图片2.png
说明:
(1).env 文件:项目环境变量,通常用于存储项目敏感信息
(1)api 文件夹:接口定义描述
(2)data 文件夹:测试数据
(3)modules 文件夹:复用的最简洁版测试用例
(4)testcases 文件夹:测试用例
(5)testsuites 文件夹:测试用例集
(4)reports 文件夹:HTML 测试报告
(6)debugtalk.py 文件:项目中逻辑运算辅助函数
        ① 文件存在时,其所在目录被视为项目工程根目录,
        ② 该文件不存在时,运行测试的所在路径被视为项目工程根目录。

三 设置环境变量(.env)

1. 作用

在自动化测试中,有时需要借助环境变量实现某些特定的目的,常见的场景包括:
(1)切换测试环境
(2)切换测试配置
(3)存储敏感数据(从信息安全的角度出发)
常见的设置比如 base_url、username 和 password、签名字符串等信息。

注意:env 文件不应该添加到代码仓库中,一般将.env 加入到.gitignore 中

2. 使用方式

使用方式分为 3 个步骤,分别为编写环境变量信息、在脚本中直接引用、在脚本中间接引用。

(1)编写环境变量信息

编写格式:key=value
图片3.png
说明:
① 不要留有空行、注释行
② 字符串类型的 value 不需要用双引号,否则成为 value 的一部分

(2)在脚本中直接引用

在 YAML/JSON 脚本中,直接使用内置函数 ENV 引用,即 ${ENV(key)}。
图片4.png

(3)在脚本中间接引用

若需要对读取的环境变量进一步处理,可在 debugtalk.py 中通过 os.environ 引用变量后,创建对应的函数做逻辑处理,最后在 YAML/JSON 脚本中,引用该函数即可。
图片5.png

3. 执行方式:

(1)执行时若不指定.env 路径,默认加载位于根目录的.env 文件,
(2)执行时若指定,可指定不位于根目录的.env 或者其他名称的.env 文件(如 test.env)。

#hrun /path/to/testcase.yml --dot-env-path /path/to/.env

四 热加载机制(debugtalk.py)

1. 作用

(1)编写常见功能和业务相关的函数,使得测试用例中可以引用函数,实现一些动态的计算逻辑,如获取时间戳、生成随机数、处理签名等,
(2)编写 hook 函数,使得测试用例执行前后可以调用钩子函数,实现测试的准备和清理工作,如初始化某个请求参数、修改响应结果的某个值等。

2. 使用方式

(1)py 文件中设置编码、import 相关模块、编写函数模块
图片6.png

(2)在 YAML/JSON 脚本文件中引用函数即可
引用格式:${func()}
图片7.png
说明:
① setup_hooks 中引用的函数,在用例执行前运行
② teardown_hooks 中引用的函数,在用例执行后运行
③ api、modules、testcases 和 testsuits 等脚本文件都可引用函数

五 编写测试用例(api、modules、testcases、testsuits、data)

编写测试用例主要分为 4 部分,分别为编写接口描述、编写测试用例、编写测试用例集、实现参数化数据驱动,脚本文件有 YAML 和 JSON 格式,以下皆以 YAML 格式举例。

1. 编写接口描述(api)

Httprunner 推荐用独立的文件存储接口描述,即每个文件对应一个接口描述,方便管理。

(1)编写模板

参照下方截图,也可通过脚手架创建项目,自带一份 demo_api.yml 文件可供参考。
图片8.png
说明:
① Name: 接口名称,随意,对后续没有作用
② Base_url:访问地址
③ Variables: 变量信息,格式为 key: value
④ Request: 请求信息
      url 为访问路径
      method 为请求方式
      header 为请求头
      json 为请求内容,字段值一般引用变量或函数,格式为 ${var}、${func()}
⑤ Validate: 结果校验

(2)接口描述说明

① api 文件的作用是存储接口描述信息,并供后续测试用例引用。要满足这个功能,只需且必须填写 name 和 request,若是要运行单个接口文件,则可以添加 base_url、variables 和 validate 信息。
② 关于 validate,官方文档推荐,在 API 定义中的 validate 只描述最基本的校验项,例如 status_code,对于与业务逻辑相关的更多校验项,在测试步骤的 validate 中进行描述。

2. 编写测试用例(modules、testcases)

定义接口描述后,我们可以引用接口定义开始编写测试用例。
测试用例,我这边分为 modules 和 testcases 两个模块(个人习惯),因为 testcases 中编写的测试用例可能包含多个测试步骤,若一个测试用例要引用另一个测试用例,我希望是最简洁版本,所以我另外创建 modules 文件夹,专门存放可供复用的测试用例最简洁版本,因此本质上这两个模块的内容是同一个东西。

(1)编写模板

参照下方截图,也可通过脚手架创建项目,自带一份 demo_testcase.yml 文件可供参考
图片9.png
说明:
① Config:整个测试用例的全局配置项
      Name:测试用例名称,测试报告有展示
      Variables:全局变量
      Base_url:访问地址
      Setup_hooks:用例执行前触发 hook 函数,用于准备工作
      Teardown_hooks:用例执行后触发 hook 函数,用于清理工作
② Teststeps:测试步骤,包含 1 个或多个
      Name:测试步骤名称,测试报告有展示
      Base_url:访问地址,优先于全局 base_url
      Api:引用接口描述文件,相对路径从根目录开始
      Variables:局部变量,优先于全局 variables
      Extract:从响应结果中提取参数,并保持到变量中
      Validate:结果校验,格式为 “校验器: [实际返回参数, 预期结果]”
      Setup_hooks:用例执行前触发 hook 函数,用于准备工作
      Teardown_hooks:用例执行后触发 hook 函数,用于清理工作

(2)测试用例说明

① 每个测试用例都是一个独立用例,原则上不依赖其他测试用例,不需要考虑执行顺序。
② extrac 响应结果的字段有: status_code,cookies,elapsed,headers,content,text,json,reason,encoding,ok,url。
若响应结果为 json 格式,可通过 content.xxx.0.id 获取 id(content 为响应内容,xxx 和 id 为字典的 key,0 为数组第 1 位);
若响应结果为 xml/html,可通过正则获取结果参数。
③ 检验器有 eq(=)、lt(<)、le(<=)、gt(>)、ge(>=)、ne(!=)、str_eq、len_eq、len_gt、len_ge、len_lt、len_le、contains、contained_by、type_match、regex_match、startswith、endswith。

3. 编写测试用例集(testsuits)

编写完测试用例后,我们可以编写测试用例集,为后续的执行和测试报告输出做准备。

(1)编写模板

格式参照下方截图,也可通过脚手架创建项目,自带一份 demo_testsuits.yml 文件可供参考。
图片10.png
说明:
① Config:全局配置项
      Name:测试用例集的名称
② Testcases:测试用例的集合
      Name:测试用例命名
      Testcases:引用测试用例文件,相对路径从根目录开始

(2)测试用例集说明

① 测试用例集的 testcases 是 1 个数组,数组的每个值为 1 个测试用例,一般有 name 和 testcase 两个参数,除此之外还可以进行参数化数据驱动,下方说明。

4. 参数化数据驱动(data)

参数化的功能需要在 testsuits 中实现,测试数据放在 data 下。

(1)参数化格式

图片16.png
说明:
① Parameters:对请求参数进行数据驱动

(2)参数化数据驱动说明

① Httprunner 中数据源指定支持三种方式:
      在 YAML/JSON 中直接指定参数列表,如 ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
      通过内置的 P 函数引用 CSV 文件,需准备 CSV 数据文件
      调用 debugtalk.py 中自定义的函数生成参数列表
② 参数化的情况分 2 种:
      独立参数
      具有关联性的多个参数

(3)举例说明

例子以 “通过引用 CSV 文件并对独立参数进行数据驱动” 来进行说明:
① data 文件夹下,创建 3 个参数的 CSV 文件:
图片12.png

② 3 个 CSV 文件内容如下:
图片13.png
图片14.png
图片15.png

③ Testsuits 中调用如下:
图片16.png

六 执行并输出测试报告

编写完测试用例/用例集后,可执行测试用例/用例集,获取测试结果。

1. 运行命令

一般执行只需指定测试用例路径,命令如下:

#hrun testsuites/query.yml

若是要指定.env 文件、设置失败后不往下运行用例、修改日志等级,命令如下:

#hrun testsuites/query.yml --dot-env-path path/to/.env --failfast --log-level debug

2. 报告存放位置

执行完成后生成测试报告,放在 report 文件夹中。
图片17.png

七 查看测试报告

1. 测试报告内容

打开 html 测试报告,主页包括测试结果概况和具体测试用例执行结果,如下:
图片18.png
图片19.png
说明:
(1)Summary:整个测试结果的总结
(2)Details:具体测试用例的测试步骤的结果
(3)Log:记录了测试用例具体的请求响应结果
(4)Traceback:测试用例执行失败的相关日志

2. Log 记录

Log 记录了测试步骤的请求和响应结果完整信息,如下:
图片22.png

3. Traceback 记录

Traceback 记录了测试用例执行失败的相关日志,如下:
图片21.png

最后说明:
原创文章,其中部分图片和文字引用 httprunner 官方中文教程,具体参考网址如下:
https://github.com/HttpRunner/HttpRunner
https://cn.httprunner.org/
https://debugtalk.com/post/HttpRunner-testcase-layer/


↙↙↙阅读原文可查看相关链接,并与作者交流