httprunner实践样例

目录

1. 安装 HTTPRunner

2. 基本概念和目录结构

3. 编写一个 HTTPRunner 测试用例(YAML 示例)

4. 运行测试用例

5. 使用 Python 编写测试用例

6. 运行 Python 测试用例

7. 集成测试报告

8. 高级用法:集成环境变量、外部数据

9. 集成到 CI/CD 流程

10.应用说明: 


简介:

HTTPRunner 是一个非常好用的自动化测试框架,它用于 HTTP API 测试,支持 RESTful、GraphQL 等接口类型,结合 YAML 或 Python 可以非常灵活地进行接口测试。它提供了一个直观的方式来写测试案例,并且可以将测试用例和报告集成到持续集成(CI)流程中。

1. 安装 HTTPRunner

1.1 使用 pip 安装

在安装之前,确保已经安装了 Python 环境(Python 3.7 以上)。然后使用以下命令安装 HTTPRunner:

pip install httprunner

1.2 检查安装是否成功

安装完成后,你可以通过以下命令来检查是否安装成功:

hrun -V

如果看到版本号输出,说明 HTTPRunner 安装成功。

2. 基本概念和目录结构

HTTPRunner 支持两种测试方式:

  • YAML 格式的测试用例:适合对测试内容没有复杂编程需求的团队
  • Python 格式的测试用例:适合有编程能力并且需要进行复杂逻辑或定制化的团队

3. 编写一个 HTTPRunner 测试用例(YAML 示例)

3.1 创建目录结构

推荐将测试用例组织到一个结构化的目录中:

project/

├── tests/
│   └── test_api.yml        # 测试用例文件
├── config/
│   └── config.yml          # 配置文件
├── reports/                # 存放测试报告
└── requirements.txt        # 依赖的Python库
 

3.2 编写 YAML 测试用例

下面是一个简单的 HTTPRunner 测试用例,使用 YAML 格式编写,模拟一个 HTTP GET/POST 请求并检查返回状态码和内容。

tests/test_api.yml

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"]

teststeps:
-
    name: get with params
    variables:
        foo1: ${ENV(USERNAME)}
        foo2: bar21
        sum_v: "${sum_two_int(10000000, 20000000)}"
    request:
        method: GET
        url: $base_url/get
        params:
            foo1: $foo1
            foo2: $foo2
            sum_v: $sum_v
    extract:
        foo3: "body.args.foo2"
    validate:
        - eq: ["status_code", 200]
        - eq: ["body.args.foo1", "debugtalk"]
        - eq: ["body.args.sum_v", "30000000"]
        - eq: ["body.args.foo2", "bar21"]
-
    name: post raw text
    variables:
        foo1: "bar12"
        foo3: "bar32"
    request:
        method: POST
        url: $base_url/post
        headers:
            Content-Type: "text/plain"
        body: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
    validate:
        - eq: ["status_code", 200]
        - eq: ["body.data", "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32."]
-
    name: post form data
    variables:
        foo2: bar23
    request:
        method: POST
        url: $base_url/post
        headers:
            Content-Type: "application/x-www-form-urlencoded"
        body: "foo1=$foo1&foo2=$foo2&foo3=$foo3"
    validate:
        - eq: ["status_code", 200]
        - eq: ["body.form.foo1", "$expect_foo1"]
        - eq: ["body.form.foo2", "bar23"]
        - eq: ["body.form.foo3", "bar21"]

3.3 说明

  • config: 配置部分,定义了测试的基本信息、基础 URL 和一些公共变量。
  • teststeps: 这是测试的具体步骤,包括请求和响应的验证。
    • request: 请求配置,定义了请求方法、URL 和请求体。
    • validate: 校验部分,定义了返回结果的校验规则。

4. 运行测试用例

通过以下命令运行 YAML 格式的测试用例:

hrun run tests/test_api.yml

5. 使用 Python 编写测试用例

5.1 创建 Python 格式的测试用例

除了 YAML 格式,你还可以使用 Python 编写测试用例。下面是一个基于 Python 编写的 HTTPRunner 测试用例:

tests/test_api.py

from httprunner import HttpRunner, Config, Step, RunRequest

class TestAPI(HttpRunner):
    config = Config("Test API").base_url("https://jsonplaceholder.typicode.com")
    
    teststeps = [
        Step(
            RunRequest("Test POST request")
            .post("/posts")
            .with_json({"title": "foo", "body": "bar", "userId": 1})
            .validate()
            .assert_equal("status_code", 201)
            .assert_json("title", "foo")
            .assert_json("body", "bar")
        )
    ]

if __name__ == "__main__":
    TestAPI().test_start()
 

5.2 说明

  • Config: 配置部分,类似于 YAML 文件中的 config,用于设置基本配置。
  • Step: 每个测试步骤,定义请求和验证。
  • RunRequest: 用于设置 HTTP 请求,包括请求方法、URL、请求体和验证内容。

6. 运行 Python 测试用例

运行 Python 格式的测试用例:

python tests/test_api.py

7. 集成测试报告

HTTPRunner 默认会在 reports 目录下生成测试报告。你可以在 config.yml 中设置报告的输出路径。

7.1 自定义报告路径

config:
  report:
    name: "my_report.html"
    save_path: "./custom_reports"

测试运行后,报告将保存在 ./custom_reports 文件夹中。

7.2 生成 HTML 测试报告

测试完成后,HTTPRunner 会自动生成一个 HTML 格式的报告,可以通过浏览器查看。报告会展示每个请求的详细信息、返回结果以及验证是否通过。

8. 高级用法:集成环境变量、外部数据

8.1 环境变量支持

你可以在 HTTPRunner 配置文件中使用环境变量来配置不同的 API 环境(比如 devtestprod 等),在运行测试时选择不同的环境。

config.yml 中:

env: dev

然后,在测试代码中,你可以读取并使用该环境变量。

8.2 从 Excel 或 CSV 文件加载数据

HTTPRunner 也支持从 Excel 或 CSV 文件加载测试数据。你可以将数据放在外部文件中,使用 HTTPRunner 读取这些数据并进行批量测试。

8.3 数据驱动

如果需要基于不同的测试数据执行相同的 API 测试,HTTPRunner 提供了数据驱动(Data-Driven)功能。你可以在测试步骤中引入多个测试数据,如:

teststeps:
  - name: "Test POST request with multiple data"
    request:
      method: POST
      url: "/posts"
      json:
        title: "$title"
        body: "$body"
        userId: "$user_id"
    variables:
      - title: ["foo", "bar"]
      - body: ["test body 1", "test body 2"]
      - user_id: [1, 2]
    validate:
      - eq: ["status_code", 201]
 

9. 集成到 CI/CD 流程

HTTPRunner 可以很容易地集成到持续集成和持续交付(CI/CD)流程中,例如 Jenkins 或 GitLab CI。你只需要在 CI 配置文件中添加执行 HTTPRunner 测试用例的命令,并在构建过程中生成测试报告。

# 在 CI 流程中运行 HTTPRunner 测试用例

hrun run tests/test_api.yml

10.应用说明: 

  • 保持测试用例清晰和简洁:将测试用例分解为多个小步骤,每个步骤单一、易于理解。
  • 使用环境变量:将环境配置、API 基础 URL 和其他变量提取到配置文件或环境变量中,保持代码的灵活性。
  • 使用数据驱动:从外部文件读取数据并进行批量测试,提高测试的覆盖面和效率。
  • 集成到 CI/CD:在自动化构建过程中运行 HTTPRunner 测试,确保每次代码变动后 API 功能都能得到验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934478.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

没有在 SCM 配置或者插件中的 Git 存储库配置错误

问题: jenkins 配置新项目后首次运行报错如下,同时git代码分支无法选择。 已返回默认值 没有在 SCM 配置或者插件中的 Git 存储库配置错误 选项"使用仓库"设置为:"http://xxxx.git 请检查配置 原因: 配置pipeline 脚本时指…

HBU深度学习实验15-循环神经网络(2)

LSTM的记忆能力实验 飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com) 长短期记忆网络(Long Short-Term Memory Network,LSTM)是一种可以有效缓解长程依赖问题的循环神经网络.LSTM 的特点是引入了一个新的内部状态&am…

算法日记 46 day 图论(并查集)

题目:冗余连接 108. 冗余连接 (kamacoder.com) 题目描述 有一个图,它是一棵树,他是拥有 n 个节点(节点编号1到n)和 n - 1 条边的连通无环无向图(其实就是一个线形图),如图&#xff…

二叉树优选算法(一)

一、根据二叉树创建字符串 题目介绍: 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。 空节点使用一对空括号对 "()" 表示,转化后需…

RabbitMq死信队列延迟交换机

架构图 配置 package com.example.demo.config;import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class DeadLetterConfig {public String …

JavaWeb学习--cookie和session,实现登录的记住我和验证码功能

目录 (一)Cookie概述 1.什么叫Cookie 2.Cookie规范 3.Cookie的覆盖 4.cookie的最大存活时间 ​​​​​​(Cookie的生命) (二) Cookie的API 1.创建Cookie:new 构造方法 2.保存到客户端浏…

开启第二阶段---蓝桥杯

一、12.10--数据类型的范围及转化 今天是刚开始,一天一道题 对于这道题我想要记录的是Java中的整数默认是 int 类型,如果数值超出了 int 的范围,就会发生溢出错误。为了避免这个问题,可以将数字表示为 long 类型,方法…

黑马头条学习笔记

Day01-环境搭建 项目概述 课程大纲 业务说明 技术栈 Spring-Cloud-Gateway : 微服务之前架设的网关服务,实现服务注册中的API请求路由,以及控制流速控制和熔断处理都是常用的架构手段,而这些功能Gateway天然支持 运用Spring Boot快速开发…

详解RabbitMQ在Ubuntu上的安装

​​​​​​​ 目录 Ubuntu 环境安装 安装Erlang 查看Erlang版本 退出命令 ​编辑安装RabbitMQ 确认安装结果 安装RabbitMQ管理界面 启动服务 查看服务状态 通过IP:port访问 添加管理员用户 给用户添加权限 再次访问 Ubuntu 环境安装 安装Erlang RabbitMq需要…

SpringBoot【二】yaml、properties两配置文件介绍及使用

一、前言 续上一篇咱们已经搭建好了一个springboot框架雏形。但是很多初学的小伙伴私信bug菌说,在开发项目中,为啥.yaml的配置文件也能配置,SpringBoot 是提供了两种2 种全局的配置文件嘛,这两种配置有何区别,能否给大…

Excel的文件导入遇到大文件时

Excel的文件导入向导如何把已导入数据排除 入起始行,选择从哪一行开始导入。 比如,前两行已经导入了,第二次导入的时候排除前两行,从第三行开始,就将导入起始行设置为3即可,且不勾选含标题行。 但遇到大文…

Windows平台Unity3D下RTMP播放器低延迟设计探讨

技术背景 好多开发者希望我们分享下大牛直播SDK是如何在Unity下实现低延迟的RTMP播放的,以下是一些降低 Unity 中 RTMP 播放器延迟的方法: 一、选择合适的播放插件或工具 评估和选用专业的流媒体插件 市场上有一些专门为 Unity 设计的流媒体插件&…

PaddleOCR模型ch_PP-OCRv3文本检测模型研究(一)骨干网络

从源码上看,PaddleOCR一共支持四个版本,分别是PP-OCR、PP-OCRv2、PP-OCRv3、PP-OCRv4。本文选择PaddleOCR的v3版本的骨干网络作为研究对象,力图探究网络模型的内部结构。 文章目录 研究起点卷归层压发层残差层骨干网代码实验小结 研究起点 参…

log4j漏洞复现--vulhub

声明:学习过程参考了同站的B1g0rang大佬的文章 Web网络安全-----Log4j高危漏洞原理及修复(B1g0rang) CVE-2021-44228 RCE漏洞 Log4j 即 log for java(java的日志) ,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输…

计算机网络ENSP课设--三层架构企业网络

本课程设计搭建一个小型互联网,并模拟Internet的典型Web服务过程。通过此次课程设计,可以进一步理解Internet的工作原理和协议过程,并提高综合知识的运用能力和分析能力。具体目标包括: (1)掌握网络拓扑的…

SQL 获取今天的当月开始结束范围:

使用 GETDATE() 结合 DATEADD() 和 DATEDIFF() 函数来获取当前月的开始和结束时间范围。以下是实现当前月时间范围查询的 SQL&#xff1a; FDATE > DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) FDATE < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) 1, 0) …

Go的Gin比java的Springboot更加的开箱即用?

前言 隔壁组的云计算零零后女同事&#xff0c;后文简称 云女士 &#xff0c;非说 Go 的 Gin 框架比 Springboot 更加的开箱即用&#xff0c;我心想在 Java 里面 Springboot 已经打遍天下无敌手&#xff0c;这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗&#xff0c;非我要…

【2024最新Java面试宝典】—— SpringBoot面试题(44道含答案)

1. 什么是 Spring Boot&#xff1f; Spring Boot 是 Spring 开源组织下的子项目&#xff0c;是 Spring 组件一站式解决方案&#xff0c;主要是简化了使用 Spring 的难度&#xff0c;简省了繁重的配置&#xff0c;提供了各种启动器&#xff0c;使开发者能快速上手。 2. 为什么…

【PlantUML系列】用例图(三)

目录 一、组成部分 二、典型案例 一、组成部分 参与者&#xff08;Actors&#xff09;&#xff1a;使用关键字 actor 后跟参与者的名称。用例&#xff08;Use Cases&#xff09;&#xff1a;使用关键字 usecase 后跟用例的名称和编号&#xff08;可选&#xff09;。系统边界…

C++命运石之门代码抉择:C++入门(上)

文章目录 1.前言1.1 什么是C1.2 C的发展1.3 C的重要性1.4 如何学习C1.5 C要学什么 2. C语言过渡到C(上)2.1 域2.1.1 命名空间2.1.1.1 定义2.1.1.2 作用域限定符2.1.1.3 使用 2.1.2 域的使用优先级 2.2 输入及输出2.2.1 std 命名空间及自定义命名空间2.2.2 .C输入&输出 2.3 …