0


Postman:Postman API测试:Postman与Newman集成自动化测试

Postman:Postman API测试:Postman与Newman集成自动化测试

在这里插入图片描述

Postman与Newman集成自动化测试教程

简介与预备知识

Postman和Newman概述

Postman是一款强大的API开发工具,它不仅支持API的构建、测试和修改,还提供了与API交互的直观界面。Newman是Postman的命令行集合运行器,可以将Postman中的测试集合以命令行的方式运行,非常适合集成到持续集成/持续部署(CI/CD)流程中,进行自动化测试。

安装Postman和Newman

安装Postman
  1. 访问Postman官网(https://www.postman.com/downloads/)下载适合您操作系统的Postman安装包。
  2. 安装并启动Postman。
安装Newman

Newman是通过Node.js的npm包管理器进行安装的。在命令行中执行以下命令:

npminstall-g newman

安装完成后,可以通过运行

newman -h

来验证Newman是否安装成功。

创建第一个API测试

在Postman中创建API测试,首先需要构建一个请求,然后添加测试脚本,最后将请求保存到集合中。

步骤1:构建请求
  1. 打开Postman,点击“New”创建一个新的请求。
  2. 输入请求的URL,选择请求方法(如GET或POST)。
  3. 如果需要,添加请求头和请求体。

例如,我们创建一个GET请求来获取GitHub用户的信息:

  1. 在URL栏输入:https://api.github.com/users/{username}
  2. 选择GET方法。
  3. 在预请求脚本中,使用pm对象设置动态参数:
// 设置动态参数const username ='exampleUser';
pm.sendRequest({url: pm.request.url.replace('{username}', username),method:'GET'},function(err, res){if(err){
        console.error(err);}});
步骤2:添加测试脚本

在请求下方的“Tests”选项卡中,添加JavaScript脚本来验证API响应。

例如,验证响应状态码是否为200:

// 验证响应状态码
pm.test("Status code is 200",function(){
    pm.response.to.have.status(200);});
步骤3:保存到集合
  1. 点击“Save”保存请求。
  2. 选择或创建一个集合,将请求保存到集合中。

集成Newman进行自动化测试

在本地运行Newman

使用Newman运行Postman集合,可以通过以下命令:

newman run <collection-file>-e<environment-file>

其中

<collection-file>

是Postman集合的JSON文件,

<environment-file>

是环境变量的JSON文件。

例如,运行名为

my-collection.json

的集合:

newman run my-collection.json -e my-environment.json

集成到CI/CD流程

在CI/CD流程中,可以使用Newman作为API测试的一部分。例如,在Jenkins中,可以创建一个构建任务,使用Newman运行Postman集合。

Jenkins配置
  1. 在Jenkins中创建一个新的构建任务。
  2. 在“Build”步骤中,添加执行Shell命令。
  3. 输入Newman运行命令:
newman run /path/to/my-collection.json -e /path/to/my-environment.json

使用Newman报告

Newman支持生成多种格式的报告,如HTML、JSON等。这在自动化测试中非常有用,可以将测试结果可视化或集成到其他系统中。

例如,生成HTML报告:

newman run my-collection.json -e my-environment.json --reporters html --reporter-html-export report.html

总结

通过Postman构建API测试,结合Newman进行自动化运行,可以有效地集成到CI/CD流程中,提高API测试的效率和覆盖率。以上步骤和示例提供了从创建API测试到自动化运行的完整流程,帮助您快速上手Postman与Newman的集成使用。


注意:上述教程中,

exampleUser

my-collection.json

my-environment.json

等均为示例名称,实际使用时需要替换为具体的信息。

Postman基础操作

构建API请求

在Postman中构建API请求非常直观。以下步骤展示了如何创建一个GET请求来获取用户信息:

  1. 打开Postman,选择一个新的请求或从集合中选择一个。
  2. 在请求方法下拉菜单中选择GET
  3. 在URL输入框中,输入API的URL,例如:https://api.example.com/users/123
  4. 如果API需要认证,可以在Authorization标签页中设置。例如,使用Bearer Token:在Authorization标签页中选择"Type"为"Bearer Token",然后在"Token"输入框中输入你的访问令牌。
  5. 发送请求,点击Send按钮。Postman将显示API的响应。

使用变量和环境

Postman允许你使用变量和环境来动态地构建请求和测试脚本。例如,你可以使用环境变量来存储API的基URL,这样在测试不同环境(如开发、测试、生产)时,只需更改环境变量的值即可。

创建环境

  1. 点击Manage Environments按钮。
  2. 点击Add,创建一个新的环境,例如Development
  3. Variables部分,添加一个变量baseUrl,并设置其值为https://api.dev.example.com

使用变量

在请求URL中,你可以使用

{{变量名}}

来引用环境变量。例如,使用

{{baseUrl}}/users/123

作为URL,Postman将自动替换

{{baseUrl}}

Development

环境中的

baseUrl

值。

编写测试脚本

Postman的测试脚本功能允许你自动化测试API响应。使用

Tests

标签页,你可以编写JavaScript脚本来验证API的响应是否符合预期。

示例:验证响应状态码

假设你正在测试一个POST请求,用于创建一个新的用户。你希望确保API返回的状态码是201(Created)。

// 测试脚本
pm.test("Status code is 201",function(){
    pm.response.to.have.status(201);});

示例:验证响应体中的特定值

你还可以检查响应体中的特定值。例如,验证返回的用户ID是否与你发送的请求中的ID相匹配。

// 测试脚本
pm.test("User ID matches",function(){var jsonData = pm.response.json();
    pm.expect(jsonData.id).to.eql(pm.request.url.split('/').pop());});

示例:使用变量存储响应数据

你可以在测试脚本中使用变量来存储响应数据,以便在后续的请求中使用。

// 测试脚本
pm.test("Store user ID",function(){var jsonData = pm.response.json();
    pm.globals.set("userId", jsonData.id);});

在后续的请求中,你可以使用

{{userId}}

来引用这个全局变量。

通过这些基础操作,你可以开始在Postman中构建和测试API,使用变量和环境来管理动态数据,以及编写测试脚本来自动化验证过程。这为API测试和开发提供了一个强大的框架。

Newman集成与自动化测试

安装和配置Newman

Newman是一个命令行集合运行器,用于Postman集合。它允许你在持续集成服务器和各种环境中运行Postman集合,无需图形界面。下面是如何在你的系统上安装和配置Newman的步骤:

安装Newman

Newman是通过Node.js的npm包管理器分发的。确保你已经安装了Node.js和npm,然后在命令行中运行以下命令来全局安装Newman:

npminstall-g newman

配置Newman

Newman的配置主要通过命令行参数或配置文件进行。例如,你可以设置代理、环境变量、全局变量等。下面是一个使用环境变量和全局变量运行集合的例子:

newman run <collection-id>-e<environment-id>-g<globals-id>

这里的

<collection-id>

<environment-id>

<globals-id>

需要替换为你的Postman集合、环境和全局变量的实际ID。

使用Newman运行Postman集合

一旦Newman安装完成,你就可以使用它来运行Postman集合。这可以通过提供集合的JSON文件或Postman API来完成。

从JSON文件运行集合

如果你有一个Postman集合的JSON文件,你可以使用以下命令来运行它:

newman run <collection-file>-r cli

这里的

<collection-file>

是你的集合JSON文件的路径。

-r cli

参数表示你希望以命令行格式接收测试结果。

从Postman API运行集合

你也可以直接从Postman API运行集合,这需要你的Postman API密钥。下面是如何做到这一点的命令:

newman run https://api.getpostman.com/collections/<collection-id>-r cli --postman-no-color

记得替换

<collection-id>

为你的集合ID,并确保你已经设置了正确的API密钥。

生成测试报告

Newman支持多种报告格式,包括HTML、JSON和JUnit。这使得将测试结果集成到你的持续集成/持续部署(CI/CD)流程中变得容易。

生成HTML报告

要生成HTML格式的报告,你可以使用以下命令:

newman run <collection-file>-r html --reporter-html-export <report-file.html>

这里的

<collection-file>

是你的Postman集合JSON文件的路径,

<report-file.html>

是你希望保存HTML报告的文件名和路径。

生成JSON报告

生成JSON格式的报告,可以使用以下命令:

newman run <collection-file>-r json --reporter-json-export <report-file.json>

这里的

<collection-file>

是你的Postman集合JSON文件的路径,

<report-file.json>

是你希望保存JSON报告的文件名和路径。

生成JUnit报告

如果你的CI/CD工具支持JUnit格式的报告,你可以使用以下命令:

newman run <collection-file>-r junit --reporter-junit-export <report-file.xml>

这里的

<collection-file>

是你的Postman集合JSON文件的路径,

<report-file.xml>

是你希望保存JUnit报告的文件名和路径。

示例:运行集合并生成HTML报告

假设你有一个名为

my-collection.json

的Postman集合文件,你希望运行这个集合并生成一个HTML报告,可以使用以下命令:

newman run my-collection.json -r html --reporter-html-export report.html

这将运行

my-collection.json

中的测试,并将结果保存到

report.html

文件中,你可以用任何HTML兼容的浏览器打开这个文件来查看测试结果。

通过上述步骤,你可以有效地使用Newman来自动化你的Postman API测试,并生成详细的测试报告,便于分析和分享。

高级自动化测试技巧

设置测试监听器

在Postman中,测试监听器(Test Listeners)是一种高级功能,允许你在请求发送后执行自定义的JavaScript代码,以验证API响应是否符合预期。这不仅限于基本的响应状态码检查,还可以深入到响应体的结构和内容,确保API按预期工作。

代码示例:使用Postman测试监听器验证响应

假设我们正在测试一个API,该API应该返回一个包含用户信息的JSON对象。我们希望确保返回的JSON中包含

name

email

字段,并且

email

字段是一个有效的电子邮件地址。

// Postman测试脚本示例
pm.test("响应包含name和email字段",function(){var jsonData = pm.response.json();
    pm.expect(jsonData).to.have.property('name');
    pm.expect(jsonData).to.have.property('email');});

pm.test("email是有效的电子邮件地址",function(){var jsonData = pm.response.json();var email = jsonData.email;var emailRegex =/^(([^<>()$$$$\\.,;:\s@"]+(\.[^<>()$$$$\\.,;:\s@"]+)*)|(".+"))@(($$[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$$)|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    pm.expect(emailRegex.test(email)).to.be.true;});

解释

  1. 导入测试框架pm.test函数是Postman内置的测试框架的一部分,用于定义测试用例。
  2. 解析响应pm.response.json()用于解析API响应为JSON对象,以便进行进一步的检查。
  3. 使用Chai断言库pm.expect是Postman中Chai断言库的封装,用于验证响应体中的特定属性是否存在。
  4. 正则表达式验证emailRegex.test(email)使用正则表达式来检查email字段是否符合电子邮件的格式。

集成CI/CD管道

将Postman测试与持续集成/持续部署(CI/CD)管道集成,可以自动化API测试流程,确保每次代码更改后API的稳定性和功能正确性。Newman是Postman的命令行集合运行器,非常适合在CI/CD环境中运行Postman集合。

示例:使用Newman在CI/CD中运行Postman集合

假设你有一个Postman集合,名为

API-Tests

,你希望在每次代码提交后自动运行这个集合。以下是在GitHub Actions中配置Newman的示例:

# .github/workflows/postman-tests.ymlname: Postman API Tests

on:push:branches:- main

jobs:run-tests:runs-on: ubuntu-latest

    steps:-name: Checkout code
      uses: actions/checkout@v2

    -name: Run Postman collection
      uses: postman/newman-action@v1
      with:collection: ./path/to/your/API-Tests.postman_collection.json
        environment: ./path/to/your/environment.postman_environment.json
        reporters:'cli,html'htmlReporter:'./path/to/your/report.html'

解释

  1. 触发条件on.push定义了当代码推送到main分支时,自动触发测试。
  2. 运行环境runs-on.ubuntu-latest指定了测试在Ubuntu最新版本的虚拟环境中运行。
  3. Newman Action:使用GitHub Actions中的Newman Action来运行Postman集合。
  4. 指定集合和环境:通过collectionenvironment参数,指定Postman集合和环境文件的路径。
  5. 报告器reporters参数定义了测试结果的输出格式,这里使用了命令行和HTML报告。
  6. HTML报告路径htmlReporter参数指定了HTML报告的输出路径。

处理复杂的API测试场景

在处理复杂的API测试场景时,可能需要执行一系列依赖的请求,或者在多个请求之间共享数据。Postman提供了预请求脚本和测试脚本,以及环境变量和全局变量,来帮助你管理这些复杂场景。

示例:使用预请求脚本和环境变量处理依赖请求

假设你正在测试一个需要先登录才能访问的API。在访问受保护的资源之前,你需要先发送一个登录请求,获取一个访问令牌,然后在后续的请求中使用这个令牌。

// 预请求脚本:获取访问令牌
pm.sendRequest({url: pm.environment.get("loginUrl"),method:"POST",header:{"Content-Type":"application/json"},body:{mode:'raw',raw:JSON.stringify({username: pm.environment.get("username"),password: pm.environment.get("password")})}},function(err, res){if(!err && res.code ===200){var jsonData = res.json();
        pm.environment.set("accessToken", jsonData.access_token);}});// 测试脚本:访问受保护资源
pm.test("访问受保护资源",function(){
    pm.response.to.have.status(200);});

解释

  1. 预请求脚本:在发送主请求之前执行,用于获取访问令牌。
  2. 环境变量pm.environment.getpm.environment.set用于获取和设置环境变量,这里用于存储登录URL、用户名、密码和访问令牌。
  3. 发送登录请求:使用pm.sendRequest发送一个登录请求,请求体包含用户名和密码。
  4. 设置访问令牌:如果登录请求成功,将返回的访问令牌存储在环境变量中。
  5. 测试脚本:在主请求发送后执行,验证响应状态码是否为200,即资源访问成功。

通过这些高级技巧,你可以更有效地在Postman中进行API测试,确保API的稳定性和功能正确性,同时通过与CI/CD管道的集成,实现测试的自动化,提高开发效率和代码质量。

故障排除与最佳实践

常见错误与解决方案

错误1: Newman执行失败

问题描述:
在使用Newman执行Postman集合时,可能会遇到执行失败的情况,这通常与环境配置、集合格式或依赖问题有关。

解决方案:

  1. 检查环境配置: 确保Newman和Postman集合已正确安装。可以通过运行newman -v来检查Newman的版本,确保与Postman集合兼容。
  2. 验证集合格式: 使用Postman打开集合,检查是否有任何错误或警告。确保所有请求都已正确配置,包括URL、方法、头信息和请求体。
  3. 处理依赖: 如果集合中使用了环境变量或全局变量,确保在运行Newman之前,这些变量已正确设置。可以使用newman run <collection> -e <environment>来指定环境。

错误2: 测试性能低下

问题描述:
在大规模API测试中,Newman的执行速度可能变得缓慢,影响测试效率。

解决方案:

  1. 并行执行: 利用Newman的--concurrency选项来并行执行请求,提高测试速度。例如:newman run <collection>--concurrency10 这将同时执行10个请求,但需注意,过高并发可能对服务器造成压力。
  2. 优化集合: 确保Postman集合中没有不必要的请求或重复的测试。使用集合运行器的“清理”功能来移除无效的请求。
  3. 使用缓存: 如果API响应不会改变,可以使用缓存来避免重复请求,从而加快测试速度。

优化测试性能

使用并行执行

在Newman中,通过并行执行请求可以显著提高测试性能。下面是一个示例,展示如何使用并行执行来优化测试性能:

# 并行执行Postman集合
newman run <collection>--concurrency5 --delay-request 1000

在这个命令中,

--concurrency 5

表示同时执行5个请求,

--delay-request 1000

则是在每个请求之间添加1秒的延迟,以避免对服务器造成过大压力。

避免不必要的请求

在Postman集合中,仔细检查并移除任何不必要的请求或重复的测试步骤。例如,如果一个API调用在多个测试中重复,可以将其封装为一个预请求脚本或环境设置,以减少重复执行的次数。

// Postman预请求脚本示例
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 && res.code ===200){
        pm.environment.set('token', res.json().token);}});

在这个示例中,预请求脚本用于在测试开始前执行登录操作,获取token,然后将其设置为环境变量,供后续请求使用。

Postman与Newman的最佳实践

集成CI/CD流程

将Postman和Newman集成到CI/CD流程中,可以实现自动化测试,确保API在每次部署前都经过充分测试。下面是一个使用Jenkins和Newman进行集成的示例:

  1. 安装Jenkins插件: 在Jenkins中安装“Postman Collection Runner”插件。
  2. 配置Jenkins任务: 创建一个新的Jenkins任务,配置Newman运行Postman集合的命令。
  3. 触发测试: 设置Jenkins任务在代码提交或部署前自动触发Newman测试。
// Jenkinsfile示例
pipeline {
    agent any
    stages {stage('Run API Tests'){
            steps {
                script {
                    sh 'newman run <collection> -e <environment> --reporters cli,junit'}}}}}

在这个Jenkinsfile示例中,

newman run

命令用于执行Postman集合,同时指定环境和报告器,以生成测试报告。

利用环境变量和全局变量

在Postman中,环境变量和全局变量可以用于动态配置测试,使测试更加灵活和可重用。下面是一个示例,展示如何在Postman集合中使用环境变量:

// Postman请求示例{"name":"Get User","request":{"url":"{{base_url}}/users/{{user_id}}","method":"GET","header":[{"key":"Authorization","value":"Bearer {{token}}"}]}}

在这个请求中,

{{base_url}}

{{user_id}}

{{token}}

都是环境变量,它们在测试执行前被动态替换,使得测试可以适应不同的环境和场景。

生成测试报告

使用Newman时,可以生成详细的测试报告,便于分析测试结果和追踪问题。下面是一个示例,展示如何使用Newman生成HTML格式的测试报告:

# 生成HTML测试报告
newman run <collection>-e<environment>--reporters cli,html --reporter-html-export <report.html>

在这个命令中,

--reporters cli,html

表示同时使用命令行和HTML格式的报告器,

--reporter-html-export <report.html>

则用于指定HTML报告的输出位置。

通过遵循上述故障排除与最佳实践,可以有效提高Postman和Newman在API测试中的效率和可靠性,确保API的稳定性和性能。

Postman与Newman集成自动化测试教程

回顾关键概念

在开始深入自动化测试项目之前,让我们先回顾几个关键概念,这些概念对于理解Postman与Newman如何协同工作至关重要。

1. Postman

  • Postman是一个强大的API开发工具,允许开发者构建、测试和修改API请求。
  • 它提供了一个直观的界面,可以轻松地创建HTTP请求,查看响应,以及管理API测试用例。
  • 集合是Postman中的一个核心概念,用于组织和存储一系列API请求,可以包含多个请求、测试脚本和环境变量。

2. Newman

  • Newman是Postman的命令行集合运行器,可以用于在持续集成/持续部署(CI/CD)管道中运行Postman集合。
  • 它允许在无头环境中执行Postman集合,非常适合自动化测试和集成测试。
  • Newman可以生成详细的测试报告,支持多种输出格式,如HTML、JSON等。

3. 环境变量

  • 在Postman中,环境变量用于存储和管理API测试中常用的变量,如URL、API密钥等。
  • 这些变量可以在请求中动态引用,使得测试更加灵活和可重用。

4. 预请求脚本和测试脚本

  • 预请求脚本在Postman请求发送之前执行,可以用于设置请求头、修改请求体等。
  • 测试脚本在请求响应后执行,用于验证API响应是否符合预期,通常使用Chai或Mocha等断言库。

扩展学习资源

为了更深入地学习Postman与Newman的集成自动化测试,以下是一些推荐的学习资源:

  • Postman官方文档:提供了详细的指南和API参考,是学习Postman功能的首选资源。
  • Newman官方文档:详细介绍了Newman的安装、使用和高级功能,包括如何在CI/CD管道中集成Newman。
  • Postman社区论坛:一个活跃的社区,可以找到其他用户的经验分享和解决方案。
  • GitHub上的Postman和Newman示例项目:通过实际项目学习如何使用Postman和Newman进行自动化测试。

开始自动化测试项目

步骤1:创建Postman集合

首先,我们需要在Postman中创建一个集合,用于组织我们的API测试用例。以下是一个简单的示例,我们将创建一个集合来测试一个假设的用户API。

1. 打开Postman,创建一个新的集合。
2. 在集合中添加请求,例如`GET /users`和`POST /users`。
3. 为每个请求添加预请求脚本和测试脚本。
示例:测试脚本
// 测试脚本示例
pm.test("Status code is 200",function(){
    pm.response.to.have.status(200);});

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

pm.test("Body contains user data",function(){var jsonData = pm.response.json();
    pm.expect(jsonData).to.have.property('id');
    pm.expect(jsonData).to.have.property('name');});

步骤2:配置环境变量

在Postman中,我们可以配置环境变量来存储API的URL、认证信息等。这使得我们的测试用例更加灵活,可以在不同的环境中运行。

1. 在Postman中,选择`Manage Environments`。
2. 创建一个新的环境,例如`Development`和`Production`。
3. 在环境中添加变量,如`baseUrl`。

步骤3:使用Newman运行集合

一旦Postman集合和环境变量配置完成,我们就可以使用Newman在命令行中运行这些集合了。

示例:Newman命令
# 在命令行中运行Postman集合
newman run "User API Tests"-e"Development"--reporters cli,html

# 解释:# `User API Tests`是Postman集合的名称。# `-e "Development"`指定使用Development环境变量。# `--reporters cli,html`表示输出格式为命令行和HTML报告。

步骤4:集成CI/CD管道

最后,为了实现持续集成和持续部署,我们需要将Newman集成到CI/CD管道中。以下是一个使用Jenkins的示例。

示例:Jenkins Job配置

在Jenkins中,创建一个新的Job,然后在构建步骤中添加执行Shell命令,如下所示:

pipeline {
    agent any
    stages {stage('Run API Tests'){
            steps {
                sh 'newman run "User API Tests" -e "Development" --reporters cli,html'}}}}

步骤5:分析测试报告

运行完Newman后,会生成测试报告。这些报告可以帮助我们分析测试结果,识别API中的问题。

示例:HTML测试报告

Newman生成的HTML报告提供了详细的测试结果,包括每个请求的状态、响应时间、以及测试脚本的输出。

1. 打开生成的HTML报告。
2. 查看每个测试用例的状态。
3. 分析失败的测试用例,找出问题所在。

通过以上步骤,我们可以有效地使用Postman和Newman进行API的自动化测试,确保API的稳定性和可靠性。


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

“Postman:Postman API测试:Postman与Newman集成自动化测试”的评论:

还没有评论