竞价在什么网站上做如何优化企业网站
1. HttpRunner 介绍
-
是什么:基于 Python 的开源接口自动化测试框架,支持 HTTP(S)/WebSocket/RPC 等协议,集成了接口测试、性能测试、持续集成等功能。
-
核心特性:
-
用例格式:支持 YAML/JSON/Python 编写测试用例。
-
链式调用:支持接口间的参数关联(提取响应数据供后续接口使用)。
-
数据驱动:支持 CSV、Excel、数据库等多种数据源。
-
多协议支持:HTTP/WebSocket/私有协议扩展。
-
性能测试:集成 Locust 实现压测。
-
-
适用场景:接口自动化测试、微服务测试、持续集成(CI/CD)。
2. 环境搭建
安装 HttpRunner
bash
复制
pip install httprunner
验证安装
bash
复制
hrun -V # 输出版本号(如 4.0+)
3. 项目结构
通过脚手架快速生成项目:
bash
复制
hrun --startproject demo_project # 生成标准项目结构
生成的目录结构:
复制
demo_project/├── testcases/ # 存放测试用例(YAML/JSON/Python)├── reports/ # 测试报告├── env/ # 环境变量配置├── data/ # 测试数据(CSV/Excel)└── debugtalk.py # 自定义函数和全局变量
4. 用例编写规则
4.1 YAML/JSON 用例格式
-
核心字段:
yaml
复制
config:name: "用例名称"variables: {} # 全局变量base_url: "http://api.example.com"verify: false # 关闭SSL验证teststeps:- name: "步骤1_登录"request:method: POSTurl: /loginjson:username: testpassword: "123456"extract: # 提取响应数据token: content.tokenvalidate: # 断言- eq: [status_code, 200]- eq: [content.code, 0]- name: "步骤2_查询用户信息"request:method: GETurl: /userinfoheaders:Authorization: Bearer $token # 使用提取的token
4.2 Python 用例格式
支持用纯 Python 编写用例(类似 pytest):
python
复制
from httprunner import HttpRunner, Config, Step, RunRequestclass TestUser(HttpRunner):config = Config("用户管理").base_url("http://api.example.com")teststeps = [Step(RunRequest("登录").post("/login").with_json({"username": "test", "password": "123456"}).extract().with_jmespath("body.token", "token") # 提取token.validate().assert_equal("status_code", 200)),Step(RunRequest("获取用户信息").get("/userinfo").with_headers({"Authorization": "Bearer $token"}).validate().assert_equal("body.code", 0))]
5. 核心功能
5.1 参数关联
-
提取响应数据:使用
extract
字段提取数据供后续步骤使用。yaml
复制
extract:user_id: content.user.id # 从JSON响应中提取user_id
5.2 变量优先级
有几种不同类型的variables,优先顺序可能会造成混淆。避免混淆的最好方法是使用不同的变量名。但是,如果必须使用相同的变量名,则应该了解优先级策略。
变量优先级按以下顺序排列:
存在extract提取变量值的,优先取提取中参数
在无extract时,优先取config变量
在无config变量时,优先取用例中变量
以上均无时,取api变量
5.3 数据驱动
-
CSV 数据驱动:
yaml
复制
config:name: "数据驱动示例"parameters:username-password: ${P(data/user.csv)} # 从CSV读取数据 teststeps:- name: "登录"request:method: POSTurl: /loginjson:username: $usernamepassword: $password
5.4 断言(Validate)
支持多种断言方式:
yaml
复制
validate:- eq: [status_code, 200] # 状态码- eq: [headers.Content-Type, "application/json"] # 响应头- contains: [content.message, "success"] # 响应体包含文本- regex_match: [content.data, "\\d{6}"] # 正则匹配
5.5 Hooks(钩子函数)
-
setup_hooks:在请求前执行(如加密参数)。
-
teardown_hooks:在请求后执行(如清理数据)。
yaml
复制
request:method: POSTurl: /paymentjson:amount: 100setup_hooks:- ${encrypt_request($request)} # 调用自定义加密函数
httprunner 2.x,setup_hooks在variables下面需要缩进
6. 运行与报告
6.1 运行用例
bash
复制
hrun testcases/login.yml # 运行单个用例
hrun testcases/ --html report.html # 生成HTML报告
6.2 Allure 报告
-
安装依赖:
bash
复制
pip install allure-pytest
-
生成 Allure 报告:
bash
复制
hrun testcases/ --alluredir=./allure-results allure serve ./allure-results # 查看报告
7. 高级功能
7.1 性能测试(集成 Locust)
-
将接口用例转换为 Locust 压测脚本:
bash
复制
hrun testcases/demo.yml --locustfile locustfile.py
-
运行压测:
bash
复制
locust -f locustfile.py
7.2 自定义函数
在 debugtalk.py
中编写自定义函数:
python
复制
def encrypt_request(request):request["json"]["sign"] = generate_md5(request["json"])return request
在用例中调用:
yaml
复制
setup_hooks:- ${encrypt_request($request)}
7.3 环境变量管理
在 env/
目录下定义环境变量(如 env/dev.env
):
ini
复制
base_url=http://dev.api.com
username=test_dev
password=dev_123456
运行指定环境:
bash
复制
hrun testcases/ --env dev
8. 最佳实践
-
用例分层设计:
-
将公共配置(如
base_url
)放在config
中。 -
使用
variables
管理全局变量。
-
-
数据与逻辑分离:
-
测试数据存储在
data/
目录(CSV/Excel)。 -
业务逻辑在
testcases/
中维护。
-
-
复用性优化:
-
使用
引用外部用例
(通过testcase
字段)复用步骤。
-
-
CI/CD 集成:
yaml
复制
# GitHub Actions 示例 - name: Run Testsrun: hrun testcases/ --alluredir=./allure-results - name: Upload Reportuses: actions/upload-artifact@v2with:name: allure-reportpath: ./allure-results
9. 常见问题
9.1 动态参数处理
-
场景:接口需要动态生成的参数(如时间戳、随机手机号)。
-
解决:在
debugtalk.py
中定义函数生成参数:python
复制
import random def random_phone():return f"138{random.randint(10000000, 99999999)}"
用例中调用:
yaml
复制
json:phone: ${random_phone()}
9.2 依赖登录态
-
场景:多个用例依赖登录接口返回的 Token。
-
解决:将登录步骤封装为
setup_suite
或使用session
共享 Cookie。
10. 总结
-
核心优势:
-
易用性:YAML/JSON 格式降低用例编写门槛。
-
灵活性:支持参数关联、数据驱动、自定义函数。
-
扩展性:与 Locust、Allure、CI/CD 工具无缝集成。
-
-
适用项目:HTTP 接口为主的 Web 服务、微服务架构系统。