软件测试 —— 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.test
和 pm.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
中。
- 将响应体解析为 JSON 对象,并存储在变量
-
pm.expect(jsonData.price).to.eql(100);
:- 使用 Chai 断言库提供的
expect
方法来进行断言。 - 检查
jsonData.price
是否严格等于(包括类型和值)100
。 - 如果
price
不是100
,则测试将失败,并且 Postman 会报告具体的原因。
- 使用 Chai 断言库提供的
扩展:添加更多测试
你可以根据需要添加更多的测试用例,例如检查其他字段的存在性和值。下面是一些额外的例子:
// 检查产品名称
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');
});