Postman 接口自动化测试教程:进阶用法 - 数据驱动之环境变量驱动和数据文件驱动

2023-12-04

这篇博文深入研究 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 接口
  • • 将 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,确认测试通过

图片

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

图片

使用数据文件

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

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

图片

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

图片

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

图片

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时, 请及时加入群: 786229024 ,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】 在这里插入图片描述
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postman 接口自动化测试教程:进阶用法 - 数据驱动之环境变量驱动和数据文件驱动 的相关文章

  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错
  • Postman 的 Chrome 拦截器是否仍可与 Postman 的独立版本一起使用?

    我之前使用过 Postman Chrome 的扩展以及邮递员拦截器扩展 https chrome google com webstore detail postman interceptor aicmkgpgakddgnaphhhpliif
  • 如何使用邮递员测试获得代码覆盖率

    我们在 RestEasy 中创建了 REST 服务 并在 Wildfly 服务器中运行 我们正在运行 Postman 测试用例来测试 Rest URL 当我们执行邮递员测试套件时 有没有办法获得服务的代码覆盖率 我们使用SonarQube来
  • 如何在Postman中查看重定向链?

    有时我需要测试多次重定向单个请求的网站 作为一个简单的例子 我用 PHP 创建了一个示例脚本
  • 我们可以在postman中读取excel中的数据进行js测试吗?

    我们可以在postman中读取excel中的数据进行js测试吗 或者 我们可以编写一个从 excel csv notepad 读取数据的 js 脚本吗 我写了一些 js 脚本来自动化我的 API 测试 我正在使用 Newman 从命令提示符
  • 如何使用邮递员发布对象和列表

    我在用邮递员打包的应用程序 https chrome google com webstore detail postman fhbjgbiflinjbdggehcddcbncdddomop hl en发送帖子请求 我想请求以下控制器 如何使
  • 如何使用 Postman Collection 生成代码

    我知道可以从单个 Postman 请求生成代码片段 但我找不到整个集合的类似功能 我还知道有类似的工具newman https www npmjs com package newman用于运行 Postman Collection 2 1
  • 304 If-None-Match有效时未修改

    我正在优化 Express JSON API 以供 iOS 和 Android 应用程序使用 当应用程序在 If None Match 标头中指定 etag 时 似乎无法让 Express 使用正确的 304 标头进行响应 我不需要设置 E
  • 邮递员 - 为每个请求覆盖用户代理

    我有一个网站 只有在基本身份验证登录后才能访问 您可以使用特定的用户代理绕过它 有没有办法始终将新请求的用户代理设置为某个值 目前它被硬编码为PostmanRuntime 7 29 0 目前 我总是为每个请求手动设置它 但这会减慢工作流程
  • 如何在Postman中存储和重用cookie?

    我在用着Postman https www getpostman com 测试和使用 API 对于登录 url API 需要发送 POST 请求username and password作为字段 我这样做 我得到了200回复我已登录的消息
  • 如何为邮递员请求生成未来的日期和时间

    name IronMan phone number 555555555 number of guest 10 tables 2 reservation start at 2020 10 15T10 00 00 861873Z reserva
  • 如何使用 axios 发送基本身份验证

    我正在尝试实现以下代码 但有些东西不起作用 这是代码 var session url http api address api session endpoint var username user var password password
  • 如何用纽曼读取两个文件夹

    我与纽曼有以下行 工作正常 但我希望在同一个请愿书中执行两个文件夹 首先将执行Login full 然后再执行另一个 这不是必需的 newman run Example postman collection json folder Logi
  • Postman 中的“传输开始”是什么意思?

    我试图弄清楚为什么 API 需要很长时间才能处理我的请求 并在 Postman 中发现了这一点 传输开始是什么意思 https community postman com t how to interpret time details in
  • 如何在邮递员中以@RequestPart形式发送数据

    我刚刚加入一个新项目 但在创建控制器中具有 RequestPart 注释的对象时遇到问题 Here are images of the model 这是控制器 和服务 我应该如何发送创建可交付对象的请求 我尝试了几种方法 但总是出现错误 请
  • 帖子中的 req.body 为空

    突然之间 我的所有项目都发生了这种情况 每当我使用express和body parser在nodejs中发帖时req body是一个空对象 var express require express var bodyParser require
  • 使用 Postman 通过 HTTP POST 上传图像

    一段时间以来 我一直在尝试通过 Postman 将图像发送到一个简单的 PHP 脚本 该脚本应该显示发送的图像 我遵循的步骤是 邮递员 客户端 端 Select POST request 选择标题内容类型有价值多部分 表单数据 在正文选项卡
  • php 解码 JSON 获取值

    我正在尝试解码 JSON 格式 我要发送的是 id 123 name John surname Smith department 3 我正在通过 Postman 发送带有数据的 POST 如图所示 所以 这是我想要解码的数据 data se
  • Postman如何发送请求? ajax,同源策略

    我发现了这个非常有用的 Chrome 扩展程序 名为 Postman 这是一个非常有用的扩展 特别是当您正在编写 RESTful 应用程序时 我感到困惑的一件事是这个插件 扩展如何能够在不同的域上成功发送 POST 请求 我尝试像这样使用
  • Postman - 所需的 MultipartFile 参数不存在 - Spring,Java [重复]

    这个问题在这里已经有答案了 Edit 这个问题不同于 jQuery Ajax 文件上传 所需的 MultipartFile 参数 文件 不存在 https stackoverflow com q 29488852 2279082不同之处在于

随机推荐