httpruuner官方文档:https://httprunner.com/docs/introduction/overview/
案例1:使用电商开源项目演示:
项目地址:https://github.com/macrozheng/mall
案例2:使用erp2项目演示:
开源项目:http://erp2.hzb-it.com/
1.Httprunner环境搭建
HttpRunner v4.0 同时采用了 Golang/Python 两种编程语言,底层会有两套相对独立的执行引擎,兼具 Golang 的高性能和 pytest 的丰富生态。
方式一:直接部署(以Windows系统为例)
你可以在 GitHub Releases 页面中,自行选择版本进行下载,下载地址:https://github.com/httprunner/httprunner/releases,下载完成后,解压到自己电脑任意目录, 如下:D:\soft\httpruner_exe
:
将解压的目录,添加到系统环境变量:在「我的电脑=>属性=>高级系统设置=>环境变量」配置中,在 PATH 下新增系统变量,将 解压目录写入 PATH。配置成功后cmd输入hrp,结果如下:
安装配置完成后能使用hrp命令
方式二:安装依赖包(开发者模式)
HttpRunner
除了可以作为命令行工具提供给用户进行使用,还可以作为库函数,供开发者调用进行二次开发。
安装httprunner库:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple httprunner #安装httprunner,安装后,就可以使用hrun命令 pip install har2case#用于将har文件转化成yaml/json/pytest测试用例
安装完成后,使用以下命令检验
C:\Users>har2case -V 0.3.1 C:\Users>httprunner -V v4.3.5
安装Allure命令行:下载Allure命令行,下载地址:https://github.com/allure-framework/allure2/releases/,将下载到本地的allure压缩包解压到指定目录,并添加相应的环境变量Path=D:\Program Files\Allure\allure-2.16.0\bin,在命令行中输入allure,不出现报错即可
安装allure-pytest插件
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple allure-pytest#安装python的allure插件,可生成漂亮的测试报告
>>>待续
2. Httprunner快速上手
2.1创建脚手架
使用命令:hrp startproject dmo
新建项目的层级目录如下:
2.2 录制脚本,导出.har文件
使用fiddler用录制 Gitee上的开源项目:http://erp2.hzb-it.com/为例:
step1:打开fidddler设置过滤域名(erp2.hzb-it.com)、过滤js、css静态文件等[ 使用正则表达式:REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav|js|jpeg)(\?.*)?$ ],设置如下图:
设置后,点击Actions->Run Fliterset now,设置的过滤器正式生效
Step2:抓取一条业务用例: 登录—>组织和人员—>职位管理—>新增职位为:测试工程师
Step3:点击File ->Exprot Sessions ->HTTPArchive v1.2 ->将导出的.var文件放到项目的har目录
2.3 har文件转成测试用例
方式一:使用hrp命令转换
(1)使用命令,将目标目录har下的.har文件转成 yaml文件
hrp convert --from-har E:\work5-2\HttpRunner_demo\har\test_login.har --to-yaml --output-dir E:\work5-2\HttpRunner_demo\testcases
注意:如果不标注--from-har会失败
(2)使用命令,将目标目录testcase下的.yaml文件转成 json文件
hrp convert --from-yaml E:\work5-2\HttpRunner_demo\testcases\test_login_test.yaml --to-json --output-dir E:\work5-2\HttpRunner_demo\testcases
(3)使用命令,将目标目录testcase下的.json文件转成 pytest文件
hrp convert --from-har E:\work5-2\HttpRunner_demo\har\test_login.har --to-pytest --output-dir E:\work5-2\HttpRunner_demo\testcases
方式二:使用har2case转换
使用har2case可以直接将har文件转换为yaml/json格式的测试用例
har2case -h usage: har2case [-h] [-V] [--log-level LOG_LEVEL] [-2y] [-fmt FMT_VERSION] [--filter FILTER] [--exclude EXCLUDE] [har_source_file] Convert HAR(HTTP Archive) to YAML/JSON testcases for HttpRunner. positional arguments: har_source_file Specify HAR source file options: -h, --help show this help message and exit -V, --version show version --log-level LOG_LEVEL Specify logging level, default is INFO. -2y, --to-yml, --to-yaml Convert to YAML format, if not specified, convert to JSON format by default. -fmt FMT_VERSION, --format FMT_VERSION Specify YAML/JSON testcase format version, v2 corresponds to HttpRunner 2.2.0+. --filter FILTER Specify filter keyword, only url include filter string will be converted. --exclude EXCLUDE Specify exclude keyword, url that includes exclude string will be ignored, multiple keywords can be joined with '|'
方式三:使用httprunner 的make命令转换
如果直接使用hrp命令转换yaml/json为pytest格式失败,可以使用httprunner make命令转换为pytest测试用例
httprunner make E:\work5-2\HttpRunner_demo\testcases\test_login_test.yaml
2.4 使用pytest 运行测试用例
import pytest import os if __name__=="__main__": pytest.main(['-s', '-v','./testcases/test_login_test_test.py','--alluredir', './report/tmp', "--clean-alluredir"]) os.system(r"allure generate ./report/tmp -o ./report/html --clean")
2.5 v4 版本的 Go & Python 功能对比
3. httprunner详解
3.1 测试用例
一条测试用例(testcase)应该是为了测试某个特定的功能逻辑而精心设计的,并且至少包含如下几点:
- 明确的测试目的(achieve a particular software testing objective)
- 明确的输入数据(inputs)
- 明确的运行环境(execution conditions)
- 明确的测试步骤描述(testing procedure)
- 明确的预期结果(expected results)
按照上述的测试用例定义,HttpRunner 的测试用例应该保证是完整并且可以独立运行的。
从测试用例的组成结构来看,一个测试用例可以分为「测试脚本」和「测试数据」两部分:
- 测试脚本:重点是描述测试的业务功能逻辑,包括预置条件、测试步骤、预期结果等,并且可以结合辅助函数(debugtalk.go/debugtalk.py)实现复杂的运算逻辑
- 测试数据:重点是对应测试的业务数据逻辑,例如数据驱动文件中的定义的 UUID、用户名等等,以及环境配置文件中定义的 base_url 环境变量等等
3.2 httprunner的YAML/JSON格式测试用例手工编写
httprunner 4.x 版本,YAML/JSON 格式用例(testcase)结构延续了之前的config 和 teststeps 两个部分
3.1.2 config配置部分
config的modle定义如下:
class TConfig(BaseModel):
name: Name
verify: Verify = False
base_url: BaseUrl = ""
# Text: prepare variables in debugtalk.py, ${gen_variables()}
variables: Union[VariablesMapping, Text] = {}
parameters: Union[VariablesMapping, Text] = {}
# setup_hooks: Hooks = []
# teardown_hooks: Hooks = []
export: Export = []
path: Text = None
# configs for other protocols
thrift: TConfigThrift = None
db: TConfigDB = TConfigDB()
Tconfig
每个测试用例都应该有一个config部分,您可以在其中配置测试用例级别的设置,有以下属性
属性名称 是否必填 作用 name 必填 指定测试用例名称。这将显示在执行日志和测试报告中。 base_url 可选 如果base_url指定,则 teststep 中的 url 可以设置相对路径部分 verify 可选 https请求时,是否校验证书,默认True,忽略证书校验可以设置为False headers 可选 公共请求头部 variables 可选 指定测试用例的公共变量。每个测试步骤都可以引用未在步骤变量中设置的配置变量。换句话说,步骤变量比配置变量具有更高的优先级。 export 可选 (早期版本用的output)指定导出的测试用例会话变量,把变量暴露出来,设置为全局变量 parameters 可选 参数化设置,对整个文件生效 #除了上面的一些自动化会用到的参数,4.x 版本新增了一些关键字 属性名称 是否必填 作用 parameters_setting 可选 配置参数驱动的具体策略 think_time 可选 设置思考时间,性能测试用到 websocket 可选 设置 WebSocket 断开重连的最大次数和间隔等(todo) weight 可选 性能测试用到,分配给当前测试用例的虚拟用户权重 environs 可选 配置环境变量(如果未指定则会从 .env 文件导入) path 可选 当前测试用例所在路径(通常不需要手工填写)
config部分示例 config_demo.yaml
config:
name: "request methods testcase with functions"
variables:
foo1: config_bar1
foo2: config_bar2
expect_foo1: config_bar1
expect_foo2: config_bar2
headers:
User-Agent: ${get_user_agent()}
verify: False
export: ["foo3"]
3.1.2 teststeps测试步骤部分
每个用例可以有多个测试步骤,每个步骤可以看成是一个接口的请求,发送 http 协议接口,可以用到request 关键字,相关参数和requests 库的参数完全一致。
teststep定义模型如下:
class TStep(BaseModel):
name: Name
request: Union[TRequest, None] = None
testcase: Union[Text, Callable, None] = None
variables: VariablesMapping = {}
setup_hooks: Hooks = []
teardown_hooks: Hooks = []
# used to extract request's response field
extract: VariablesMapping = {}
# used to export session variables from referenced testcase
export: Export = []
validators: Validators = Field([], alias="validate")
validate_script: List[Text] = []
retry_times: int