专栏文章 在 Postman 中实现自动化测试的全面指南

大话性能 · 2024年03月08日 · 最后由 sir 回复于 2024年03月08日 · 6916 次阅读

在当今的软件开发过程中,API(应用程序编程接口)的使用变得越来越普遍,API 允许不同系统之间进行通信和数据交换,从而实现复杂的功能和服务集成,为了确保 API 的可靠性和稳定性,自动化测试至关重要。[Postman] 作为一款功能强大的 API 开发和测试工具,在自动化测试领域扮演着重要的角色。

Postman 的主要功能

[Postman] 是一款功能丰富的 API 开发和测试工具,集成了多种功能,包括:

  • 请求构建和发送:Postman 允许用户轻松地构建和发送 HTTP 请求,支持多种请求方法和参数。
  • 响应查看和分析:Postman 可以清晰地展示服务器的响应,包括响应状态、响应头和响应体。同时提供多种工具帮助用户分析响应数据。
  • 环境管理:Postman 支持环境管理,允许用户为不同的开发环境或测试环境配置不同的变量和设置。
  • 测试脚本编写:Postman 提供了直观的测试脚本编辑器,支持 JavaScript 脚本编写,方便用户对 API 进行自动化测试。
  • Mock Server:Postman 集成了 Mock Server 功能,允许用户模拟 API 响应,非常适合 API 开发和测试。

、Postman 自动化测试的基础知识

1.1 自动化测试简述

[自动化测试] 是指使用工具或框架自动执行测试用例的过程。它通过模拟用户操作,自动发送请求、验证响应,并判断测试结果是否符合预期。自动化测试可以大大提高测试效率和覆盖率,并减少人为错误。

1.2 自动化测试重要性

自动化测试之所以重要,主要有以下几个原因:

  • 提高测试效率: 自动化测试可以自动执行重复性、繁琐的测试任务,节省测试人员的时间和精力。
  • 增强测试覆盖率: 自动化测试可以覆盖更多的测试用例,提高测试覆盖率,发现更多潜在的缺陷。
  • 提升测试可靠性: 自动化测试可以减少人为错误,提高测试的可靠性和稳定性。
  • 快速反馈: 自动化测试可以提供快速反馈,帮助开发人员和测试人员及时发现并修复缺陷。
  • 持续集成: 自动化测试可以与持续集成工具集成,实现持续集成和持续交付。

1.3 不同类型的自动化测试

自动化测试可以分为不同的类型,根据测试的粒度和范围,常见的类型包括:

  • 单元测试: 单元测试是对软件中最小的独立单元(如函数、方法)进行的测试。单元测试通常由开发人员编写,主要目的是验证代码的正确性。
  • 集成测试: 集成测试是对两个或多个软件单元组合在一起进行的测试。集成测试主要目的是验证不同单元之间的接口和交互是否正确。
  • 系统测试: 系统测试是对整个软件系统进行的测试。系统测试主要目的是验证软件系统是否满足需求和期望。

此外,自动化测试还可以分为以下几类:

  • 功能测试: 功能测试是验证软件系统是否按照预期的方式工作。
  • 性能测试: 性能测试是测量软件系统的性能指标,如响应时间、吞吐量等。
  • 安全性测试: 安全性测试是验证软件系统是否能够抵御安全攻击。
  • 兼容性测试: 兼容性测试是验证软件系统是否能够在不同的环境和平台上正常工作。

不同的自动化测试类型和类别适用于不同的测试场景和需求,测试人员需要根据实际情况选择合适的自动化测试类型和类别,以实现最佳的测试效果。

更多内容可以学习《测试工程师 Python 工具开发实战》书籍《大话性能测试 JMeter 实战》书籍

二、Postman 中创建自动化测试

2.1 创建新的请求

打开 [Postman] 并创建一个新的工作区(Workspace),单击 “请求” 选项卡(Request)并选择要发送的请求类型(如 GET、POST、PUT 等),在 “URL” 字段中输入请求的 URL,在 “Body” 选项卡中选择请求正文的格式(如 JSON、XML、文本等),在 “Headers” 选项卡中添加必要的请求头,在 “Params” 选项卡中添加请求参数。

2.2 使用环境变量管理多个环境

Postman 的环境变量功能允许你轻松地在不同的环境之间切换,而无需更改请求的 URL 或其他设置。

单击左侧边栏的 “Environments” 选项卡,单击 “+” 按钮以创建一个新的环境,在环境中填写环境变量名和变量值。

环境变量设置后,如果要在请求中使用环境变量,请使用以下语法:

{{environment_variable_name}}

例如,要在请求 URL 中使用名为 “host” 的环境变量,语法为:

{{host}}/api/v1/users

当你在不同的环境之间切换时,Postman 会自动替换环境变量的值,点击页面右上角可切换环境变量。

2.3 编写测试脚本

Postman 允许你使用 JavaScript 在 Tests tab 中编写测试脚本,测试脚本可以用来验证响应状态、响应时间、响应体等。比如我要在 [Postman] 中将下面返回响应的 token 校验字段提取到环境变量中,我要怎么写脚本呢?

{
    "code": "0",
    "data": {
        "token": "fgub938t203t9ug0j2r9it2094942"
    },
    "message": "success"
}

要提取出上面的 token 校验字段到环境变量中,你可以在 Tests 中写入以下脚本。

var body = JSON.parse(pm.request.body.raw);

var token = body.token;

console.log("Token: " + token);

pm.environment.set("token", token);

一般接口的 token 是用来鉴权的,所以你需要将其存到环境变量中,然后在 Collections 中全局引用这个变量,这样其它接口在测试或者是自动化测试的时候就可以继承这个鉴权的 token 了。

有一点要注意,在集合中设置了鉴权的 token 后,在接口中需要选择 “Inherit auth from parent”,也就是继承父级(继承自集合中设置的 token),不然不会生效的。

2.4 使用 Pre-request Scripts

Pre-request Scripts 允许你在发送请求之前执行一些脚本。这可以用来动态生成请求参数、设置请求头、修改请求正文等。比如你要在发送请求时在每个请求的请求头加上一些参数,你就可以在集合的 Pre-request Scripts 中编写 Javascript 脚本,这取决于你的需求,形如:

pm.request.headers.add({
    key: 'aaaaa',
    value: 'bbbbb'
});

2.5 运行测试和查看结果

当上述步骤完成后,也就是你根据你的业务需求,将接口、环境及环境变量、接口鉴权校验、请求头都设置完毕后,你可以试着点击 “Send” 按钮来调试一下,看看是否符合初步预期,如果符合,接下来就可以在 Postman 中运行自动化测试了。

提个醒,在编写任何自动化测试之前,都要首先确保单个接口能够调试成功,然后逐步往下联调集成,养成良好测试路径,才能事半功倍。

要在 Posmtan 中进行自动化测试,你可以点击集合名上的 “。。。”,然后点击 “Run collection” 选项打开 Runner 页。

在 Runner 页,你可以选择需要测试的接口,然后选择循环次数、间隔时间,也可以上传 Data 文件,这个文件是需要测试的数据,设置完毕后点击 “Run ” 运行即可。

运行完成后,你可以在 Collection Runner 的结果窗口中查看每个请求的执行情况。这包括请求的响应时间、状态码、响应体等信息,这样,一个简单的自动化测试就完成了。

三、高级功能与最佳实践

3.1 Postman 自动化测试的进阶脚本编写

使用 Chai Assertion Library 增强测试能力

Chai Assertion Library 是一个功能强大的 JavaScript 断言库,可以帮助你编写更复杂、更具可读性的测试脚本。Postman 内置了 Chai Assertion Library,因此你可以直接在测试脚本中使用 Chai 的断言方法。

以下是一些 Chai 断言方法的示例:

  • pm.expect(actual).to.be.equal(expected);:断言实际值等于预期值。
  • pm.expect(actual).to.be.above(expected);:断言实际值大于预期值。
  • pm.expect(actual).to.be.below(expected);:断言实际值小于预期值。
  • pm.expect(actual).to.include(expected);:断言实际值包含预期值。
  • pm.expect(actual).to.have.lengthOf(expected);:断言实际值具有指定的长度。

这些 Chai 断言方法需要包裹在 pm.test() 中使用。在 Postman 中,pm.test() 是用来编写测试脚本的方法,你可以在其中编写你的测试逻辑,包括断言部分。因此,你应该将这些断言方法放在 pm.test() 中,以确保它们在测试中正确执行,并根据断言结果生成相应的测试结果,例如:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Status code is 200", function () {
    pm.expect("actual").to.be.equal("qq");
});

如何利用环境变量在多个请求间传递数据

Postman 的环境变量允许你在不同的请求之间传递数据。这可以用来共享一些公共的数据,例如:用户凭证、API 密钥、测试数据等。具体步骤已经在上文的 2.2 和 2.3 小节讲过,不再具体赘述。简单来讲就是在环境变量中设置变量及变量值,然后在 Collection 中通过{{}}引用环境变量即可。

3.2 CI/CD 集成

如何将 Postman 测试集成到 CI/CD 流程中

将 Postman 测试集成到 CI/CD 流程中可以帮助你实现持续集成和持续交付。这样,你可以在每次代码更改后自动运行 Postman 测试,并根据测试结果决定是否将更改部署到生产环境。

以下是一些将 Postman 测试集成到 CI/CD 流程中的步骤:

1.安装 Postman Newman

Postman Newman 是一个命令行工具,可以帮助你在 CI/CD 流程中运行 Postman 测试。要安装 Postman Newman,请按照以下步骤操作:

  • 在你的 CI/CD 服务器上安装 Node.js。
  • 使用以下命令安装 Postman Newman:
npm install -g newman

2.将 Postman 测试导出为 JSON 或 Collection 文件

要将 Postman 测试导出为 JSON 或 Collection 文件,请按照以下步骤操作:

  • 在 Postman 中打开要导出的测试文件。
  • 单击 “导出”(Export)按钮。
  • 选择要导出的格式(JSON 或 Collection)。
  • 将导出的文件保存到你的 CI/CD 服务器上。

3.将 Postman Newman 集成到你的 CI/CD 工具中

你可以使用不同的 CI/CD 工具来集成 Postman Newman。以下是一些示例:

  • Jenkins:
pipeline {
  agent any

  stages {
    stage('Run Postman Tests') {
      steps {
        sh 'newman run /path/to/postman_collection.json'
      }
    }
  }
}
  • Travis CI:
language: node_js

script:
  - newman run /path/to/postman_collection.json
  • CircleCI:
version: 2.1

jobs:
  run_postman_tests:
    docker:
      - image: circleci/node:latest
    steps:
      - checkout
      - run:
          name: Run Postman Tests
          command: newman run /path/to/postman_collection.json

上面的流水线命令你可以在 Postman 中生成,还是在自动化测试的 Runner 页,在页面中点击 “Automate runs via CLI” 选项,然后点击下方的 “Configure command” 即可。

来到配置页,你可以选择相应的平台(比如 Jenkins、Gitlab)来生成对应的 Postman CLI 命令。

3.3 最佳实践和常见问题

测试用例组织技巧

  • 将测试用例组织成不同的集合(Collection),以便于管理和运行。
  • 使用 Postman 的文件夹功能来组织测试用例。
  • 为每个测试用例编写清晰的描述,以便于理解其目的。
  • 使用标签来标记测试用例,以便于过滤和搜索。

性能和效率优化建议

  • 避免在测试脚本中执行耗时的操作,例如数据库查询或文件读取。
  • 使用 Postman 的 Pre-request Scripts 来设置请求头和参数,而不是在每次请求中都重复设置。
  • 使用 Postman 的 Tests tab 来验证响应,而不是使用 console.log() 或其他方法。
  • 使用 Newman 来运行 Postman 测试,而不是使用 Postman GUI,可以提高性能。

常见的测试编写错误和解决方案

错误: 使用 pm.test() 来验证响应状态,但没有指定要验证的状态码。

解决方案: 使用 pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); 来验证响应状态码为 200。

错误: 使用 pm.expect() 来验证响应正文,但没有指定要验证的值。

解决方案: 使用 pm.expect(pm.response.text()).to.equal("Hello, world!"); 来验证响应正文为 "Hello, world!"。

错误: 使用 pm.send() 来发送请求,但没有指定请求方法。

解决方案: 使用 pm.get()pm.post()pm.put()pm.delete() 或其他方法来发送请求,并指定请求方法。

错误: 使用 pm.environment.get() 来获取环境变量,但没有指定要获取的环境变量的名称。

解决方案: 使用 pm.environment.get("API_KEY") 来获取名为 "API_KEY" 的环境变量。

总结

[Postman] 具有多种功能,包括请求构建和发送、响应查看和分析、环境管理、测试脚本编写以及 Mock Server 功能。Postman 的自动化测试功能通过模拟用户操作,自动发送请求、验证响应,并判断测试结果是否符合预期,提高了测试效率和覆盖率,减少了人为错误。

在 [Postman] 中创建自动化测试的步骤包括创建新的请求、使用环境变量管理多个环境、编写测试脚本、使用 Pre-request Scripts、以及运行测试和查看结果。进阶的功能包括利用 Chai Assertion Library 增强测试能力、使用环境变量在多个请求间传递数据,以及将 Postman 测试集成到 CI/CD 流程中。最佳实践包括测试用例组织技巧、性能和效率优化建议,以及常见的测试编写错误和解决方案。
更多内容可以学习《测试工程师 Python 工具开发实战》书籍《大话性能测试 JMeter 实战》书籍

共收到 2 条回复 时间 点赞

现在还有人用 postman 做自动化吗

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册