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

对于 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 插件远远无法达到的。

 

 

 
posted @ 2022-07-23 19:07  xiaoyanhahaha  阅读(727)  评论(0编辑  收藏  举报