10 - HttpRunner4的几个核心概念和常见问题(一)
测试用例(TestCase)
一条测试用例(testcase)应该是为了测试某个特定的功能逻辑而精心设计的,并且至少包含如下几点:
- 明确的测试目的(achieve a particular software testing objective)
- 明确的输入(inputs)
- 明确的运行环境(execution conditions)
- 明确的测试步骤描述(testing procedure)
- 明确的预期结果(expected results)
对应地,HttpRunner 的测试用例描述方式进行如下设计:
- 测试用例应该是完整且独立的,每条测试用例应该是都可以独立运行的
- 在 HttpRunner 中,每个
YAML/JSON/pytest/go test
文件对应一条测试用例 - HttpRunner 以
TestCase
为核心,将任意测试场景抽象为有序
步骤的集合
插件化机制(plugin)
HttpRunner 用例的核心为 JSON 结构体,但很多测试场景中需要动态运算逻辑,例如计算签名 MD5、生成随机数据等。
为了解决该问题,HttpRunner 引入了动态函数运算的能力,即在执行测试用例的过程中,会从文本中解析出变量和函数,调用执行后再将结果拼接回文本字符串。
这里的动态函数运算就是通过插件化机制(plugin)来实现的。
在 v4 版本中,HttpRunner 的 golang 执行引擎支持如下 4 种插件方案:
- Golang plugin over gRPC:Go 代码编写,要求编译为
debugtalk.bin
文件 - Golang plugin over net/rpc:同上
- Python plugin over gRPC:Python 代码编写,无需编译,要求命名为
debugtalk.py
文件 - Golang official plugin:Go 代码编写,要求编译为
debugtalk.so
文件
这部分能力已经单独抽离出了一个基础组件,详见 httprunner/funplugin。
针对 v4 版本的 pytest 执行引擎,以及 v4 之前的 Python 版本,支持解析调用 Python 函数的形式:
- Python 代码编写,无需编译,要求命名为
debugtalk.py
文件
需要特别强调的是,上述插件文件 debugtalk.xx
要求必须放在项目根目录中。
测试工程目录结构
项目根目录
在 HttpRunner 的测试用例中,有时候需要引用其它测试用例或者数据文件(csv)。考虑到脚本的简洁些和可移植性,引用路径需要使用相对路径。
基于约定大于配置的思路,HttpRunner 通过定位插件文件的位置来确定项目的根目录,以此作为相对路径的基准。
同时,定位插件文件存在优先级,如下文件的优先级从上到下依次降低。
- debugtalk.bin
- debugtalk.py
- debugtalk.so
变量(variables)
在测试用例中,很多时候我们需要对参数进行声明和引用,这就需要用到变量(variables)机制。
函数(functions)
在 HttpRunner 的测试用例中,约定通过 ${}
的形式来调用插件函数。
"${func{$a, $b}}"
HttpRunner 名字的由来?
项目命名为 HttpRunner 主要有以下几点缘由:
- 项目最初的目标是针对 HTTP 协议实现一套接口和性能测试工具
- Runner 借鉴了 LoadRunner,这个词用在自动化测试和性能测试上都比较自然
- HttpRunner 这个组合词还未有人使用,GitHub/PyPI/域名/微信公众号 都是可用状态
这里也着重说明两点:
- 虽然 HTTP 的正确写法是全大写,但
HttpRunner
是一个组合后的新专有名词,可以不受此限制;HTTPRunner
的写法是错误的 - HttpRunner 已不再局限于 HTTP 协议,当前已成长为一个支持
多协议可扩展
的测试工具;HTTP 作为最广泛使用的网络协议,可以作为协议的代表,就像 Postman 中的 POST 那样
HttpRunner 支持的语言有哪些?
HttpRunner 的测试用例脚本支持:
- 文本形态:JSON、YAML
- 代码形态:pytest 和 go test
针对动态运算逻辑(plugin)部分,HttpRunner 支持 gRPC 的方案,因此理论上,gRPC 支持的语言 HttpRunner 都可以支持。
当前已支持的插件语言:
- Go
- Python
- Java(计划中)
这部分能力已经单独抽离出了一个基础组件,详见 httprunner/funplugin。
HttpRunner logo 的含义
HttpRunner 的 Logo 如下所示:
![HttpRunner Logo](https://httprunner.com/image/logo.png)
对于 logo 设计的解释,主要有如下两点:
- 中间是个拼图(puzzle pieces),形似 H 字母,恰好是 HttpRunner 的首字母
- 拼图的寓意,对应了 HttpRunner 的设计理念:HttpRunner 本身作为一个基础框架,可以组装形成各种类型的测试工具和平台;而在 HttpRunner 内部,也是充分解耦的各个模块组装在一起形成的
HttpRunner 的开源协议?
HttpRunner 采用了非常宽松的开源协议 Apache-2.0,商业友好,可以永久免费使用无任何限制。
使用 HttpRunner v4.0 必须要学习 Go 语言么?
先说结论,HttpRunner v4.0 不需要用户具有 Golang 基础。
1. HttpRunner v4.0 支持 JSON/YAML 格式的测试用例,动态运算逻辑(plugin)支持多种编程语言(包括 Python),因此使用的方式和体验可以做到基本和 v2.x 一致。
2. 同时,HttpRunner v4.0 具有双引擎,完整支持 pytest 格式的脚本,因此在使用体验上也可以做到和 v3.x 基本一致。
3. 但如果你是期望使用 HttpRunner v4.0 做专业的性能测试,那么最好还是选择使用 golang 编写插件,单机发压性能(QPS)可以达到 2w 以上,这是 Python 插件远远无法达到的。