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

软件测试 —— Postman(断言)

软件测试 —— Postman(断言)

  • 断言
      • 示例断言
        • 检查状态码
        • 验证响应体中的特定字段
        • 检查响应时间
        • 验证响应头
        • 检查响应体中的字符串
        • 验证JSON数组长度
      • 使用环境变量
      • 运行集合并查看结果
  • 检查状态码
  • 检查响应体中的字符串
  • 检查响应体字符串是否相等
  • 验证响应头字段
  • 检查JSON返回值
      • 示例情景
      • Postman 测试脚本
      • 解释
      • 扩展:添加更多测试
  • 断言工作原理

我们之前将postman中界面上的主要按钮介绍了一部分,如果还不知道的小伙伴可以点击这里:

https://blog.csdn.net/qq_67693066/article/details/145242508
https://blog.csdn.net/qq_67693066/article/details/145240384

我们今天来学习postman中的断言机制:

断言

我们现在postman中找到“Scripts”:
在这里插入图片描述
我们书写断言就在这里书写,这里注意一下,我们书写断言是用的是JavaScript语言。

在Postman中,断言(Assertions)是用于验证API响应是否符合预期的自动化测试工具。通过编写断言,你可以确保API返回的数据、状态码、响应时间等都满足特定条件。这不仅有助于提高API的质量和可靠性,还可以简化开发和维护过程中的调试工作。以下是关于如何在Postman中使用断言的详细介绍:

示例断言

以下是一些常见的断言示例,展示了如何验证不同的响应属性:

检查状态码
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});
验证响应体中的特定字段
pm.test("Response body has a 'name' property", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData).to.have.property('name');
});
检查响应时间
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});
验证响应头
pm.test("Content-Type is application/json", function () {
    pm.response.to.have.header('Content-Type', 'application/json; charset=utf-8');
});
检查响应体中的字符串
pm.test("Body contains expected string", function () {
    pm.expect(pm.response.text()).to.include("expected string");
});
验证JSON数组长度
pm.test("Array length matches expected count", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.items.length).to.equal(10); // 假设期望有10个元素
});

使用环境变量

你可以结合环境变量来动态设置断言条件,例如根据不同环境检查不同状态码:

var expectedStatusCode = pm.environment.get("expected_status_code") || 200;

pm.test("Status code matches environment variable", function () {
    pm.response.to.have.status(expectedStatusCode);
});

运行集合并查看结果

一旦你为单个请求添加了断言,可以通过运行集合(Collections)来批量执行这些测试。Postman会自动执行每个请求,并根据你编写的断言显示测试结果(通过/失败)。你可以在Runner界面中查看详细的测试报告。

我们来介绍几个比较重要的:

检查状态码

我们在postman的右侧可以找到对应语句的代码:
在这里插入图片描述找到Status code:Code is 200:
在这里插入图片描述然后我们可以点击发送:
在这里插入图片描述我们可以把我们断言的数字换一换:
在这里插入图片描述

检查响应体中的字符串

在这里插入图片描述

检查响应体字符串是否相等

在这里插入图片描述

验证响应头字段

在这里插入图片描述这里注意一下,这个是可以验证响应头中的任何字段:
在这里插入图片描述
比如我们可以验证Connection字段:
在这里插入图片描述

检查JSON返回值

在这里插入图片描述
因为我这里返回的不是JSON数据,所以给大家举个其他例子:
当然,我可以为你提供一个具体的例子来说明如何使用 pm.testpm.expect 来验证 JSON 响应中的某个值是否等于预期值。假设我们有一个 API 端点 /api/product/1,它返回的产品信息中包含一个名为 price 的字段,我们希望验证这个字段的值是否为 100

示例情景

API 请求:GET https://api.example.com/api/product/1

响应示例:

{
  "id": 1,
  "name": "Example Product",
  "description": "This is an example product.",
  "price": 100,
  "stock": 50
}

Postman 测试脚本

我们将编写一个测试用例,以确保 price 字段的值为 100。以下是完整的测试代码:

pm.test("Product price is 100", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.price).to.eql(100);
});

解释

  • pm.test("Product price is 100", function () { ... });

    • 创建一个新的测试用例,名称为 "Product price is 100"
    • 当测试通过时,Postman 将显示此名称;如果失败,则会给出相应的错误信息。
  • var jsonData = pm.response.json();

    • 将响应体解析为 JSON 对象,并存储在变量 jsonData 中。
  • pm.expect(jsonData.price).to.eql(100);

    • 使用 Chai 断言库提供的 expect 方法来进行断言。
    • 检查 jsonData.price 是否严格等于(包括类型和值)100
    • 如果 price 不是 100,则测试将失败,并且 Postman 会报告具体的原因。

扩展:添加更多测试

你可以根据需要添加更多的测试用例,例如检查其他字段的存在性和值。下面是一些额外的例子:

// 检查产品名称
pm.test("Product name is 'Example Product'", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.name).to.equal("Example Product");
});

// 检查库存数量大于零
pm.test("Product stock is greater than zero", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.stock).to.be.above(0);
});

// 检查 ID 存在并且是数字类型
pm.test("Product has a numeric ID", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.id).to.be.a('number');
});

断言工作原理

在这里插入图片描述


http://www.kler.cn/a/512177.html

相关文章:

  • Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL
  • 浅说树上倍增(下)
  • Vue3数据响应式原理
  • 循环队列(C语言)
  • Dockerfile -> Docker image -> Docker container
  • 通信协议之数据帧常用校验方法(奇偶校验、CRC校验)
  • Windows FileZila Server共享电脑文件夹 映射21端口外网连接
  • centos设置开机自启的几种方案(frp为例)
  • leetcode——无重复字符的最长字串(java)
  • 网站HTTP改成HTTPS
  • 一种简单又强势的Js-Forward脚本编写方式
  • 计算机网络 (50)两类密码体制
  • 客户端/服务端 负载均衡
  • C/C++、网络协议、网络安全类文章汇总
  • 自动驾驶之DriveMM: All-in-One Large Multimodal Model for Autonomous Driving
  • 『 C++ 』深入理解类中的 this 指针在适配器的作用
  • 数据库高可用方案-03-主备等高可用架构
  • Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
  • 如何在 Pytest 中使用命令行界面和标记运行测试
  • python清除空格函数
  • 深入解析浏览器异步任务调度 API:让 Web 开发更高效
  • 通过Ukey或者OTP动态口令实现windows安全登录
  • ent.SetDatabaseDefaults()
  • Windows图形界面(GUI)-QT-C/C++ - Qt QToolBox详解教程
  • JSON全解析:语法、转换与FastJson应用指南
  • Linux(UOS系统:DHCP)