软件测试基础二十(接口测试 Postman)

一、Postman介绍

  1. 概述
    • Postman是一款功能强大的API开发和测试工具。它提供了一个直观的图形界面,方便开发人员和测试人员发送各种HTTP请求,轻松地与Web服务进行交互。无论是简单的RESTful API测试,还是复杂的API工作流调试,Postman都能够很好地胜任。
  1. 主要功能
    • 请求发送
      • 可以轻松地发送各种HTTP请求,包括GET、POST、PUT、DELETE、PATCH等方法。对于每个请求,用户可以在界面中输入请求的URL、设置请求头(Headers)和请求体(Body)。例如,在测试一个用户登录API时,可以使用POST方法,在请求体中填写用户名和密码等登录信息,发送到对应的登录接口URL。
    • 响应查看与分析
      • 当发送请求后,Postman会清晰地展示服务器返回的响应。包括状态码、响应头和响应体。用户可以方便地查看响应内容,如返回的JSON数据或HTML页面。并且能够对响应数据进行格式化展示,方便阅读和分析。例如,对于一个返回商品列表的API,响应体可能是一个包含商品名称、价格、库存等信息的JSON数组,Postman可以将其格式化后清晰地展示出来。
    • 环境和变量管理
      • 支持创建和管理不同的环境变量。这对于在不同的测试环境(如开发环境、测试环境、生产环境)中切换非常有用。例如,可以定义一个变量来存储API的基础URL,在不同环境下,只需要修改这个变量的值,而不需要逐个修改所有请求的URL。还可以设置全局变量和局部变量,用于存储和传递在测试过程中需要使用的数据,如用户令牌、测试数据等。
    • 脚本编写
      • 允许用户在请求前后编写JavaScript脚本,实现自动化测试和动态请求。例如,可以在请求前编写脚本生成一个随机的用户ID,将其添加到请求参数中;在响应后编写脚本检查返回数据中的某个字段是否符合预期。通过脚本编写,可以扩展Postman的功能,实现更复杂的测试场景。
    • 集合(Collections)和文件夹管理
      • 可以将相关的请求组织成集合,并在集合中创建文件夹来进一步分类。这有助于更好地管理和组织大量的API测试用例。例如,可以创建一个"用户管理"集合,在其中包含用户注册、登录、信息查询、修改密码等相关请求。集合还可以进行批量操作,如批量运行集合中的所有请求,方便进行回归测试。
    • API文档生成
      • Postman能够根据请求的历史记录和定义自动生成API文档。这对于团队协作和API的维护非常有帮助。生成的文档可以包括API的端点(Endpoints)、请求方法、请求参数、响应格式等信息,方便其他开发人员和测试人员了解API的功能和使用方法。
  1. 应用场景
    • API开发阶段
      • 开发人员在开发API时,可以使用Postman快速测试自己编写的接口。通过发送请求并查看响应,及时发现和解决接口实现过程中的问题,如验证接口是否按照预期的方式处理请求、返回正确的数据格式等。
    • API测试阶段
      • 测试人员可以利用Postman进行全面的API功能测试。包括正常情况测试(如输入正确的参数获取正确的结果)、边界值测试(如测试接口对最大和最小允许参数值的处理)、异常情况测试(如发送错误格式的请求或超出范围的参数,检查接口的错误处理机制)等。还可以进行性能测试,通过多次发送请求并记录响应时间,来初步评估接口的性能。
    • 团队协作和知识共享
      • 在团队中,开发人员和测试人员可以共享Postman的请求集合和环境配置。这使得团队成员之间能够更好地沟通和协作,新成员可以快速上手了解API的测试方法和相关配置。并且,生成的API文档也可以作为团队内部的知识资产,方便后续的维护和扩展。

二、Postman安装

  1. 系统要求
    • Postman支持多种操作系统,包括Windows、Mac和Linux。
    • 对于Windows系统,需要Windows 7或更高版本,并且至少有1GB的内存和200MB的可用硬盘空间。
    • Mac系统要求Mac OS X 10.10或更高版本,至少1GB内存和200MB可用硬盘空间。
    • Linux系统的要求因不同的发行版而异,但一般要求64 - bit操作系统,至少1GB内存和200MB可用硬盘空间。
  1. 下载安装包
    • 可以通过Postman官方网站(Postman
    • 在官网首页,找到"Download"按钮,点击后会根据你的操作系统自动推荐合适的安装包。如果是Windows系统,会下载一个.exe文件;Mac系统则是.dmg文件;Linux系统会提供适用于不同发行版的安装文件(如.deb或.rpm)。
  1. 安装过程(以Windows为例)
    • 下载完成后,找到安装文件并双击运行。
    • 在安装向导中,按照提示逐步进行操作。首先选择安装语言,然后接受许可协议。
    • 可以选择安装路径,默认路径通常是C:\Program Files\Postman,如果需要修改,可以点击"浏览"按钮选择其他路径。
    • 接着,选择是否创建桌面快捷方式和开始菜单快捷方式。
    • 点击"安装"按钮,等待安装过程完成。安装完成后,可以选择是否立即启动Postman。
  1. 安装后配置(首次使用)
    • 首次打开Postman后,可能需要进行一些初始配置。
    • 如果有账号,可以登录账号,这样可以同步请求集合、环境等信息到云端,方便在不同设备上使用。如果没有账号,也可以选择跳过登录。
    • 之后就可以开始使用Postman进行API开发和测试了。可以先熟悉一下界面布局,如左侧的请求集合栏、中间的请求编辑和响应查看区域、顶部的请求方法和URL输入栏等。

三、Postman入门示例

以下是一个使用Postman测试一个简单的"待办事项(To - Do List)"RESTful API的入门示例。假设这个API有以下几个端点:

  • GET /todos:获取所有待办事项的列表。
  • POST /todos:创建一个新的待办事项。
  • PUT /todos/{id}:更新指定ID的待办事项。
  • DELETE /todos/{id}:删除指定ID的待办事项。

(一)、启动Postman并设置环境(可选)

  1. 打开Postman应用程序。
  2. 如果要设置环境变量(方便在不同环境下切换API的基础URL),可以点击右上角的"Manage Environments"(管理环境)按钮。
  3. 在弹出的"Manage Environments"对话框中,点击"Add"(添加)来创建一个新环境。例如,我们创建一个名为"Local Development"(本地开发)的环境,在"Variable"(变量)列添加一个名为"base_url"的变量,在"Initial Value"(初始值)栏填写"http://localhost:3000"(假设API在本地的3000端口运行),然后点击"Save"(保存)。

(二)、发送GET请求获取待办事项列表

  1. 在Postman的主界面,确保请求方法为"GET"。
  2. 在地址栏输入"{{base_url}}/todos"(如果设置了环境变量),或者直接输入完整的API URL,如"http://localhost:3000/todos"。
  3. 点击"Send"(发送)按钮。
  4. 查看响应:
    • 状态码应该是200(假设一切正常),表示请求成功。
    • 响应体可能是一个JSON数组,例如[{"id": 1, "task": "Buy groceries", "completed": false}, {"id": 2, "task": "Read a book", "completed": false}],其中每个对象代表一个待办事项,包含"id"(事项ID)、"task"(任务内容)和"completed"(是否完成)等字段。

(三)、发送POST请求创建新的待办事项

  1. 将请求方法切换为"POST"。
  2. 在地址栏保持和之前获取列表相同的URL("{{base_url}}/todos"或"http://localhost:3000/todos")。
  3. 在"Body"(请求体)选项卡中,选择"raw"(原始数据)格式,并将数据格式设置为"JSON"。
  4. 在请求体中输入要创建的待办事项的信息,例如{"task": "Exercise", "completed": false}
  5. 点击"Send"按钮。
  6. 查看响应:
    • 状态码应该是201(表示资源成功创建)。
    • 响应体可能会返回刚刚创建的待办事项的完整信息,包括新生成的"id",例如{"id": 3, "task": "Exercise", "completed": false}

(四)、发送PUT请求更新待办事项

  1. 将请求方法切换为"PUT"。
  2. 在地址栏输入"{{base_url}}/todos/{id}",其中"{id}"是要更新的待办事项的ID。例如,如果要更新刚才创建的ID为3的待办事项,就输入"http://localhost:3000/todos/3"。
  3. 在"Body"选项卡中,同样选择"raw"格式和"JSON"数据类型,输入更新后的待办事项信息,如{"task": "Go for a run", "completed": false}
  4. 点击"Send"按钮。
  5. 查看响应:
    • 状态码应该是200,表示更新成功。
    • 响应体可能会返回更新后的待办事项的完整信息,用于确认更新后的内容。

(五)、发送DELETE请求删除待办事项

  1. 将请求方法切换为"DELETE"。
  2. 在地址栏输入"{{base_url}}/todos/{id}",使用要删除的待办事项的ID。例如,"http://localhost:3000/todos/3"。
  3. 点击"Send"按钮。
  4. 查看响应:
    • 状态码应该是204(表示删除成功,且无内容返回)。
    • 为了验证是否真的删除,可以再次发送一个GET请求获取待办事项列表,确认刚才删除的事项已经不存在。

通过这个入门示例,你可以初步了解如何在Postman中发送不同类型的HTTP请求来测试API,并且观察和分析响应结果,从而更好地理解API的功能和行为。

四、管理用例

  1. 用例组织:集合(Collections)和文件夹(Folders)
    • 集合(Collections)
      • 定义与创建:集合是Postman中用于组织API请求的基本单位。它就像是一个项目文件夹,将相关的API测试用例放在一起。可以通过点击Postman左侧边栏的"Collections"旁边的"+"号来创建一个新集合。在创建时,需要为集合命名,这个名字应该能够反映集合中API请求的主题或功能,比如"电商系统API测试"或"用户认证接口测试"。
      • 添加请求到集合:创建好集合后,可以将已有的请求添加到集合中。方法是在请求编辑界面,点击"Save"按钮,然后在弹出的对话框中选择要保存到的集合。也可以直接将请求从"History"(历史记录)拖放到相应的集合中。每个集合可以包含多个API请求,这些请求共同构成了针对某一特定功能或系统的完整测试用例集。
    • 文件夹(Folders)
      • 在集合中创建文件夹:为了更好地组织集合中的请求,可以在集合内部创建文件夹。在一个集合中,点击"..."(更多操作)按钮,然后选择"Add Folder"来创建文件夹。文件夹的名字可以根据具体的功能模块或者业务逻辑来命名,例如在"电商系统API测试"集合中,可以创建"商品管理""订单管理""用户管理"等文件夹,将对应的API请求分别放入这些文件夹中。
      • 移动和管理请求在文件夹之间的位置:通过拖拽操作,可以方便地将请求在不同文件夹之间移动,或者在文件夹和集合根目录之间移动。这样可以根据测试的重点和流程,灵活地调整用例的组织方式。例如,当发现某个请求在功能上更适合归属于另一个文件夹时,可以直接将其拖拽过去。
  1. 用例执行:运行集合(Run Collections)
    • 批量执行
      • 选中一个集合或者一个文件夹后,点击"Run"按钮,就可以启动对集合或文件夹中所有请求的批量执行。在运行之前,可以对运行设置进行配置,包括选择运行的环境、迭代次数、延迟时间等。例如,如果要对一个包含多个用户注册请求的集合进行测试,可以设置迭代次数为3,模拟3次用户注册操作,并且设置适当的延迟时间,以避免请求过于频繁导致服务器压力过大或者出现异常。
      • 在运行过程中,Postman会逐个发送集合中的请求,并在界面上显示每个请求的执行情况,包括请求名称、请求方法、URL、状态码、响应时间等信息。这可以帮助测试人员快速了解整个集合测试的结果,发现可能存在的问题。
    • 执行顺序和控制
      • 请求在集合中的顺序决定了它们的执行顺序。可以通过在集合中上下拖动请求来调整顺序。在某些情况下,需要按照特定的业务流程来执行请求,比如先登录获取令牌,然后使用令牌进行其他接口的访问。通过合理安排请求顺序,可以更好地模拟真实的用户操作和业务场景。
  1. 用例编辑:更新请求和用例参数
    • 修改请求参数
      • 在集合中的每个请求都可以随时进行编辑。可以修改请求方法、URL、请求头、请求体等内容。例如,如果API的端点发生了变化,需要更新请求的URL;或者根据新的业务逻辑,需要调整请求体中的参数格式。在编辑过程中,还可以利用变量(环境变量、全局变量)来使请求更加灵活和可维护。
      • 对于参数化测试,可以在请求中引用变量,然后通过更新变量的值来改变测试用例的输入。比如,在一个用户登录测试用例中,将用户名和密码设置为变量,通过更新这些变量的值,可以轻松地测试不同用户的登录情况。
    • 更新断言
      • 断言是验证API响应是否符合预期的关键部分。在集合中的请求,可以随时更新断言脚本。可以根据API功能的变化或者更严格的测试要求,添加、删除或修改断言。例如,最初只验证响应状态码是否为200,随着测试的深入,可能需要增加对响应体中特定数据字段的验证,如验证返回的用户信息是否包含正确的姓名和邮箱。
  1. 用例共享和协作
    • 导出和导入集合
      • Postman允许将集合导出为不同的格式,如JSON格式。通过点击集合旁边的"..."(更多操作)按钮,选择"Export"来导出集合。导出后的文件可以方便地分享给其他团队成员。其他成员可以通过点击"Import"按钮,将集合导入到自己的Postman环境中,从而实现用例的共享。这在团队协作和跨部门测试中非常有用,例如,开发团队可以将API接口测试用例集合提供给测试团队,让测试团队快速上手进行测试。
      • 在导入集合时,还可以选择是否覆盖已有的同名集合或者请求,以及如何处理环境变量等内容。
    • 团队协作功能(使用Postman云服务)
      • 如果团队成员都使用Postman账户登录,并且开启了团队协作功能(通过Postman云服务),可以在团队空间中共享集合。这样,团队成员可以实时同步集合的更新,并且可以在集合上进行评论和协作。例如,测试人员在测试过程中发现问题,可以在共享集合的请求上添加评论,开发人员可以直接查看评论并进行反馈和修复。这种协作方式提高了团队沟通的效率,减少了因为信息不对称导致的问题。

五、Postman断言

  • 定义和作用
    • 断言是在Postman中用于验证API响应是否符合预期的一种机制。它通过编写测试脚本来检查响应的各个方面,如状态码、响应头、响应体中的数据等。当发送一个请求后,Postman会执行断言脚本,如果所有断言都通过,测试用例被视为通过;否则,测试用例失败。这有助于确保API的功能正确性和稳定性。
  • 常用断言方法
    • 状态码断言
      • 可以使用pm.test()函数结合pm.expect()来检查响应状态码。例如,pm.test("Status code should be 200", function () {pm.expect(pm.response.code).to.equal(200);});。这里定义了一个测试名称为"Status code should be 200"的断言,检查响应状态码是否等于200。
    • 响应头断言
      • 检查响应头中的特定字段。例如,要检查Content - Type是否为application/json,可以使用pm.test("Content - Type is application/json", function () {pm.expect(pm.response.headers.get("Content - Type")).to.equal("application/json");});。这会在响应头中查找Content - Type字段,并验证其值是否符合预期。
    • 响应体断言(JSON数据)
      • 当响应体是JSON格式时,可以深入检查其中的数据。例如,假设响应体是一个包含用户信息的JSON对象,如{"id": 1, "name": "John", "email": "john@example.com"},可以使用pm.test("User name should be John", function () {pm.expect(pm.response.json().name).to.equal("John");});来验证name字段的值是否为"John"。还可以使用更复杂的断言,如检查数组长度、对象属性是否存在等。

六、全局变量

  • 定义和作用
    • 全局变量是在Postman中定义的可以在所有请求、脚本和环境中访问的变量。它提供了一种跨请求共享数据的方式,方便在不同的API测试场景中使用相同的数据。例如,可以定义一个全局变量用于存储API的通用认证令牌,这样在多个需要认证的请求中都可以使用这个令牌。
  • 设置和使用全局变量
    • 设置全局变量:可以在"Manage Environments"对话框中的"Globals"选项卡中设置全局变量。点击"Add"按钮,输入变量名(如"auth_token")和初始值(如"abc123")。
    • 使用全局变量 :在请求的URL、请求头或请求体中,可以使用双花括号{``{变量名}}来引用全局变量。例如,在请求头中设置Authorization: Bearer {``{auth_token}},这样在发送请求时,会将全局变量auth_token的值替换到请求头中。

七、环境变量

  • 定义和作用
    • 环境变量是与特定环境相关联的变量。Postman允许创建多个不同的环境,如开发环境、测试环境、生产环境等,每个环境可以有自己的一组变量。这有助于在不同的测试和部署场景中灵活地切换API的配置。例如,在开发环境中,API的基础URL可能是http://localhost:3000,而在生产环境中是https://api.example.com,通过环境变量可以方便地切换。
  • 创建和管理环境变量
    • 创建环境:点击右上角的"Manage Environments"按钮,然后点击"Add"来创建一个新环境。给环境命名(如"Development"或"Production"),并在环境变量列表中添加变量。例如,添加一个名为"base_url"的变量,在"Initial Value"栏填写对应的环境URL。
    • 使用环境变量 :在请求的URL、请求头或请求体中,同样使用双花括号{``{变量名}}来引用环境变量。在发送请求之前,可以通过切换环境来使用不同环境下的变量值。例如,在URL中使用{``{base_url}}/api/users,当切换到不同环境时,base_url的值会自动更新,从而使请求发送到正确的API端点。

八、请求前置脚本(Pre - request Script)

  1. 定义和作用
    • 请求前置脚本是在发送请求之前执行的JavaScript脚本。它允许对请求进行动态设置,如生成动态的请求参数、修改请求头、设置变量等操作。这对于一些需要根据特定条件或数据来构建请求的场景非常有用。例如,可以在前置脚本中生成一个随机的用户ID,然后将其添加到请求参数中,用于测试API对不同用户ID的处理。
  1. 访问和编辑请求前置脚本
    • 在Postman中,打开一个请求后,你可以在请求编辑区域找到"Pre - request Script"选项卡。点击这个选项卡,就可以进入前置脚本编辑区域。在这里,你可以使用JavaScript编写在发送请求之前需要执行的脚本。
  1. 基本语法和内置对象
    • 语法规则
      • 前置脚本遵循JavaScript语法。你可以定义变量、函数,使用条件语句(如if - else)、循环语句(如for、while)等来构建复杂的脚本。例如,你可以定义一个变量来存储一个动态的参数值:var dynamicParam = 'value';
    • 内置对象
      • pm对象(Postman对象):这是Postman提供的一个核心对象,用于在脚本中与Postman的各种功能进行交互。
        • 变量操作 :使用pm.variables.set()可以设置变量。例如,如果你想设置一个名为dynamicId的变量,其值为1,可以这样写:pm.variables.set('dynamicId', 1);。这个变量可以在请求的URL、请求头或者请求体中被引用,如{``{dynamicId}}
        • 请求头操作 :通过pm.request.headers.add()可以添加请求头。假设你要添加一个自定义的请求头X - Custom - Header,其值为custom - value,可以这样写:pm.request.headers.add('X - Custom - Header', 'custom - value');
        • 环境和全局变量操作 :可以通过pm.environment.set()pm.globals.set()分别设置环境变量和全局变量。不过,需要注意的是,在实际使用中,通常先获取当前环境或全局变量的值,进行修改后再设置回去。
      • console对象 :用于在脚本执行过程中输出调试信息。例如,console.log('This is a debug message.');会在Postman的控制台(可以通过"View" - > "Show Postman Console"来查看)中输出一条调试消息。这对于检查脚本的执行情况和变量的值非常有用。
  1. 常见应用场景
    • 动态参数生成
      • 时间戳生成:在很多API请求中,需要包含一个时间戳作为参数,以确保数据的时效性或者用于验证请求的顺序等。可以在前置脚本中生成时间戳并设置为变量。例如:

      var timestamp = Date.now();
      pm.variables.set('requestTimestamp', timestamp);

      • 然后在请求的URL或者请求体中使用这个变量,如https://api.example.com/data?timestamp={``{requestTimestamp}}
      • 随机数生成 :如果需要生成一个随机的用户ID或者其他随机参数,可以使用JavaScript的Math.random()函数。例如,生成一个1到100之间的随机整数作为用户ID:

      var randomUserId = Math.floor(Math.random() * 100)+1;
      pm.variables.set('randomUserId', randomUserId);

      • 之后在请求的相关部分(如请求体{"userId": "{``{randomUserId}}"})使用这个变量来发送请求。
    • 认证信息处理
      • 获取和设置认证令牌 :如果API需要认证令牌才能访问,并且这个令牌需要在每次请求前更新或者获取。可以在前置脚本中编写代码来获取令牌。假设通过一个登录接口来获取令牌,并且返回的令牌在响应体的token字段中:

      pm.sendRequest({
      url: 'https://api.example.com/login',
      method: 'POST',
      header: 'Content - Type: application/json',
      body: {
      mode: 'raw',
      raw: '{"username": "user", "password": "password"}'
      }
      }, function (err, response) {
      if (!err && response) {
      var token = response.json().token;
      pm.variables.set('authToken', token);
      pm.request.headers.add('Authorization: Bearer'+ token);
      }
      });

      • 这段脚本首先发送一个POST请求到登录接口,使用提供的用户名和密码进行登录。如果请求成功(没有错误并且有响应),从响应体中获取令牌,将其设置为变量authToken,并且添加到请求头中,用于后续的认证。
    • 数据加密与签名
      • 数据加密 :如果API要求请求数据进行加密,可以在前置脚本中对数据进行加密处理。例如,使用一个简单的加密函数(假设已经有一个名为encryptData的函数)对请求体中的数据进行加密。假设请求体是一个包含敏感信息的JSON对象:

      var data = {
      "secretInfo": "sensitive data"
      };
      var encryptedData = encryptData(JSON.stringify(data));
      pm.variables.set('encryptedData', encryptedData);
      pm.request.body.raw = encryptedData;

      • 这里将数据转换为字符串后进行加密,将加密后的数据设置为变量,并且更新请求体为加密后的数据。
      • 数据签名 :对于一些需要签名的API请求,也可以在前置脚本中生成签名。例如,使用一个签名函数(假设为generateSignature)对请求数据和一个密钥进行签名:

      var data = {
      "data": "some data"
      };
      var secretKey = "your_secret_key";
      var signature = generateSignature(JSON.stringify(data), secretKey);
      pm.variables.set('signature', signature);
      pm.request.headers.add('X - Signature: '+ signature);

      • 生成签名后,将签名设置为变量,并添加到请求头中,用于服务器端验证请求的合法性。

九、读取外部文件实现参数化

  • 定义和作用
    • 参数化是一种将测试数据从外部数据源(如文件)读取并应用到API测试中的技术。通过读取外部文件,可以轻松地使用大量不同的测试数据来执行相同的API请求,提高测试的覆盖范围和效率。例如,可以将一组用户登录信息(用户名和密码)存储在一个CSV文件中,然后在测试用户登录API时,逐行读取文件中的数据作为请求参数,模拟多个用户的登录操作。
  • 实现方式(以CSV文件为例)
    • 准备外部文件:创建一个CSV文件,例如"user_login_data.csv",内容可以是两列,一列是用户名,一列是密码,如:

      username,password
      user1,pwd1
      user2,pwd2
      user3,pwd3

    • 在Postman中读取文件
      • 在请求前置脚本中,可以使用fs模块(Postman内置对文件系统的支持)来读取CSV文件。例如:

      var csv = require('csv-parser');
      var fs = require('fs');
      var dataArray = [];
      fs.createReadStream('user_login_data.csv')
      .pipe(csv())
      .on('data', function (data) {
      dataArray.push(data);
      })
      .on('end', function () {
      // 在这里可以使用dataArray中的数据进行参数化
      pm.variables.set('current_username', dataArray[0].username);
      pm.variables.set('current_password', dataArray[0].password);
      });

    • 上述代码首先引入了csv - parserfs模块,然后创建一个空数组dataArray。通过fs.createReadStream读取CSV文件,并使用csv()函数将其解析。当解析到每一行数据时,将数据添加到dataArray中。当读取结束后,从dataArray中取出第一行数据(可以根据需要修改索引来使用不同的数据行),并将用户名和密码分别设置为变量current_usernamecurrent_password。最后,可以在请求的URL或请求体中使用这些变量,如在请求体中设置{"username": "{``{current_username}}", "password": "{``{current_password}}"}来发送不同的用户登录数据。

十、测试报告

  1. 测试报告生成方式
    • 自动生成(通过运行集合):在Postman中,当你运行一个集合(Collections)或者一个文件夹(Folders)中的多个请求后,会自动生成一个测试报告。这个报告总结了所有请求的执行情况,包括每个请求的详细信息和整体的统计数据。
    • 使用 Newman(命令行工具)生成更详细报告:Newman是Postman的命令行工具,可以在命令行环境中运行Postman集合,并生成各种格式的详细测试报告。这对于将测试集成到持续集成/持续交付(CI/CD)管道中非常有用。例如,在自动化测试脚本中,可以使用Newman来运行测试集合,并将生成的报告保存为HTML、JSON等格式,方便后续查看和分析。
  1. 测试报告内容结构
    • 概述部分
      • 集合和环境信息:报告首先会显示被测试的集合名称、版本号(如果有)以及运行测试时所使用的环境。这有助于确定测试的范围和上下文。例如,如果你正在测试一个电商API的"订单管理"集合,报告开头会明确显示这个集合名称和对应的环境(如"测试环境")。
      • 运行统计数据:包括总请求数、成功请求数、失败请求数、请求的总时间等基本统计信息。这些数据可以让你快速了解测试的整体情况。例如,如果总请求数为10,成功请求数为8,失败请求数为2,你就可以知道大概有20%的请求出现了问题,需要进一步查看。
    • 请求详情部分
      • 请求顺序和基本信息 :按照请求在集合中的执行顺序,逐个列出每个请求的详细信息。包括请求名称、请求方法(如GET、POST等)、请求URL、请求头信息等。这部分信息可以帮助你回顾每个测试用例的具体设置。例如,对于一个用户登录请求,会显示其名称为"用户登录测试",请求方法是POST,URL是"https://api.example.com/login",以及包含用户名和密码的请求头信息。
      • 响应状态码和时间:对于每个请求,会显示服务器返回的响应状态码和响应时间。状态码可以直观地告诉你请求是否成功(如200表示成功,404表示未找到资源等),响应时间则反映了接口的性能。例如,一个获取商品列表的请求返回状态码200,响应时间为500毫秒,这表示请求成功且接口响应速度相对较快。
      • 断言结果:这是测试报告的关键部分,显示了每个请求中所设置断言的执行情况。如果断言全部通过,会显示"Tests passed";如果有断言失败,会详细列出失败的断言内容。例如,对于一个验证用户信息接口返回的用户姓名是否正确的断言,若返回的姓名与预期不符,报告中会显示类似于"断言失败:预期用户姓名为'John',实际返回'Jane'"的内容。
    • 详细响应数据(可选)
      • 在某些情况下,测试报告还可以包含每个请求的详细响应数据,如响应头和响应体。这对于深入分析接口返回的数据非常有用。例如,当你怀疑接口返回的数据格式有问题时,可以查看响应体的详细内容,确认数据是否符合接口文档的要求。不过,为了避免报告文件过大,Postman可能默认不包含详细响应数据,需要根据具体情况手动设置是否显示。
  1. 测试报告格式及用途
    • HTML格式
      • 格式特点:生成的HTML格式的测试报告具有良好的可读性,适合直接在浏览器中查看。它通常会以表格、列表等形式清晰地展示测试结果,并且可以通过链接、折叠展开等方式展示详细信息。例如,请求详情部分可能以表格形式列出每个请求的基本信息、状态码和时间,点击每个请求可以展开查看更详细的断言结果和响应数据。
      • 主要用途:在团队内部共享测试结果、向非技术人员(如项目经理、产品经理)汇报测试情况时非常方便。他们可以在浏览器中直观地了解测试的整体情况和具体问题,而不需要了解复杂的测试工具和技术细节。
    • JSON格式
      • 格式特点:JSON格式的报告是一种结构化的数据格式,便于机器读取和处理。它包含了所有测试结果的详细信息,以键值对的形式组织。例如,"requests"键对应的值是一个数组,其中每个元素包含了一个请求的详细测试结果,包括请求信息、响应信息、断言结果等。
      • 主要用途:适合用于自动化测试流程中,作为后续数据处理和分析的输入。例如,在持续集成服务器上,可以编写脚本读取JSON格式的测试报告,提取关键信息(如失败请求的数量和详情),并根据这些信息决定是否继续部署代码或者发送通知给相关人员。

十一、Newman生成测试报告

  1. 安装Newman
    • 前提条件 :确保你的系统已经安装了Node.js,因为Newman是基于Node.js运行的命令行工具。你可以从Node.js官方网站(https://nodejs.org/)下载并安装适合你操作系统的版本。
    • 安装命令 :在安装好Node.js后,打开终端(在Windows系统中是命令提示符或PowerShell,在Mac和Linux系统中是终端应用程序),使用以下命令安装Newman:npm install -g newman。这个命令会将Newman全局安装到你的系统中,-g参数表示全局安装。安装完成后,你可以在终端中通过输入newman -v来检查Newman是否安装成功并查看其版本号。
  1. 准备Postman集合和环境文件(可选)
    • 导出Postman集合:在Postman应用程序中,你需要先将想要测试的集合导出。点击集合旁边的"..."(更多操作)按钮,选择"Export",然后选择合适的格式(通常是JSON格式)来保存集合文件。这个文件包含了集合中的所有请求、文件夹、变量以及断言等信息。
    • 导出环境文件(如果需要):如果你的集合依赖于特定的环境变量,你还需要导出环境文件。在Postman中,点击右上角的"Manage Environments"按钮,选择要导出的环境,然后点击"Export"按钮,将环境文件保存为JSON格式。
  1. 运行Newman并生成报告
    • 基本命令格式newman run <collection_file_path> -e <environment_file_path> -r <report_type>。其中,<collection_file_path>是你之前导出的Postman集合文件的路径,<environment_file_path>是环境文件的路径(如果不需要环境变量,可以省略这个参数),<report_type>是你想要生成的报告类型,如htmljson等。
    • 示例 :假设你的Postman集合文件名为my_collection.json,保存在当前目录下,并且你想要生成一个HTML格式的报告,不使用环境文件,那么命令如下:newman run my_collection.json -r html。Newman会运行集合中的所有请求,并在终端中显示每个请求的执行情况,同时在当前目录下生成一个名为newman.html的HTML格式测试报告。
    • 自定义报告选项(以HTML为例)
      • 报告模板 :Newman支持使用自定义的HTML报告模板来生成更符合需求的报告。你可以从Newman的官方文档或开源社区找到合适的模板,然后使用-t <template_file_path>参数指定模板文件的路径。例如:newman run my_collection.json -r html -t my_template.html
      • 报告详细程度 :可以通过--reporter-html-export <output_file_path>参数来指定报告的详细程度和输出文件路径。例如,如果你想要生成一个包含更详细响应数据的HTML报告,可以使用这个参数来设置。
  1. 查看和使用测试报告
    • HTML报告查看:如果生成的是HTML报告,你可以直接在浏览器中打开报告文件。在浏览器中,你可以查看测试的总体情况,包括总请求数、成功请求数、失败请求数等统计信息,以及每个请求的详细信息,如请求方法、URL、响应状态码、断言结果等。这种格式的报告非常适合分享给团队成员或者非技术人员,方便他们直观地了解测试情况。
    • JSON报告处理 :对于JSON格式的报告,你可以使用编程语言(如Python、JavaScript)来读取和处理报告数据。例如,在Python中,你可以使用json模块来读取JSON文件,然后对其中的数据进行分析和提取。你可以提取失败请求的详细信息,生成自定义的测试总结,或者将报告数据集成到其他工具(如持续集成服务器)中,用于自动化的质量控制和决策过程。
相关推荐
孤客网络科技工作室4 分钟前
Python Plotly 库使用教程
python·信息可视化·plotly
悟解了4 分钟前
《数据可视化技术》上机报告
python·信息可视化·数据分析
机器学习之心7 分钟前
时序预测 | 改进图卷积+informer时间序列预测,pytorch架构
人工智能·pytorch·python·时间序列预测·informer·改进图卷积
糊涂君-Q29 分钟前
Python小白学习教程从入门到入坑------第三十一课 迭代器(语法进阶)
python·学习·程序人生·考研·职场和发展·学习方法·改行学it
天飓34 分钟前
基于OpenCV的自制Python访客识别程序
人工智能·python·opencv
取个名字真难呐43 分钟前
矩阵乘法实现获取第i行,第j列值,矩阵大小不变
python·线性代数·矩阵·numpy
技术仔QAQ1 小时前
【tokenization分词】WordPiece, Byte-Pair Encoding(BPE), Byte-level BPE(BBPE)的原理和代码
人工智能·python·gpt·语言模型·自然语言处理·开源·nlp
WangYaolove13141 小时前
请解释Python中的装饰器是什么?如何使用它们?
linux·数据库·python
宋发元2 小时前
如何使用正则表达式验证域名
python·mysql·正则表达式
XMYX-02 小时前
Python 操作 Elasticsearch 全指南:从连接到数据查询与处理
python·elasticsearch·jenkins