软件测试--如何使用har2case和HttpRunner + Allure生成测试报告
什么是har2case
har2case
是一个开源工具,用于将 HTTP Archive(HAR)文件转换为 YAML 或 JSON 格式的测试用例文件。它主要用于自动化测试领域,特别是与 HTTPRunner 测试框架结合使用时,可以快速生成高质量的测试用例,提高 API 测试的效率和准确性。该工具基于 Python 开发,支持多种参数配置,如文件路径、日志级别和输出格式,适用于 API 自动化测试、性能测试、回归测试和跨平台测试等多种场景。
Har2Case安装教程
首先要先安装python,配置好环境变量
用以下指令查看python版本
1
python --version
使用以下指令安装har2case
1
pip install har2case
安装完成后使用以下指令确认安装是否成功
1
har2case -V
执行上述指令后,若碰到以下错误,则需要根据python版本安装对应模块。
1
2
3
4
5
6
7Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "E:\Python\Scripts\har2case.exe\__main__.py", line 4, in <module>
File "E:\Python\Lib\site-packages\har2case\cli.py", line 14, in <module>
from distutils.version import StrictVersion
ModuleNotFoundError: No module named 'distutils'python版本若在3.9或更早,执行以下指令安装 distutils 模块
1
2python -m ensurepip
python -m pip install --upgrade pip setuptools wheelpython版本在3.10之后,distutils 模块被移除,建议安装 建议安装
setuptools
和wheel
1
python -m pip install --upgrade setuptools wheel
重新安装har2case
1
2pip uninstall har2case
pip install har2case验证安装,返回版本号
1
har2case -V
什么是httprunner
HttpRunner 是一个基于 Python 的开源通用测试框架,支持 HTTP/HTTPS 协议接口的自动化测试。其核心特点包括:
1. **使用 YAML 或 JSON 脚本描述测试场景**:测试人员可以通过编写简单的脚本定义接口类型、参数和返回值等信息,从而提高测试用例的可维护性。
2. **支持多种测试类型**:包括接口测试、性能测试、线上监控和持续集成等。
3. **丰富的校验机制**:支持多种校验方式,如断言、动态计算逻辑等。
4. **与主流工具集成**:支持与 Locust、Jenkins 等工具结合使用,方便持续集成和性能测试。
安装httprunner
- 它是一个生成HTML测试报告的工具包,功能强大 , 可以生成美观、直观的测试报告。
Allure使用的前置条件
需要安装以下软件,配置好相关的环境变量:
|软件|描述|
|——|——|
|java| allure使用java开发,所以必须要有运行环境|
|python |编写自动化所需语言 |
|pycharm |开发工具 |
|pytest |python第三方包,使用它来搜集测试用例(安装指令pip install pytest)|
安装Allure
直接下载zip包,解压即可
配置Allure环境变量
验证安装是否成功
如何使用har2case和HttpRunner + Allure生成测试报告
- 使用浏览器(如 Chrome)或其他抓包工具(如 Fiddler 或 Charles)捕获网络请求并生成 HAR 文件。在 Chrome 中,可以通过按 F12 打开开发者工具,切换到 Network 标签页,选择需要的请求后右键点击并选择“Save as HAR with content”来保存
此处以这个login接口为例,保存这个接口的har文件,命名为login.har。
- 转换HAR文件
将 HAR 文件转换为测试用例文件:
- 转换为 YAML 格式:
1 | har2case -2y login.har |
- 转换为 JSON 格式:
1 | har2case -2j login.har |
生成后的yml文件如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59config:
name: login test
variables: {}
teststeps:
- name: /user/login
request:
headers:
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
json:
password: '123'
username: zmx
method: POST
url: http://192.168.179.1:9999/user/login
validate:
- eq:
- status_code
- 500
- eq:
- headers.Content-Type
- application/json
- name: /user/login
request:
headers:
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
json:
password: '123'
username: zmx
method: POST
url: http://192.168.179.1:9999/user/login
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json
- name: /user/login
request:
headers:
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
json:
password: '123'
username: zmx
method: POST
url: http://192.168.179.1:9999/user/login
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json修改yml文件,设置想要的用例参数,如下:
- 用例一:username:zmx,password:123,返回体的status值:200
- 用例一:username:zmx,password:1234,返回体的status值:400
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37config:
name: login test
variables:
username: ""
password: ""
code: ""
parameters:
username-password-code:
- [ "zmx", "123", 200 ]
- [ "zmx", "1234", 400 ]
teststeps:
- name: /user/login
request:
headers:
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
json:
password: "$password"
username: "$username"
method: POST
url: http://192.168.179.1:9999/user/login
log: # 打印变量值
- "username: $username"
- "password: $password"
- "code: $code"
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json
- eq:
- body.status
- "$code"
- 用httprunner执行这个yml文件,会看到测试用例结果,并生成对应测试用例的py文件。
1
hrun login.yml
在目录下生成的py文件代码内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43# NOTE: Generated By HttpRunner v4.3.5
# FROM: login.yml
import pytest
from httprunner import HttpRunner, Config, Step, RunRequest
from httprunner import Parameters
class TestCaseLogin(HttpRunner):
),
)
def test_start(self, param):
super().test_start(param)
config = Config("login test").variables(
**{"username": "", "password": "", "code": ""}
)
teststeps = [
Step(
RunRequest("/user/login")
.post("http://192.168.179.1:9999/user/login")
.with_headers(
**{
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
}
)
.with_json({"password": "$password", "username": "$username"})
.validate()
.assert_equal("status_code", 200)
.assert_equal('headers."Content-Type"', "application/json")
.assert_equal("body.status", "$code")
),
]
if __name__ == "__main__":
TestCaseLogin().test_start()运行这个py文件,也可以看到测试结果,这样就利用httpRunner完成了简单的自动化测试。
通过Allure查看Httprunner测试结果报告
执行以下指令,生成 Allure 报告
1
hrun login.yml --alluredir allure-results
可以看到生成了目录
执行以下指令,运行后,会自动打开浏览器并显示 Allure 报告。
1
allure serve allure-results