0


Postman:Postman脚本编写:使用Postman进行API测试与调试

Postman:Postman脚本编写:使用Postman进行API测试与调试

在这里插入图片描述

Postman基础介绍

Postman的功能与优势

Postman是一款强大的API开发工具,它不仅简化了API的测试过程,还提供了丰富的功能来帮助开发者、测试人员和API消费者进行API的构建、测试、修改和调试。以下是Postman的一些关键功能和优势:

  • API测试:Postman允许你发送各种HTTP请求(GET, POST, PUT, DELETE等),并查看响应,这使得测试API变得简单直接。
  • 自动化测试:通过Postman的集合和测试脚本功能,可以自动化API测试流程,减少重复工作,提高测试效率。
  • API调试:Postman的响应查看器和测试脚本可以帮助你快速定位API中的问题。
  • API文档:Postman可以自动生成API文档,方便团队成员理解和使用API。
  • 协作与版本控制:Postman支持团队协作,可以共享环境、集合和文档,同时与Git集成,进行版本控制。
  • 监控与集成:Postman可以监控API的性能,并与各种工具(如Jenkins, Travis CI等)集成,实现持续集成和持续部署(CI/CD)。

Postman的安装与基本界面操作

安装Postman

  1. 访问Postman的官方网站(https://www.postman.com/downloads/)。
  2. 选择适合你操作系统的版本进行下载。
  3. 安装程序后,运行Postman并创建一个账户或使用现有的账户登录。

基本界面操作

Postman的界面直观,主要分为以下几个部分:

  • 顶部菜单:包括文件、编辑、视图、集合、帮助等选项。
  • 请求构建器:位于界面的左侧,用于构建HTTP请求,包括选择请求方法、输入URL、添加头部、参数、Body和预请求脚本等。
  • 发送按钮:构建完请求后,点击发送按钮,Postman将执行请求并显示响应。
  • 响应查看器:位于界面的右侧,显示API的响应数据,包括状态码、响应头和响应体。
  • 测试脚本编辑器:在响应查看器下方,可以编写JavaScript脚本来测试API的响应。

示例:使用Postman发送一个GET请求

假设我们想要测试一个公开的天气API,获取北京的天气信息。以下是具体步骤:

  1. 打开Postman,选择GET方法。
  2. 在URL输入框中输入API的URL,例如:https://api.openweathermap.org/data/2.5/weather?q=beijing&appid=YOUR_API_KEY
  3. 点击发送按钮,Postman将执行请求并显示响应。
代码示例(JavaScript测试脚本)
// 这是一个简单的Postman测试脚本示例,用于验证响应状态码是否为200
pm.test("Status code is 200",function(){
    pm.response.to.have.status(200);});// 验证响应体中是否包含特定的字符串
pm.test("Response contains 'Beijing'",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.name).to.eql("Beijing");});

在这个示例中,我们使用了Postman的测试脚本功能来验证API的响应。首先,我们检查响应状态码是否为200,这通常表示请求成功。然后,我们解析响应体为JSON格式,并验证其中是否包含“Beijing”这个字符串,以确保我们获取的是北京的天气信息。

小结

Postman是一款功能全面的API开发工具,它简化了API测试和调试的过程,提供了自动化测试、文档生成、团队协作和监控等功能。通过本节的介绍,你已经了解了Postman的基本功能和如何使用它来发送HTTP请求和编写测试脚本。接下来,你可以进一步探索Postman的高级功能,如集合、环境变量和监控等,以更高效地进行API开发和测试。

创建与发送API请求

构建GET请求

在Postman中构建GET请求非常直观。首先,打开Postman应用并选择“New”来创建一个新的请求。在请求类型选择框中,选择“GET”。接下来,输入API的URL,例如:

https://api.example.com/data

如果API需要查询参数,你可以在URL后面添加

?

,然后输入参数名和值。例如,要获取特定用户的数据,可以这样设置:

https://api.example.com/data?userId=123

Postman还提供了一个参数构建工具,你可以在URL下方的“Params”部分添加参数。输入参数名和值,然后点击“Add”按钮。这样,你的GET请求将自动包含这些参数。

构建POST请求

构建POST请求涉及发送数据到服务器。在Postman中,创建POST请求的步骤与GET请求类似,但需要额外设置请求体。选择“POST”作为请求类型,然后输入API的URL。

在请求体部分,选择“Body”选项卡,然后选择“raw”作为输入类型。对于JSON格式的数据,选择“JSON”作为子格式,并在文本框中输入你的JSON数据。例如:

{"name":"张三","email":"[email protected]"}

确保你的JSON数据格式正确,否则服务器可能无法正确解析。

使用变量和环境

Postman允许你使用变量来动态构建请求。变量可以是任何你定义的值,例如:

pm.environment.set('baseUrl','https://api.example.com');

然后在请求URL中使用这个变量:

{{baseUrl}}/data

环境是变量的集合,可以用来存储和管理API测试中常用的值。例如,你可能有一个开发环境和一个生产环境,每个环境都有不同的API URL。在Postman中,你可以创建不同的环境,并在每个环境中设置相应的变量。

要使用环境变量,首先在Postman的左侧面板中选择“Environments”。点击“Add”按钮来创建一个新的环境,然后添加变量。例如:

Name: devBaseUrl
Value: https://dev-api.example.com

在请求中,你可以像这样引用环境变量:

{{devBaseUrl}}/data

确保在发送请求前选择正确的环境,这样Postman将使用正确的变量值。

示例:使用变量和环境发送POST请求

假设我们有一个API,用于创建新用户。我们将使用Postman的变量和环境功能来构建请求。

  1. 设置环境变量:在Postman中,我们首先设置一个环境变量baseUrl,用于存储API的URL。pm.environment.set('baseUrl','https://api.example.com');
  2. 构建POST请求:创建一个新的POST请求,URL设置为{{baseUrl}}/users。在请求体中,我们使用JSON格式输入新用户的数据:{"name":"李四","email":"[email protected]"}
  3. 发送请求并验证响应:在发送请求后,我们可以使用Postman的测试脚本来验证响应是否符合预期。例如,我们可以检查响应状态码是否为201(表示创建成功):// 测试脚本pm.test("Status code is 201",function(){ pm.response.to.have.status(201);});

通过这种方式,我们可以轻松地在不同的环境中测试API,而无需手动更改URL。同时,使用测试脚本可以自动化验证API的响应,确保API按预期工作。

以上就是在Postman中创建与发送API请求,以及如何使用变量和环境来简化测试流程的详细指南。通过这些步骤,你可以更高效地进行API测试和调试。

编写Postman测试脚本

预请求脚本的编写

预请求脚本是在Postman发送请求之前运行的脚本,主要用于设置请求的环境,如生成动态数据、修改请求头或URL参数。这些脚本使用Postman的内置JavaScript库编写,允许你执行复杂的操作来定制每个请求。

示例:生成随机用户ID

// 生成一个随机的用户ID,用于测试const userId = Math.floor(Math.random()*1000000);
pm.environment.set("randomUserId", userId);

这段脚本使用JavaScript的

Math.random()

函数生成一个随机数,然后将其设置为环境变量

randomUserId

。在请求中,你可以通过

${randomUserId}

来引用这个变量,确保每次请求都有一个唯一的用户ID。

示例:修改请求头

// 添加或修改请求头
pm.request.headers.add({key:'Authorization',value:'Bearer '+ pm.environment.get('token')});

此脚本检查环境变量

token

是否存在,并将其添加到请求头中作为

Authorization

字段的一部分。这在测试需要身份验证的API时非常有用。

测试脚本:使用Tests面板

Postman的Tests面板允许你在响应后运行脚本,以验证API的响应是否符合预期。这些脚本可以检查响应状态、响应时间、响应体中的特定值等。

示例:检查响应状态

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

这段脚本使用Postman的测试API来检查响应状态码是否为200,即成功响应。

示例:检查响应体中的特定值

// 检查响应体中是否存在特定的JSON键
pm.test("Body contains correct property",function(){const responseJson = pm.response.json();
    pm.expect(responseJson).to.have.property('userId');});

此脚本解析响应体为JSON,并使用Chai库的

expect

函数来检查响应中是否存在

userId

键。如果键不存在,测试将失败。

使用Postman集合进行批量测试

Postman集合是一组请求的集合,可以用于批量测试API。集合可以包含多个请求,每个请求可以有自己的预请求脚本和测试脚本。通过运行集合,你可以自动化测试流程,确保API在各种情况下都能正常工作。

示例:创建一个测试集合

  1. 在Postman中,创建一个新的集合。
  2. 在集合中添加多个请求,每个请求代表一个测试用例。
  3. 为每个请求编写预请求脚本和测试脚本。
集合请求示例
// 集合中的第一个请求:获取用户信息
pm.test("Get user information",function(){const responseJson = pm.response.json();
    pm.expect(responseJson).to.have.property('name');});// 集合中的第二个请求:更新用户信息
pm.test("Update user information",function(){const responseJson = pm.response.json();
    pm.expect(responseJson).to.have.property('message','User information updated');});

每个请求都有自己的测试脚本,用于验证特定的响应属性。通过这种方式,你可以确保API的每个功能点都被正确测试。

运行集合

在Postman中,你可以通过点击“Runner”来运行整个集合。在Runner中,你可以选择要运行的集合、迭代次数以及是否使用环境变量。这使得测试API的稳定性、性能和功能变得简单。

Runner设置
  • 选择集合:从下拉菜单中选择你创建的测试集合。
  • 迭代次数:设置集合运行的次数,以测试API的稳定性。
  • 环境:选择一个环境,以便在运行集合时使用特定的变量和值。

通过这些步骤,你可以自动化API测试过程,提高测试效率和准确性。

调试与优化API请求

查看和理解响应

在Postman中,API请求的响应是调试和优化过程中的关键部分。理解响应可以帮助你验证API是否按预期工作,以及如何处理可能的错误或异常。

步骤1: 发送请求

首先,构建你的API请求。在Postman中,你可以设置请求的HTTP方法(GET, POST, PUT等),输入URL,添加headers,body和参数。

例如,发送一个GET请求到`https://api.example.com/users`以获取用户列表。

步骤2: 查看响应

点击“发送”按钮后,Postman将显示API的响应。响应通常包括状态码,响应头和响应体。

状态码

状态码是HTTP响应的一部分,它表示请求的结果。例如,

200

表示成功,

404

表示未找到资源,

500

表示服务器内部错误。

响应头

响应头包含关于响应的元数据,如内容类型,缓存控制等。

响应体

响应体是API返回的实际数据。它可能是一个JSON对象,一个XML文档,或者任何其他数据格式。

步骤3: 分析响应

使用Postman的预格式化视图来分析响应体。例如,如果你的响应是JSON格式,Postman将自动格式化它,使数据更易于阅读。

// 假设API返回以下JSON数据{"users":[{"id":1,"name":"John Doe","email":"[email protected]"},{"id":2,"name":"Jane Doe","email":"[email protected]"}]}

在这个例子中,你可以检查

users

数组是否包含预期的数据,如

name

email

字段。

使用Debugger进行调试

Postman的Debugger功能可以帮助你识别和修复预请求脚本或测试脚本中的错误。

步骤1: 编写脚本

在请求的“预请求脚本”或“测试”选项卡中编写JavaScript代码。这些脚本在发送请求前或接收响应后运行。

// 示例:预请求脚本
pm.sendRequest({url: pm.environment.get("base_url")+"/login",method:"POST",header:"Content-Type: application/json",body:JSON.stringify({username:"testuser",password:"testpass"})},function(err, res){if(err){
        console.error(err);}else{
        pm.environment.set("token", res.json().token);}});

步骤2: 启用Debugger

在脚本编辑器的右上角,点击“Debugger”按钮。这将打开一个调试控制台,显示脚本的执行过程和任何错误。

步骤3: 运行并调试脚本

发送请求,观察Debugger控制台中的输出。如果脚本中有错误,Postman将高亮显示错误行并提供错误信息。

例如,如果你的脚本中引用了一个未定义的变量,Postman的Debugger将显示类似以下的错误信息:
ReferenceError: base_url is not defined

步骤4: 修复错误

根据Debugger提供的信息,修改你的脚本以修复错误。例如,确保所有引用的环境变量都已正确设置。

// 修复后的脚本
pm.sendRequest({url: pm.environment.get("base_url")+"/login",method:"POST",header:"Content-Type: application/json",body:JSON.stringify({username:"testuser",password:"testpass"})},function(err, res){if(err){
        console.error(err);}else{
        pm.environment.set("token", res.json().token);}});

处理API错误与异常

API调用可能会遇到各种错误和异常,如网络问题,服务器错误,或者数据格式不正确。在Postman中,你可以使用测试脚本来处理这些情况。

步骤1: 编写测试脚本

在请求的“测试”选项卡中编写JavaScript代码,用于验证响应是否符合预期。

// 示例:测试脚本const response = pm.response.json();
pm.test("Status code is 200",function(){
    pm.response.to.have.status(200);});

pm.test("Response time is less than 200ms",function(){
    pm.response.to.have.responseTime.lessThan(200);});

pm.test("Check if user exists",function(){const user = response.users.find(user=> user.id ===1);
    pm.expect(user).to.not.be.undefined;});

步骤2: 运行测试脚本

发送请求,Postman将自动运行你编写的测试脚本,并在“测试结果”面板中显示结果。

步骤3: 分析测试结果

检查“测试结果”面板中的输出,以确定API请求是否成功,以及响应是否符合预期。

例如,如果API返回一个状态码为`500`的响应,Postman的测试结果将显示以下信息:
Status code is 200: Failed

步骤4: 优化API请求

根据测试结果,优化你的API请求。这可能包括修改请求参数,添加错误处理代码,或者调整你的测试脚本以更准确地反映API的行为。

// 优化后的测试脚本const response = pm.response.json();
pm.test("Status code is 200 or 500",function(){
    pm.response.to.have.status([200,500]);});

pm.test("Response time is less than 500ms",function(){
    pm.response.to.have.responseTime.lessThan(500);});

pm.test("Check if user exists or error message is correct",function(){if(pm.response.code ===200){const user = response.users.find(user=> user.id ===1);
        pm.expect(user).to.not.be.undefined;}elseif(pm.response.code ===500){
        pm.expect(response.error).to.equal("Server error");}});

通过以上步骤,你可以有效地调试和优化API请求,确保它们按预期工作,并处理可能出现的任何错误或异常。

高级Postman脚本技术

使用JavaScript编写复杂脚本

在Postman中,我们可以通过编写预请求脚本和测试脚本来增强API测试的复杂性和功能性。JavaScript作为Postman脚本的执行语言,提供了丰富的库和API,使得我们可以执行各种操作,如动态设置请求参数、验证响应数据、甚至与外部服务交互。

预请求脚本示例

预请求脚本在发送请求之前执行,可以用来动态生成请求参数。例如,假设我们需要测试一个API,该API需要一个基于当前时间戳的签名作为参数。我们可以使用以下JavaScript代码来生成这个签名:

// 生成基于时间戳的签名
pm.scripts.add('pre-request',function(){var timestamp =newDate().getTime();var secretKey ='mySecretKey';// 假设这是你的密钥var signature = CryptoJS.HmacSHA256(timestamp, secretKey).toString();
    pm.request.url.query.add({key:'timestamp',value: timestamp});
    pm.request.url.query.add({key:'signature',value: signature});});

在这个例子中,我们使用了CryptoJS库来生成HMAC SHA256签名。首先,我们获取当前的时间戳,然后使用密钥和时间戳生成签名。最后,我们将这两个参数添加到请求的URL查询字符串中。

测试脚本示例

测试脚本在收到响应后执行,用于验证API的响应是否符合预期。例如,假设我们正在测试一个返回用户信息的API,我们希望确保返回的用户ID与我们发送的请求中指定的ID相匹配。我们可以使用以下JavaScript代码来实现这个验证:

// 验证响应中的用户ID
pm.scripts.add('test',function(){var jsonData = pm.response.json();var expectedUserId = pm.request.url.query.get('userId');
    pm.test('用户ID正确',function(){
        pm.expect(jsonData.userId).to.eql(expectedUserId);});});

在这个例子中,我们首先将响应转换为JSON对象,然后从请求的URL中获取预期的用户ID。我们使用

pm.test

函数来定义一个测试用例,使用

pm.expect

来验证响应中的用户ID是否与预期的ID相等。

集成与自动化:与CI/CD系统结合

Postman可以与持续集成/持续部署(CI/CD)系统集成,实现API测试的自动化。这通常涉及到将Postman的测试集合上传到CI/CD系统中,然后在每次代码提交或部署时自动运行这些测试。这样可以确保API在每次更改后仍然按预期工作,减少手动测试的负担。

Jenkins集成示例

假设你正在使用Jenkins作为CI/CD系统,你可以使用Postman的Newman工具来运行测试集合。以下是一个在Jenkinsfile中集成Newman的示例:

// Jenkinsfile
pipeline {
    agent any
    stages {stage('测试'){
            steps {
                script {def newmanResults =sh(script:'newman run "https://www.getpostman.com/collections/1234567890abcdef"', returnStdout:true)
                    echo newmanResults
                }}}}}

在这个Jenkinsfile中,我们定义了一个名为“测试”的阶段,其中使用Newman运行了一个Postman测试集合。测试集合的URL需要替换为你的实际测试集合的URL。运行结果将被输出到Jenkins的控制台中。

Postman脚本性能优化

编写高效的Postman脚本对于确保测试的快速执行和减少资源消耗至关重要。以下是一些优化Postman脚本性能的策略:

1. 使用环境变量和全局变量

环境变量和全局变量可以用来存储和重用数据,避免在每个请求中重复计算或查询相同的数据。例如,如果你的API需要一个认证令牌,你可以在预请求脚本中获取这个令牌,并将其存储为全局变量,然后在后续的请求中重用这个变量。

// 获取认证令牌并存储为全局变量
pm.scripts.add('pre-request',function(){var authResponse = pm.sendRequest({url:'https://api.example.com/auth',method:'POST',header:{'Content-Type':'application/json'},body:{mode:'raw',raw:JSON.stringify({username:'testuser',password:'testpassword'})}});var authData = authResponse.json();
    pm.globals.set('authToken', authData.token);});

2. 避免不必要的数据处理

在测试脚本中,尽量减少对大数据集的处理,特别是在循环和递归操作中。如果可能,使用小数据集进行测试,或者在脚本中过滤数据,只处理必要的部分。

3. 缓存和重用数据

对于需要多次请求相同数据的测试,考虑在第一次请求后缓存数据,然后在后续的请求中重用缓存的数据,而不是每次都重新请求。

4. 使用异步操作

在处理耗时操作时,如网络请求或文件读写,使用异步操作可以避免阻塞脚本的执行,提高脚本的响应速度。

// 异步获取数据
pm.scripts.add('pre-request',function(){
    pm.sendRequest({url:'https://api.example.com/data',method:'GET'},function(err, res){if(!err && res.code ===200){var data = res.json();
            pm.globals.set('data', data);}});});

在这个例子中,我们使用

pm.sendRequest

函数异步发送一个GET请求,然后在回调函数中处理响应。如果响应成功,我们将数据存储为全局变量,供后续请求使用。

通过遵循这些策略,你可以编写出既强大又高效的Postman脚本,从而提高API测试的效率和可靠性。

Postman脚本最佳实践

脚本编写规范

在Postman中编写脚本时,遵循一定的规范可以提高脚本的可读性和可维护性。以下是一些推荐的脚本编写规范:

  1. 使用清晰的变量命名:变量名应反映其用途,例如,如果一个变量用于存储用户ID,可以命名为userId
  2. 注释:在复杂的逻辑或关键步骤前添加注释,帮助理解脚本的目的和功能。例如:// 验证API响应中是否包含预期的用户信息pm.test("User information is present",function(){ pm.expect(pm.response.json().user).to.have.property("name");});
  3. 模块化:将脚本分解为多个小函数,每个函数负责一个特定任务。例如,可以创建一个函数来处理用户认证:functionauthenticateUser(){// 发送认证请求// 处理响应// 存储认证令牌}
  4. 错误处理:使用try-catch语句来捕获和处理可能的错误,确保脚本的健壮性:try{const responseJson = pm.response.json();// 检查响应}catch(error){ console.error("Error processing response:", error);}
  5. 日志记录:使用console.log记录关键信息,便于调试:console.log("Starting test for API endpoint:", pm.request.url);

错误处理与日志记录

错误处理

在Postman脚本中,错误处理是至关重要的,因为它可以帮助你识别和解决API调用中的问题。以下是一个错误处理的例子:

// 尝试解析JSON响应try{const responseJson = pm.response.json();// 进一步处理响应if(responseJson.error){// 如果响应中包含错误信息,记录并失败测试
        pm.test("API returned an error",function(){
            pm.expect(responseJson.error).to.be.undefined;});}}catch(error){// 如果响应无法解析为JSON,记录错误
    console.error("Failed to parse response as JSON:", error);
    pm.test("Response is not a valid JSON",function(){
        pm.response.to.have.jsonBody();});}

日志记录

日志记录可以帮助你追踪脚本的执行过程,尤其是在复杂的测试场景中。下面是一个使用日志记录的例子:

// 记录请求开始
console.log("Request started at:",newDate());// 发送请求
pm.sendRequest({url: pm.environment.get("apiUrl"),method:"POST",header:"Content-Type: application/json",body:JSON.stringify({username:"testuser",password:"test123"})},function(err, res){// 记录请求结果
    console.log("Request completed with status:", res.code);if(err){
        console.error("Error during request:", err);}});

性能测试与压力测试

性能测试

性能测试旨在评估API在不同负载下的响应时间和稳定性。在Postman中,你可以使用集合运行器来模拟并发请求,从而进行性能测试。以下是一个简单的性能测试脚本示例:

// 记录请求开始时间const startTime =newDate().getTime();// 发送请求
pm.sendRequest({url: pm.environment.get("apiUrl"),method:"GET"},function(err, res){// 计算响应时间const endTime =newDate().getTime();const responseTime = endTime - startTime;// 记录响应时间
    console.log("Response time:", responseTime,"ms");// 检查响应时间是否在可接受范围内
    pm.test("Response time is less than 500ms",function(){
        pm.expect(responseTime).to.be.below(500);});});

压力测试

压力测试用于确定API在高负载下的行为。在Postman中,你可以使用集合运行器来模拟大量并发用户。下面是一个压力测试的脚本示例:

// 定义一个函数来模拟用户请求functionsimulateUserRequest(){
    pm.sendRequest({url: pm.environment.get("apiUrl"),method:"POST",body:JSON.stringify({data:"test"})},function(err, res){if(err){
            console.error("Error during request:", err);}});}// 使用循环来模拟多个用户请求for(let i =0; i <100; i++){simulateUserRequest();}

在上述示例中,

simulateUserRequest

函数用于模拟单个用户的请求,而循环则用于模拟100个并发请求。这只是一个基本示例,实际的压力测试可能需要更复杂的设置,例如使用不同的用户凭据或在不同的时间间隔内发送请求。

通过遵循这些最佳实践,你可以编写出更高效、更健壮的Postman脚本,从而提高API测试的质量和效率。


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

“Postman:Postman脚本编写:使用Postman进行API测试与调试”的评论:

还没有评论