进阶用法

以下会介绍 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环境,添加以下环境变量:

KeyValue
getAPIposts/1
getAPIResponseStatus200
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”}
postAPIposts
postAPIResponseStatus201
postAPIResponseData{“title”:“foo”,“body”:“bar”,“userId”:1,“id”:101}
2. 使用环境变量

在 “Pre-request Script” 或 “Tests” 部分中,你可以使用环境变量来存储和获取数据。在请求 Body 中,你可以通过 pm.environment.get 获取环境变量的值。

注意:在 JavaScript 中,环境变量获取的值是字符串

编辑 get-demo 接口
  • 将 URL 修改为 {{baseURL}}/{{getAPI}}
  • 编辑 Tests 脚本用来验证响应数据:
// 获取环境变量中的数据
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 接口
  • 将 URL 修改为 {{baseURL}}/{{postAPI}}
  • 编辑 Tests 脚本用来验证响应数据:
// 获取环境变量中的数据
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,确认测试通过

2023112419E4tzBS

4.自动化运行环境变量数据驱动脚本
  • 将更新后的测试用例导出到自动化测试项目测试用例文件夹下
  • 调整 package.json

在 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

2023112419OCkmnl

使用数据文件

大致的步骤是:将测试数据存放在数据文件中,然后在测试脚本中读取数据文件中的数据,进行测试。

postman 的数据文件支持 json,csv 和 txt 等多种格式,以下示例会以 json 格式 进行

1.创建数据文件
  • 在 postma 接口自动化测试项目下新建 Data 文件夹
mkdir Data
  • 在 Data 文件夹下新建 json 格式数据文件 testdata.json
cd Data
touch testdata.json
  • 更新测试数据文件 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 接口
  • 编辑 Pre-request Script 脚本来从测试数据文件中获取 请求 url
const getAPI = pm.iterationData.get('getAPI');
  • 将 URL 修改为 {{baseURL}}/{{getAPI}}

  • 编辑 test 脚本来从测试数据文件中获取测试数据

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 接口
  • 编辑 Pre-request Script 脚本来从测试数据文件中获取 请求 url
const postAPI = pm.iterationData.get('postAPI');
  • 将 URL 修改为 {{baseURL}}/{{postAPI}}

  • 编辑 test 脚本来从测试数据文件中获取测试数据

// 从数据文件获取测试数据
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.调试
  • 在 postman 页面选择 get-demo request 和 post-demo request 所在的 demo Collection,点击右上角的三个点,选择 Run Collection
  • 在 runner 准备页面右侧区域点击 Data 的 Select File 按钮,选择之前的测试数据文件 testdata.json

2023112419KIqIfa

  • 然后点击 Run demo,确认运行通过即可导出测试用例文件

2023112419c9Hv5e

4.自动化运行数据驱动脚本
  • 将更新后的测试用例导出到自动化测试项目测试用例文件夹下
  • 调整 package.json

在 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

2023112419k7I9ZE

参考文档


欢迎关注软件测试同学的公众号“软件测试同学”,原创 QA 技术文章第一时间推送。