当前位置: 首页 > news >正文

HttpRunner 入门

面向零基础,基于 Ubuntu 虚拟机 + MobaXterm 实操,从安装、创建项目、编写用例、功能执行到性能压测,一步步手把手教学。

一、环境准备

1. 基础环境说明

  • 操作系统:Ubuntu(虚拟机)
  • 连接工具:MobaXterm(Windows 远程连接虚拟机)
  • 网络要求:虚拟机与主机网络互通(桥接模式,可互相 ping 通)

2. 前置检查

  1. 虚拟机已开启 SSH 服务,MobaXterm 可正常登录
  2. 终端默认路径:/home/你的用户名(用户主目录)

二、安装 HttpRunner(hrp)

官方在线安装脚本因阿里云 OSS 限制无法使用,采用离线二进制包安装,稳定无报错。

步骤 1:下载对应安装包

Ubuntu 主流架构为x86_64/amd64,执行以下命令下载:

# 下载官方编译包 wget https://github.com/httprunner/httprunner/releases/download/v4.3.6/hrp-v4.3.6-linux-amd64.tar.gz

步骤 2:解压并部署程序

# 解压文件 tar -zxvf hrp-v4.3.6-linux-amd64.tar.gz # 创建存放目录(统一管理工具) mkdir -p ~/.hrp/bin # 移动执行文件到目录 mv hrp ~/.hrp/bin/

步骤 3:配置环境变量(全局调用命令)

# 将路径写入环境变量配置文件 echo 'export PATH=$HOME/.hrp/bin:$PATH' >> ~/.bashrc # 生效配置 source ~/.bashrc

步骤 4:验证安装

hrp -v

输出版本号(如hrp version v4.3.6)即代表安装成功。

三、项目基础操作

1. 创建测试项目

任意目录下执行命令,生成标准化项目目录结构:

# 创建名为 demo 的测试项目 hrp startproject demo

2. 进入项目目录

cd demo

项目目录结构说明(核心文件):

plaintext

demo/ ├── testcases/ # 存放接口测试用例(YAML 文件) ├── reports/ # 存放测试报告 ├── debugtalk.py # 自定义函数文件(接口参数、数据处理) └── .env # 环境变量配置文件

3. 运行官方示例用例(功能测试)

项目自带示例用例,直接执行验证流程:

# 运行所有用例,并生成 HTML 可视化报告 hrp run testcases/ --gen-html-report
  • 执行成功:终端打印所有断言result=true
  • 报告位置:demo/results/时间戳/report.html,可通过 MobaXterm 下载到 Windows 打开查看

四、核心语法精讲(小白必懂)

HttpRunner 使用YAML 格式编写用例,语法简洁,重点掌握 5 个核心关键字。

1. config 全局配置

作用:整个测试用例的公共设置,所有步骤共享。

config: name: "测试用例名称" # 用例备注名 variables: # 全局变量,全用例可用 foo1: "测试值" base_url: "https://xxx.com" # 接口基础域名(简化地址写法) verify: False # 忽略 HTTPS 证书校验(避免报错) export: ["变量名"] # 导出变量,跨步骤使用

2. teststeps 测试步骤

作用:一个步骤对应一个接口请求,多个步骤按顺序执行。 基础模板:

teststeps: - name: "步骤名称" # 步骤备注 variables: # 局部变量,仅当前步骤生效(会覆盖全局同名变量) foo2: "局部值" request: # 接口请求核心配置 method: GET # 请求方式:GET/POST url: /get # 接口路径(拼接 base_url) headers: # 请求头 Content-Type: "application/x-www-form-urlencoded" params: # GET 请求参数 key: $foo1 body: "key1=$foo1&key2=$foo2" # POST 表单/文本参数

3. extract 变量提取(高频用法)

含义:从接口返回结果中,提取指定字段值,保存为变量,给后续接口使用(接口传参核心功能)。

extract: foo3: "body.args.foo2" # 提取返回体中 args 下的 foo2 值,存入变量 foo3

4. validate 断言(判断接口是否正常)

含义:校验接口返回结果是否符合预期,断言全部通过 = 用例执行成功。

validate: - eq: ["status_code", 200] # 断言1:响应状态码必须等于 200 - eq: ["body.form.foo1", "预期值"] # 断言2:返回表单数据匹配预期
  • eq:等于,最常用断言规则

5. testcase 引用其他用例

含义:复用已写好的测试用例(用例套娃),实现流程化测试(例:登录 → 查询数据)。

testcase: testcases/requests.yml # 调用指定路径的其他用例 export: ["foo3"] # 把被调用用例的变量导出,继续使用

五、性能压测(hrp boom)

使用hrp boom实现并发压测,模拟多用户同时请求接口,测试接口承压能力。

1. 压测命令语法

hrp boom 用例文件路径 --spawn-count 并发数 --spawn-rate 爬坡速率

参数白话解释:

  1. --spawn-count总并发用户数,模拟多少人同时请求接口
  2. --spawn-rate爬坡速率(压斜率),每秒新增多少个并发用户

2. 实操示例

以项目内置用例为例,100 并发、每秒新增 10 个用户:

# 进入项目目录后执行 hrp boom testcases/requests.yml --spawn-count 100 --spawn-rate 10
  • 逻辑:10 个用户 / 秒递增,10 秒后达到 100 并发,持续压测

3. 压测报告指标解读

压测结束后终端会输出统计数据,核心指标一看就懂:

指标含义参考标准
Passed / Failed成功请求数 / 失败请求数失败数越低越好,生产环境建议失败率 = 0
Total Fail Ratio整体失败率一般要求 ≤1%
Total RPS每秒处理请求数(吞吐量)数值越大,接口性能越强
Average Response Time平均响应时间数值越小,接口响应越快(常规要求 <500ms)
MAX Response Time最大响应时间排查慢请求、超时问题

4. 压测注意事项

  1. 禁止压测线上生产接口,仅测试测试环境接口;
  2. 先保证功能用例执行正常,再做压测;
  3. 并发数循序渐进,不要一次性设置超大并发,避免服务器崩溃。

六、常见报错 & 解决方案

报错 1:no such file or directory(文件不存在)

  • 原因:命令中写的用例文件名 / 路径错误
  • 解决:执行ls testcases/查看真实文件名,修正路径

报错 2:接口请求超时 / 连接失败

  • 原因 1:虚拟机网络不通、防火墙拦截 解决:检查虚拟机桥接模式,临时关闭主机 / 虚拟机防火墙
  • 原因 2:接口地址错误 解决:核对base_url和接口路径

报错 3:HTTPS 证书异常

  • 解决:在config中添加verify: False跳过证书校验

报错 4:压测出现大量 Failed

  • 原因:并发过高、接口本身性能瓶颈、服务器连接数不足
  • 解决:降低并发数 / 爬坡速率,排查接口代码、服务器资源

七、学习总结 & 进阶方向

  1. 基础流程回顾安装工具 → 创建项目 → 编写 / 运行功能用例 → 查看报告 → 执行性能压测
  2. 入门重点优先掌握:变量、请求配置、extract提取、validate断言,这是接口自动化核心。
  3. 进阶学习方向
  • 自定义函数:修改debugtalk.py实现复杂数据处理;
  • 数据驱动:使用 CSV/JSON 实现多组参数循环测试;
  • 场景化测试:通过testcase串联多个接口,模拟完整业务流程。
http://www.jsqmd.com/news/901515/

相关文章:

  • CUBE:融合B样条与神经网络的3D人脸混合表示技术解析
  • CTF选手的工具箱:用Python脚本自动化处理MISC与Web题(附Writeup实战代码)
  • MonkeyCode 新手极速入门与实战指南
  • 别再手动点鼠标了!用Python批量给Neo4j知识图谱上色和调整样式
  • 游戏交易点卡充值源码系统制造厂
  • 在国产Deepin系统上搞定Halcon 20.11.2:一份给Linux新手的保姆级安装避坑指南
  • 对比按需计费与 Token Plan 套餐在 Taotoken 上的成本差异与选择建议
  • ThinkPad X13 装 Ubuntu 16.04 双系统,我踩过的那些坑(含 grub-install 错误修复)
  • 多智能体系统交互困境:内部日志失效与外部决策锚点构建
  • SpringBoot 消费者并发控制:线程池配置
  • 深入NVIDIA Container Runtime Hook:它是如何‘劫持’Docker容器启动流程,为你注入GPU能力的?
  • 深度学习在射频指纹识别中的安全挑战与优化策略
  • 从被动执行到主动驱动:构建个人高效执行系统的技术心法
  • AI记忆系统设计解析:从上下文窗口到分层压缩与检索机制
  • 告别Xshell:用VNC Viewer远程操控Ubuntu桌面,图形化运维真香了
  • Arkts网页设计
  • FPGA加速DNN高光谱图像分割的优化实践
  • Cursor Composer 最佳实践
  • Cppcheck进阶玩法:不止于基础扫描,如何用自定义规则和库文件提升检查精度?
  • 保姆级教程:用Python RDKit计算摩根分子描述符,5分钟搞定药物分子相似性分析
  • 别再只会用top看CPU了!Linux服务器性能排查,这5个命令的组合拳你得会
  • 2025-2026年全球中东专线物流公司推荐:十大口碑评测大宗设备运输防损坏案例注意事项 - 品牌推荐
  • 智能电表数据除了计费还能干啥?聊聊NILM技术在家居节能与异常检测中的应用
  • COFFEE算法:小行星探测中的阴影鲁棒视觉导航技术
  • rabbitmq学习demo,包含普通消息,TTL+死信队列,topic交换机三种情况,以项目形式讲解
  • 告别复制粘贴:手把手教你用STM32CubeMX HAL库为8位8080 LCD屏写驱动(从引脚配置到地址计算)
  • 企业AI Agent的性能基准测试
  • 如何选北京二手房装修公司?2026年5月推荐TOP5评测厨卫改装防隐患案例特点注意事项 - 品牌推荐
  • 5G/6G混合光纤与FSO回传网络架构解析
  • 保姆级教程:给你的500G固态硬盘规划一个完美的Ubuntu 20.04双系统分区方案