这篇博文深入研究 Postman 接口自动化测试的高级技巧,专注于数据文件驱动和环境变量数据驱动。学习如何通过外部数据文件和灵活的环境变量,优雅地进行测试数据的驱动,提高测试覆盖率。博文将为您展示如何以更智能的方式管理和利用数据,使测试用例更具可扩展性和灵活性。
以下会介绍 Postman 和 Newman 的一些进阶用法,包括数据文件驱动和环境变量数据驱动。
数据驱动
在 API 自动化测试的过程中。使用数据驱动是一种常规测试方法,其中测试用例的输入数据和预期输出数据都被存储在数据文件中,测试框架根据这些数据文件执行多次测试,以验证 API 的各个方面。
测试数据可以很容易地修改,而不需要修改测试用例代码。
数据驱动测试可以帮助你有效地覆盖多种情况,确保 API 在各种输入数据下都能正常运行。
可参考 demo:https://github.com/Automation-Test-Starter/Postman-Newman-demo
在 Postman 中进行数据驱动测试,特别是使用 JSON 数据作为测试数据,可以通过环境变量和数据文件配合 Postman 提供的测试脚本来实现,以下会分别以简单的示例来介绍环境变量和数据文件的使用。
使用环境变量
大致的步骤是:将测试数据存储在环境变量中,然后在测试脚本中读取环境变量中的数据,进行测试。
1. 创建环境变量
在 Postman 中,你可以在 "Manage Environments" 窗口中创建环境变量。在 "Manage Environments" 窗口中,你可以创建多个环境,每个环境都有一组环境变量。
之前在 demo 中创建了一个环境变量,名为
DemoEnv
,其中包含了一个环境变量
baseURL
,用于存储 API 的基本 URL。 这一次我们在
DemoEnv
环境中添加多个环境变量,用于存储 get-demo 接口和 post-demo 接口的各类测试数据。
点击编辑
DemoEnv
环境,添加以下环境变量:
Key
|
Value
|
getAPI
|
posts/1
|
getAPIResponseStatus
|
200
|
getAPIResponseData
|
{"userId":1,"id":1,"title":"sunt aut facere repellat provident occaecati excepturi optio reprehenderit","body":"quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"}
|
postAPI
|
posts
|
postAPIResponseStatus
|
201
|
postAPIResponseData
|
{"title":"foo","body":"bar","userId":1,"id":101}
|
2. 使用环境变量
在 "Pre-request Script" 或 "Tests" 部分中,你可以使用环境变量来存储和获取数据。在请求 Body 中,你可以通过 pm.environment.get 获取环境变量的值。
注意:在 JavaScript 中,环境变量获取的值是字符串
编辑 get-demo 接口
// 获取环境变量中的数据
const getAPIResponseStatus = parseInt(pm.environment.get("getAPIResponseStatus"));
const getAPIResponseData = JSON.parse(pm.environment.get('getAPIResponseData'));
pm.test("res.status should be 200", function () {
pm.response.to.have.status(getAPIResponseStatus);
});
pm.test("res.body should be correct", function() {
var data = pm.response.json();
pm.expect(data.id).to.equal(getAPIResponseData.id);
pm.expect(data.userId).to.equal(getAPIResponseData.userId);
pm.expect(data.title).to.equal(getAPIResponseData.title);
pm.expect(data.body).to.equal(getAPIResponseData.body);
});
编辑 post-demo 接口
// 获取环境变量中的数据
const postAPIResponseStatus = parseInt(pm.environment.get("postAPIResponseStatus"));
const postAPIResponseData = JSON.parse(pm.environment.get('postAPIResponseData'));
pm.test("res.status should be 201", function () {
pm.response.to.have.status(postAPIResponseStatus);
});
pm.test("res.body should be correct", function() {
var data = pm.response.json();
pm.expect(data.id).to.equal(postAPIResponseData.id);
pm.expect(data.userId).to.equal(postAPIResponseData.userId);
pm.expect(data.title).to.equal(postAPIResponseData.title);
pm.expect(data.body).to.equal(postAPIResponseData.body);
});
3. 调试环境变量数据驱动脚本
选择对应的环境变量和更新后的测试用例,运行整个 demo collection,确认测试通过
4.自动化运行环境变量数据驱动脚本
在 package.json 文件中,更新测试脚本,用于运行环境变量数据驱动测试用例:
demo 项目为了区分不同场景,新增了测试命令为 environment-driven-test
"environment-driven-test": "newman run Testcase/Environment-Driven.postman_collection.json -e Env/Environment-Driven-DemoEnv.postman_environment.json -r cli,allure --reporter-allure-export ./allure-results",
npm run environment-driven-test
使用数据文件
大致的步骤是:将测试数据存放在数据文件中,然后在测试脚本中读取数据文件中的数据,进行测试。
postman 的数据文件支持 json,csv 和 txt 等多种格式,以下示例会以 json 格式 进行
1.创建数据文件
mkdir Data
cd Data
touch testdata.json
[
{
"getAPI": "posts/1",
"postAPI": "posts",
"getAPIResponseStatus": 200,
"getAPIResponseData": {
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
},
"postAPIResponseStatus": 201,
"postAPIResponseData": {
"title": "foo",
"body": "bar",
"userId": 1,
"id": 101
}
}
]
2.更新测试用例
更新 get-demo 接口
const getAPI = pm.iterationData.get('getAPI');
const getAPIResponseStatus = pm.iterationData.get('getAPIResponseStatus');
const getAPIResponseData = pm.iterationData.get('getAPIResponseData');
pm.test("res.status should be 200", function () {
pm.response.to.have.status(getAPIResponseStatus);
});
pm.test("res.body should be correct", function() {
var data = pm.response.json();
pm.expect(data.id).to.equal(getAPIResponseData.id);
pm.expect(data.userId).to.equal(getAPIResponseData.userId);
pm.expect(data.title).to.equal(getAPIResponseData.title);
pm.expect(data.body).to.equal(getAPIResponseData.body);
});
更新 post-demo 接口
const postAPI = pm.iterationData.get('postAPI');
// 从数据文件获取测试数据
const postAPIResponseStatus = pm.iterationData.get('postAPIResponseStatus');
const postAPIResponseData = pm.iterationData.get('postAPIResponseData');
pm.test("res.status should be 201", function () {
pm.response.to.have.status(postAPIResponseStatus);
});
pm.test("res.body should be correct", function() {
var data = pm.response.json();
pm.expect(data.id).to.equal(postAPIResponseData.id);
pm.expect(data.userId).to.equal(postAPIResponseData.userId);
pm.expect(data.title).to.equal(postAPIResponseData.title);
pm.expect(data.body).to.equal(postAPIResponseData.body);
});
3.调试
4.自动化运行数据驱动脚本
在 package.json 文件中,更新测试测试脚本,用于运行数据驱动测试用例:
demo 项目为了区分不同场景,新增了测试命令为 data-driven-test,且命令后加了-d 参数 用于指定测试数据文件路径
"data-driven-test": "newman run Testcase/Data-Driven.postman_collection.json -e Env/DemoEnv.postman_environment.json -d Data/testdata.json -r cli,allure --reporter-allure-export ./allure-results"
npm run data-driven-test
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,
请及时加入群: 786229024
,里面有各种测试开发资料和技术可以一起交流哦。
最后:
下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取
【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。