0


Postman:Postman脚本编写:使用Tests脚本进行响应验证

Postman:Postman脚本编写:使用Tests脚本进行响应验证

在这里插入图片描述

Postman简介与安装

了解Postman的功能

Postman是一款强大的API开发工具,它允许开发者构建、测试、修改API请求,以及管理API的整个生命周期。Postman提供了直观的界面,可以轻松地创建HTTP请求,包括GET、POST、PUT、DELETE等方法,同时支持添加请求头、参数、认证信息等。此外,Postman还具备以下功能:

  • 测试脚本编写:使用Tests脚本进行响应验证,确保API按预期工作。
  • 环境变量管理:可以设置和管理环境变量,使得API请求在不同环境中(如开发、测试、生产)可以使用不同的配置。
  • 集合管理:可以将多个API请求组织成集合,方便测试和分享。
  • 自动化测试:通过Newman等工具,可以将Postman集合运行在CI/CD流程中,实现自动化测试。
  • 监控和性能测试:可以监控API的性能,进行负载测试,确保API在高负载下仍能稳定运行。

安装Postman的步骤

下载Postman

  1. 访问Postman的官方网站:https://www.postman.com/downloads/
  2. 选择适合您操作系统的版本进行下载。Postman支持Windows、macOS和Linux。

安装Postman

  1. Windows用户:- 下载完成后,双击安装文件。- 遵循安装向导的提示,选择安装位置和安装选项。- 完成安装后,启动Postman。
  2. macOS用户:- 下载完成后,打开.dmg文件。- 将Postman拖拽到您的应用程序文件夹。- 完成安装后,从应用程序文件夹启动Postman。
  3. Linux用户:- Postman提供了.deb和.rpm包,适用于Ubuntu和Fedora等发行版。- 使用终端,运行以下命令安装:sudo dpkg -i postman-linux-x64.deb- 或者对于.rpm包:sudorpm-i postman-linux-x64.rpm- 安装完成后,从应用程序菜单启动Postman。

注册和登录

  1. 打开Postman后,您将被要求注册或登录。
  2. 如果您是新用户,可以使用电子邮件地址或通过Google、GitHub账户进行注册。
  3. 注册并登录后,您可以开始使用Postman的所有功能,包括保存请求、创建集合、使用环境变量等。

快速开始

  1. 创建新请求:点击左上角的+按钮,选择HTTP方法,输入请求URL。
  2. 添加请求头和参数:在请求编辑器中,可以添加请求头、查询参数、请求体等。
  3. 发送请求:点击Send按钮,Postman将发送请求并显示响应。
  4. 编写测试脚本:在响应下方的Tests选项卡中,可以编写JavaScript脚本来验证响应数据。

通过以上步骤,您已经成功安装并初步了解了如何使用Postman。接下来,您可以深入学习如何使用Tests脚本来进行响应验证,这将帮助您确保API的稳定性和可靠性。

Postman: 使用Tests脚本进行响应验证

Tests脚本基础

Tests脚本的作用

在Postman中,Tests脚本用于自动化测试API响应,确保API按预期工作。这些脚本可以检查响应状态码、响应时间、响应体中的特定值,甚至可以执行更复杂的验证,如JSON Schema验证。Tests脚本使用Postman的内置脚本语言,通常是JavaScript,这使得测试高度可定制和灵活。

编写第一个Tests脚本

步骤1: 打开Tests面板

在Postman中发送请求后,点击“Tests”面板。如果面板不可见,可以通过点击“Code”按钮旁边的下拉箭头来找到它。

步骤2: 编写基本的Tests脚本

下面是一个简单的Tests脚本示例,用于验证API响应的状态码是否为200:

// 使用Postman的pm对象来访问响应信息
pm.test("响应状态码为200",function(){// 检查响应状态码是否为200
    pm.response.to.have.status(200);});
步骤3: 运行Tests脚本

保存脚本后,再次发送请求。Postman将自动运行Tests脚本,并在“Tests”面板中显示结果。如果脚本通过,你将看到一个绿色的勾号;如果失败,将看到一个红色的叉号,并附有失败原因的详细信息。

步骤4: 验证响应体

假设API返回一个JSON响应,其中包含一个名为

message

的字段,我们希望验证其值是否为

"Hello, World!"

。下面是如何编写这样的Tests脚本:

// 从响应体中获取JSON数据const responseJson = pm.response.json();// 验证message字段的值
pm.test("message字段的值为'Hello, World!'",function(){
    pm.expect(responseJson.message).to.eql("Hello, World!");});
步骤5: 验证响应时间

Tests脚本还可以用于验证API响应是否在预期的时间内返回。例如,如果API响应时间应小于500毫秒,可以使用以下脚本:

// 验证响应时间
pm.test("响应时间小于500毫秒",function(){
    pm.expect(pm.response.responseTime).to.be.below(500);});
步骤6: 使用集合变量

Tests脚本还可以与集合变量一起使用,以存储和重用响应中的数据。例如,如果API返回一个用户ID,我们可能希望在后续请求中使用它:

// 从响应体中获取用户IDconst userId = pm.response.json().userId;// 将用户ID存储为集合变量
pm.collectionVariables.set("userId", userId);
步骤7: 验证JSON Schema

对于更复杂的响应验证,如验证响应是否符合特定的JSON Schema,可以使用

tv4

库。首先,需要在Postman的“Pre-request Script”中加载库:

// 加载tv4库const tv4 =require('tv4');

然后,在Tests脚本中定义Schema并验证响应:

// 定义JSON Schemaconst schema ={type:"object",properties:{userId:{type:"string"},message:{type:"string"}},required:["userId","message"]};// 验证响应是否符合Schema
pm.test("响应符合JSON Schema",function(){const responseJson = pm.response.json();const isValid = tv4.validate(responseJson, schema);
    pm.expect(isValid).to.be.true;});

通过以上步骤,你可以开始在Postman中编写和运行Tests脚本来验证API响应,确保API的稳定性和可靠性。

Postman脚本编写:响应验证方法

检查响应状态码

在Postman中,使用Tests脚本检查响应状态码是确保API请求成功执行的关键步骤。状态码200表示请求成功,而400和500系列的状态码则分别表示客户端错误和服务器错误。

示例代码

// 检查响应状态码是否为200
pm.test("检查响应状态码",function(){
    pm.response.to.have.status(200);});

解释

上述代码中,

pm.test

函数用于定义一个测试用例。

pm.response.to.have.status(200)

则检查API响应的状态码是否为200。如果状态码不是200,测试将失败,并在Postman的测试结果中显示错误信息。

验证响应体内容

验证响应体内容确保API返回的数据符合预期。这包括检查特定的JSON键值、数组长度或响应中的特定文本。

示例代码

// 验证响应体中的特定键值
pm.test("验证响应体中的特定键值",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.name).to.equal("John Doe");
    pm.expect(jsonData.age).to.equal(30);});

解释

此代码示例中,

pm.response.json()

用于解析响应体为JSON格式。

pm.expect

函数则用于断言JSON数据中的

name

age

键值是否与预期相符。如果实际值与预期值不匹配,测试将失败。

使用预设函数进行验证

Postman提供了预设的测试脚本函数,可以简化常见的验证任务,如检查响应时间、响应头或响应体中的特定模式。

示例代码

// 使用预设函数检查响应时间
pm.test("响应时间小于200ms",function(){
    pm.expect(pm.response.responseTime).to.be.below(200);});// 使用预设函数检查响应头
pm.test("检查响应头Content-Type",function(){
    pm.response.to.have.header("Content-Type","application/json");});// 使用预设函数检查响应体中的模式
pm.test("响应体包含特定模式",function(){
    pm.expect(pm.response.text()).to.include("success");});

解释

  • 响应时间检查pm.expect(pm.response.responseTime).to.be.below(200)确保API响应时间不超过200毫秒。
  • 响应头检查pm.response.to.have.header("Content-Type", "application/json")验证响应头中的Content-Type是否为application/json,这是JSON数据的标准类型。
  • 响应体模式检查pm.expect(pm.response.text()).to.include("success")检查响应体文本中是否包含字符串“success”。

通过这些示例,您可以开始在Postman中编写有效的Tests脚本来验证API响应,确保您的API按预期工作。

高级Tests脚本技巧

动态参数的设置

在Postman中,动态参数的设置是通过使用Tests脚本来实现的,这允许你根据API响应动态地生成请求参数。这对于测试需要基于前一个请求结果的API序列特别有用。下面是一个示例,展示如何在Tests脚本中设置动态参数。

示例:使用响应中的数据作为下一个请求的参数

假设你正在测试一个API,它返回一个包含用户ID的JSON响应。你想要使用这个用户ID来发起下一个请求。以下是一个如何在Postman的Tests脚本中实现这一目标的示例:

// 假设API响应如下:// {//   "userId": 12345,//   "username": "JohnDoe"// }// 从响应中提取用户ID
pm.test("Set dynamic parameter 'userId'",function(){var jsonData = pm.response.json();var userId = jsonData.userId;// 将用户ID保存到Postman环境变量中,以便在后续请求中使用
    pm.environment.set("userId", userId);});

解释

  1. 提取数据:首先,我们使用pm.response.json()来解析API响应为JSON格式,然后从中提取userId
  2. 设置环境变量:使用pm.environment.set("userId", userId);将提取的userId保存到Postman的环境变量中。这样,你可以在后续的请求中通过{{userId}}来引用这个变量。

错误处理与调试

在编写Postman的Tests脚本时,错误处理和调试是确保脚本健壮性和易于维护的关键。下面的示例展示了如何在Tests脚本中添加错误处理逻辑,并使用Postman的控制台进行调试。

示例:添加错误处理和调试

假设你的Tests脚本需要检查API响应是否包含特定的字段,如果没有,应该记录错误并阻止测试的进一步执行。以下是一个示例脚本:

// 假设API响应应该包含一个名为'userId'的字段
pm.test("Check for 'userId' in response",function(){try{var jsonData = pm.response.json();
        pm.test("Response contains 'userId'",function(){if(!jsonData.userId){thrownewError("Response is missing 'userId'");}});// 如果'userId'存在,继续执行其他测试// ...}catch(error){
        console.error("An error occurred: ", error);
        pm.test.error();}});

解释

  1. 使用try-catch块:我们使用try-catch结构来捕获可能发生的任何错误。如果在try块中发生错误,catch块将执行。
  2. 错误抛出:如果响应中没有userId字段,我们通过throw new Error("Response is missing 'userId'");来抛出一个错误。
  3. 控制台输出:在catch块中,我们使用console.error来输出错误信息到Postman的控制台,这有助于调试。
  4. 标记测试失败:通过pm.test.error();来标记测试失败,这将确保测试不会在错误的情况下继续执行。

调试技巧

  • 使用Postman控制台:在Postman中,你可以通过点击“查看”->“控制台”来打开控制台,查看脚本执行时的输出和错误信息。
  • 添加日志语句:在脚本中添加console.log语句,可以帮助你跟踪脚本的执行流程和变量的值。
  • 逐步执行:在Postman中,你可以使用“运行”按钮旁边的“逐步执行”选项来逐行执行脚本,这有助于定位问题所在。

通过上述示例和解释,你已经了解了如何在Postman的Tests脚本中设置动态参数以及如何添加错误处理和调试逻辑。这些技巧将帮助你编写更强大、更健壮的测试脚本,以应对复杂的API测试场景。

实战演练:响应验证案例

创建API请求

在开始使用Postman进行响应验证之前,首先需要创建一个API请求。这通常涉及到指定请求的URL、选择请求方法(如GET、POST等)、添加必要的请求头和请求体。以下是一个使用Postman创建API请求的步骤示例:

  1. 打开Postman:启动Postman应用,进入一个新的请求或打开一个已保存的请求。
  2. 选择请求方法:在顶部的下拉菜单中选择请求方法,例如GETPOST
  3. 输入请求URL:在URL输入框中输入API的URL,例如https://api.example.com/users
  4. 添加请求头:如果API需要特定的请求头,如Content-TypeAuthorization,点击“Headers”标签,然后添加相应的键值对。
  5. 设置请求体:对于POSTPUT等请求,可能需要在请求体中发送数据。点击“Body”标签,选择合适的格式(如raw),并输入数据。

示例:创建一个POST请求

假设我们正在向一个API发送用户数据以创建新用户,请求体包含JSON格式的数据:

- **请求方法**:POST
- **URL**:https://api.example.com/users
- **请求头**:
  - `Content-Type: application/json`
- **请求体**:
  ```json
  {
    "name": "张三",
    "email": "[email protected]",
    "password": "securepassword"
  }

编写响应验证脚本

Postman的Tests脚本功能允许你编写JavaScript代码来验证API响应。这包括检查响应状态码、响应时间、响应体中的特定值等。以下是一个简单的响应验证脚本示例:

// 验证响应状态码是否为200
pm.test("响应状态码为200",function(){
    pm.response.to.have.status(200);});// 验证响应时间不超过500ms
pm.test("响应时间不超过500ms",function(){
    pm.expect(pm.response.responseTime).to.be.below(500);});// 验证响应体中包含特定的JSON值
pm.test("响应体中包含正确的用户信息",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.name).to.equal("张三");
    pm.expect(jsonData.email).to.equal("[email protected]");});

代码解释

  • pm.test函数用于定义一个测试用例,其中的字符串是测试的描述,而函数体则包含具体的验证逻辑。
  • pm.response.to.have.status(200)检查响应状态码是否为200,这是HTTP协议中表示成功的状态码。
  • pm.expect(pm.response.responseTime).to.be.below(500)验证响应时间是否低于500毫秒,这对于评估API的性能非常有用。
  • pm.response.json()将响应体转换为JSON对象,以便进行更复杂的验证。
  • pm.expect(jsonData.name).to.equal("张三")pm.expect(jsonData.email).to.equal("[email protected]")检查响应体中的nameemail字段是否与预期值相匹配。

运行并分析结果

一旦API请求和响应验证脚本设置完成,就可以运行请求并分析结果。在Postman中,这通常通过点击“Send”按钮来完成。运行后,Postman会显示响应信息以及测试脚本的结果。

分析测试结果

  • 响应状态码:检查是否如预期那样返回了正确的状态码。
  • 响应时间:查看响应时间是否符合性能要求。
  • 测试脚本输出:Postman的测试脚本会显示每个测试用例的通过或失败状态,以及任何错误信息。

示例:运行并分析结果

假设我们运行了上述创建用户的POST请求,Postman将显示响应状态码、响应时间以及测试脚本的结果。如果所有测试都通过,我们将看到绿色的勾号,表示响应符合预期。如果测试失败,Postman会显示红色的叉号,并提供失败的详细信息,帮助我们定位问题。

进一步分析

对于更复杂的API测试,可能需要分析响应体中的数据结构、验证数据的完整性或正确性,甚至可能需要与数据库进行交互来验证数据是否正确存储。这些都可以通过在Tests脚本中编写更复杂的JavaScript代码来实现。

例如,验证响应体中是否存在某个字段:

pm.test("响应体中包含id字段",function(){var jsonData = pm.response.json();
    pm.expect(jsonData).to.have.property("id");});

或者,验证响应体中的数据是否符合预期的模式:

pm.test("响应体中的数据格式正确",function(){var schema ={type:"object",properties:{id:{type:"integer"},name:{type:"string"},email:{type:"string",format:"email"}},required:["id","name","email"]};
    pm.expect(pm.response.json()).to.be.jsonSchema(schema);});

结论

通过在Postman中创建API请求、编写响应验证脚本并运行请求,你可以确保API按预期工作,响应时间符合性能要求,以及响应数据的完整性和正确性。这不仅提高了API的可靠性,也简化了API的测试流程,使得API的开发和维护更加高效。

Postman:优化Tests脚本与解决常见验证问题

优化Tests脚本的建议

1. 使用Postman内置函数

Postman提供了丰富的内置函数,如

pm.response.json()

pm.response.text()

等,用于处理响应数据。这些函数可以简化脚本,提高代码的可读性和效率。例如,验证响应是否包含特定的JSON键:

// 使用pm.response.json()获取响应的JSON数据const responseJson = pm.response.json();// 检查响应中是否存在特定的键
pm.test("Response contains 'data' key",function(){
    pm.expect(responseJson).to.have.property('data');});

2. 引入Chai断言库

Chai是一个流行的断言库,可以与Postman的Tests脚本无缝集成,提供更强大的断言能力。例如,使用Chai来验证响应状态码:

// 引入chai库const chai =require('chai');const expect = chai.expect;// 验证响应状态码是否为200
pm.test("Status code is 200",function(){expect(pm.response.code).to.equal(200);});

3. 重用代码片段

对于重复的验证逻辑,可以创建代码片段并在多个Tests脚本中重用。例如,创建一个检查响应时间的代码片段:

// 代码片段:检查响应时间functioncheckResponseTime(){const responseTime = pm.response.responseTime;
    pm.test("Response time is less than 200ms",function(){expect(responseTime).to.be.below(200);});}

然后在脚本中调用这个函数:

// 调用代码片段checkResponseTime();

4. 使用环境变量

环境变量可以存储和重用测试中的关键数据,如API端点、认证令牌等。例如,设置环境变量来存储API的URL:

// 设置环境变量
pm.environment.set("apiUrl","https://api.example.com");// 使用环境变量
pm.test("API URL is correct",function(){expect(pm.environment.get("apiUrl")).to.equal("https://api.example.com");});

解决常见验证问题

1. 处理动态响应

当响应包含动态生成的数据时,可以使用正则表达式或JSONPath来定位和验证特定值。例如,验证响应中的用户ID是否符合预期的格式:

// 使用正则表达式验证用户ID格式
pm.test("User ID format is correct",function(){const userIdPattern =/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;const userId = pm.response.json().data.userId;expect(userId).to.match(userIdPattern);});

2. 验证响应中的错误消息

当API返回错误响应时,通常会包含一个错误消息。可以编写脚本来验证这个消息是否正确。例如,验证错误消息是否为“无效的令牌”:

// 验证错误消息
pm.test("Error message is 'Invalid token'",function(){const responseJson = pm.response.json();const errorMessage = responseJson.error.message;expect(errorMessage).to.equal("Invalid token");});

3. 处理分页响应

API响应可能被分页,需要验证每一页的数据。可以使用循环和条件语句来处理这种情况。例如,验证分页响应中的每一条数据:

// 验证分页响应中的数据const responseJson = pm.response.json();const data = responseJson.data;
data.forEach(item=>{
    pm.test(`Item ${item.id} has correct format`,function(){expect(item).to.have.property('id');expect(item).to.have.property('name');expect(item).to.have.property('description');});});

4. 验证响应的HTTP头

HTTP头信息对于验证API的响应也很重要。例如,验证响应的Content-Type头是否为application/json:

// 验证Content-Type头
pm.test("Content-Type is application/json",function(){const headers = pm.response.headers;const contentType = headers.get('Content-Type');expect(contentType).to.equal('application/json');});

通过遵循上述建议和解决常见问题的方法,可以编写更高效、更可靠的Postman Tests脚本,确保API的稳定性和正确性。


本文转载自: https://blog.csdn.net/weixin_42749425/article/details/142348387
版权归原作者 kkchenjj 所有, 如有侵权,请联系我们删除。

“Postman:Postman脚本编写:使用Tests脚本进行响应验证”的评论:

还没有评论