接口测试 HttpRunner 工具使用说明书

蔡瑞淳 for 君海游戏QA · November 15, 2019 · 945 hits

一 环境部署

在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/

No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up