Postman:Postman API测试:Postman与Newman集成自动化测试
Postman与Newman集成自动化测试教程
简介与预备知识
Postman和Newman概述
Postman是一款强大的API开发工具,它不仅支持API的构建、测试和修改,还提供了与API交互的直观界面。Newman是Postman的命令行集合运行器,可以将Postman中的测试集合以命令行的方式运行,非常适合集成到持续集成/持续部署(CI/CD)流程中,进行自动化测试。
安装Postman和Newman
安装Postman
- 访问Postman官网(https://www.postman.com/downloads/)下载适合您操作系统的Postman安装包。
- 安装并启动Postman。
安装Newman
Newman是通过Node.js的npm包管理器进行安装的。在命令行中执行以下命令:
npminstall-g newman
安装完成后,可以通过运行
newman -h
来验证Newman是否安装成功。
创建第一个API测试
在Postman中创建API测试,首先需要构建一个请求,然后添加测试脚本,最后将请求保存到集合中。
步骤1:构建请求
- 打开Postman,点击“New”创建一个新的请求。
- 输入请求的URL,选择请求方法(如GET或POST)。
- 如果需要,添加请求头和请求体。
例如,我们创建一个GET请求来获取GitHub用户的信息:
- 在URL栏输入:
https://api.github.com/users/{username}
- 选择GET方法。
- 在预请求脚本中,使用
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:保存到集合
- 点击“Save”保存请求。
- 选择或创建一个集合,将请求保存到集合中。
集成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配置
- 在Jenkins中创建一个新的构建任务。
- 在“Build”步骤中,添加执行Shell命令。
- 输入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请求来获取用户信息:
- 打开Postman,选择一个新的请求或从集合中选择一个。
- 在请求方法下拉菜单中选择
GET
。 - 在URL输入框中,输入API的URL,例如:
https://api.example.com/users/123
。 - 如果API需要认证,可以在
Authorization
标签页中设置。例如,使用Bearer Token:在Authorization标签页中选择"Type"为"Bearer Token",然后在"Token"输入框中输入你的访问令牌。
- 发送请求,点击
Send
按钮。Postman将显示API的响应。
使用变量和环境
Postman允许你使用变量和环境来动态地构建请求和测试脚本。例如,你可以使用环境变量来存储API的基URL,这样在测试不同环境(如开发、测试、生产)时,只需更改环境变量的值即可。
创建环境
- 点击
Manage Environments
按钮。 - 点击
Add
,创建一个新的环境,例如Development
。 - 在
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;});
解释
- 导入测试框架:
pm.test
函数是Postman内置的测试框架的一部分,用于定义测试用例。 - 解析响应:
pm.response.json()
用于解析API响应为JSON对象,以便进行进一步的检查。 - 使用Chai断言库:
pm.expect
是Postman中Chai断言库的封装,用于验证响应体中的特定属性是否存在。 - 正则表达式验证:
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'
解释
- 触发条件:
on.push
定义了当代码推送到main
分支时,自动触发测试。 - 运行环境:
runs-on.ubuntu-latest
指定了测试在Ubuntu最新版本的虚拟环境中运行。 - Newman Action:使用GitHub Actions中的Newman Action来运行Postman集合。
- 指定集合和环境:通过
collection
和environment
参数,指定Postman集合和环境文件的路径。 - 报告器:
reporters
参数定义了测试结果的输出格式,这里使用了命令行和HTML报告。 - 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);});
解释
- 预请求脚本:在发送主请求之前执行,用于获取访问令牌。
- 环境变量:
pm.environment.get
和pm.environment.set
用于获取和设置环境变量,这里用于存储登录URL、用户名、密码和访问令牌。 - 发送登录请求:使用
pm.sendRequest
发送一个登录请求,请求体包含用户名和密码。 - 设置访问令牌:如果登录请求成功,将返回的访问令牌存储在环境变量中。
- 测试脚本:在主请求发送后执行,验证响应状态码是否为200,即资源访问成功。
通过这些高级技巧,你可以更有效地在Postman中进行API测试,确保API的稳定性和功能正确性,同时通过与CI/CD管道的集成,实现测试的自动化,提高开发效率和代码质量。
故障排除与最佳实践
常见错误与解决方案
错误1: Newman执行失败
问题描述:
在使用Newman执行Postman集合时,可能会遇到执行失败的情况,这通常与环境配置、集合格式或依赖问题有关。
解决方案:
- 检查环境配置: 确保Newman和Postman集合已正确安装。可以通过运行
newman -v
来检查Newman的版本,确保与Postman集合兼容。 - 验证集合格式: 使用Postman打开集合,检查是否有任何错误或警告。确保所有请求都已正确配置,包括URL、方法、头信息和请求体。
- 处理依赖: 如果集合中使用了环境变量或全局变量,确保在运行Newman之前,这些变量已正确设置。可以使用
newman run <collection> -e <environment>
来指定环境。
错误2: 测试性能低下
问题描述:
在大规模API测试中,Newman的执行速度可能变得缓慢,影响测试效率。
解决方案:
- 并行执行: 利用Newman的
--concurrency
选项来并行执行请求,提高测试速度。例如:newman run <collection>--concurrency10
这将同时执行10个请求,但需注意,过高并发可能对服务器造成压力。 - 优化集合: 确保Postman集合中没有不必要的请求或重复的测试。使用集合运行器的“清理”功能来移除无效的请求。
- 使用缓存: 如果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进行集成的示例:
- 安装Jenkins插件: 在Jenkins中安装“Postman Collection Runner”插件。
- 配置Jenkins任务: 创建一个新的Jenkins任务,配置Newman运行Postman集合的命令。
- 触发测试: 设置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的稳定性和可靠性。
版权归原作者 kkchenjj 所有, 如有侵权,请联系我们删除。