Postman:Postman自动化测试:Postman集合与请求管理
Postman软件介绍
Postman是一款强大的API开发工具,它不仅支持API的构建、测试和修改,还提供了API自动化测试的功能。通过Postman,开发者可以轻松地创建、发送HTTP请求,管理API集合,以及执行自动化测试,极大地提高了API开发和测试的效率。
功能亮点
- 请求构建:Postman允许用户构建各种类型的HTTP请求,包括GET、POST、PUT、DELETE等,支持添加请求头、参数、认证信息等。
- 集合管理:用户可以将相关的请求组织成集合,方便管理和共享。
- 环境变量:Postman支持环境变量,可以轻松切换不同的环境,如开发、测试、生产环境。
- 自动化测试:通过编写测试脚本,Postman可以自动执行测试用例,验证API的响应是否符合预期。
- 监控与集成:Postman可以监控API的性能,与CI/CD工具集成,实现持续集成和持续部署。
安装Postman
Postman支持多种操作系统,包括Windows、macOS和Linux。安装步骤如下:
- 访问Postman官方网站(https://www.postman.com/downloads/)。
- 选择适合您操作系统的版本进行下载。
- 下载完成后,运行安装程序,按照提示完成安装。
- 启动Postman,创建您的第一个API请求。
Postman界面概览
启动Postman后,您将看到以下主要界面元素:
- 新建按钮:用于创建新的请求、集合或环境。
- 请求构建器:包括请求方法、URL、请求头、参数、认证等选项,用于构建HTTP请求。
- 发送按钮:发送构建好的请求。
- 响应区:显示API的响应结果,包括状态码、响应头和响应体。
- 测试脚本区:编写测试脚本的地方,用于自动化测试。
- 集合列表:显示所有已创建的集合,方便管理和组织请求。
- 环境变量区:管理环境变量,用于在不同环境中切换。
示例:创建一个GET请求
// 在Postman中创建一个GET请求的示例
// 1. 打开Postman,点击新建按钮,选择请求。
// 2. 在请求构建器中,选择GET方法。
// 3. 输入URL:https://jsonplaceholder.typicode.com/todos/1
// 4. 点击发送按钮,Postman将发送请求并显示响应结果。
// 响应结果示例:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
示例:创建一个POST请求
// 在Postman中创建一个POST请求的示例
// 1. 打开Postman,点击新建按钮,选择请求。
// 2. 在请求构建器中,选择POST方法。
// 3. 输入URL:https://jsonplaceholder.typicode.com/posts
// 4. 在Body选项卡中,选择raw,并设置数据类型为JSON。
// 5. 输入JSON数据:
{
"title": "foo",
"body": "bar",
"userId": 1
}
// 6. 点击发送按钮,Postman将发送请求并显示响应结果。
// 响应结果示例:
{
"id": 101,
"title": "foo",
"body": "bar",
"userId": 1
}
示例:使用环境变量
// 在Postman中使用环境变量的示例
// 1. 打开Postman,点击新建按钮,选择环境。
// 2. 创建一个环境,例如:Development。
// 3. 添加环境变量,例如:BASE_URL=https://devapi.example.com
// 4. 在请求构建器中,使用{{BASE_URL}}来引用环境变量。
// 5. 输入URL:{{BASE_URL}}/todos/1
// 6. 点击发送按钮,Postman将使用Development环境中的BASE_URL发送请求。
// 切换环境示例:
// 在Postman的顶部菜单中,选择不同的环境,例如:Production。
// 7. 更新环境变量,例如:BASE_URL=https://api.example.com
// 8. 无需修改请求中的URL,Postman会自动使用新的环境变量。
示例:编写测试脚本
// 在Postman中编写测试脚本的示例
// 1. 打开Postman,选择一个POST请求。
// 2. 在Tests选项卡中,编写测试脚本。
// 3. 示例脚本:
pm.test("Status code is 201", function () {
pm.response.to.have.status(201);
});
pm.test("Body contains correct userId", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.userId).to.eql(1);
});
// 4. 点击发送按钮,Postman将执行测试脚本并显示测试结果。
通过以上示例,您可以开始使用Postman进行API的开发和测试。Postman的强大功能和易用性使其成为API开发和测试的首选工具。
创建与管理请求
编写第一个请求
在Postman中创建请求非常直观。首先,打开Postman应用,你会看到一个主界面,其中包含一个大的输入框,用于输入URL。在URL输入框的左侧,你可以选择请求方法(GET、POST、PUT等)。下面是一个示例,展示如何创建一个GET请求:
1. 选择GET方法。
2. 在URL框中输入:`https://jsonplaceholder.typicode.com/todos/1`
3. 点击“发送”按钮。
Postman将发送请求并显示响应数据。例如,响应可能如下所示:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
请求方法详解
Postman支持多种HTTP请求方法,每种方法用于不同的HTTP操作:
- GET:用于请求访问已被URI(统一资源标识符)识别的资源。
- POST:用于传输实体到指定的资源,通常用于创建新资源。
- PUT:用于替换指定资源的当前内容。
- DELETE:用于删除指定的资源。
- PATCH:用于对资源进行局部更新。
示例:POST请求
假设我们有一个API,用于创建新的用户。下面是如何使用Postman发送POST请求的示例:
- 选择POST方法。
- 输入URL:
https://api.example.com/users
- 在“Body”选项卡中,选择“raw”,然后选择JSON格式。
- 输入以下JSON数据:
{
"name": "John Doe",
"email": "john.doe@example.com"
}
- 点击“发送”按钮。
添加请求参数
在Postman中,你可以轻松地向请求添加参数。参数可以添加到URL中(查询参数),也可以作为请求体的一部分(body参数)。
示例:查询参数
假设我们想要从API获取特定用户的信息,可以通过在URL中添加查询参数来实现。以下是如何在Postman中添加查询参数的步骤:
- 选择GET方法。
- 输入URL:
https://api.example.com/users
- 点击URL输入框后的“?”图标。
- 在弹出的参数编辑器中,添加参数
id
,值为1
。 - 点击“发送”按钮。
最终URL将看起来像这样:https://api.example.com/users?id=1
设置请求头
请求头(headers)用于传递额外的信息,如认证信息、内容类型等。在Postman中设置请求头非常简单。
示例:设置Content-Type头
假设我们正在发送一个JSON格式的POST请求,需要设置Content-Type
头为application/json
。以下是如何在Postman中设置请求头的步骤:
- 选择POST方法。
- 输入URL:
https://api.example.com/users
- 点击“Headers”选项卡。
- 在“Key”列中输入
Content-Type
,在“Value”列中输入application/json
。 - 在“Body”选项卡中,选择“raw”,然后选择JSON格式。
- 输入以下JSON数据:
{
"name": "Jane Doe",
"email": "jane.doe@example.com"
}
- 点击“发送”按钮。
通过以上步骤,你已经成功创建并发送了一个带有特定请求头的POST请求。Postman的强大之处在于它允许你轻松地管理这些请求,包括保存、组织和自动化测试。接下来,你可以探索如何使用集合来组织和运行一系列请求,以及如何使用Postman的测试脚本来自动化这些请求的验证过程。
Postman集合基础
创建集合
在Postman中,集合是组织和管理API请求的强大工具。通过创建集合,你可以将相关的请求分组,便于测试、分享和自动化。下面是如何创建一个集合的步骤:
- 打开Postman应用。
- 在左侧边栏,点击“+”图标来创建一个新的集合。
- 输入集合的名称,例如“用户管理API”。
- 点击“创建”按钮,你的新集合就建立好了。
组织与命名请求
在集合中,你可以添加多个请求。每个请求都应该有清晰的命名,以便于识别其功能。例如,对于一个用户管理API,你可以有如下请求:
GET /users
:获取所有用户列表。POST /users
:创建新用户。GET /users/{id}
:获取特定用户信息。PUT /users/{id}
:更新特定用户信息。DELETE /users/{id}
:删除特定用户。
在Postman中,你可以通过以下步骤添加请求到集合:
- 在集合下,点击“+”图标来添加新请求。
- 输入请求的名称和URL。
- 选择请求方法(GET、POST、PUT、DELETE等)。
- 根据需要添加请求头、参数或请求体。
- 点击“发送”按钮来测试请求。
使用集合进行批量请求
Postman集合不仅可以帮助你组织请求,还可以通过Runner或Newman工具进行批量请求,这对于自动化测试特别有用。下面是如何使用Postman Runner进行批量请求的步骤:
- 打开你的集合。
- 在集合顶部,点击“Runner”图标。
- 选择你想要运行的请求,可以是整个集合或部分请求。
- 设置运行次数和延迟时间(如果需要)。
- 点击“运行”按钮,Postman将按顺序执行你选择的请求,并显示结果。
示例:使用Newman运行集合
Newman是一个命令行集合运行器,可以用于CI/CD管道中。下面是一个使用Newman运行Postman集合的示例命令:
newman run "用户管理API" -e "环境变量" -r cli
"用户管理API"
:这是集合的名称。-e "环境变量"
:指定环境变量文件,用于请求中的变量替换。-r cli
:指定报告格式,这里使用的是命令行报告。
解释
在这个示例中,我们使用Newman命令行工具来运行名为“用户管理API”的Postman集合。我们还指定了一个环境变量文件,这在测试不同环境(如开发、测试或生产)时非常有用。最后,我们选择了命令行报告格式,这意味着Newman将在控制台中输出测试结果。
通过这种方式,你可以轻松地将Postman集合集成到自动化测试流程中,确保API在不同环境下的稳定性和可靠性。
以上内容详细介绍了如何在Postman中创建集合、组织与命名请求,以及如何使用集合进行批量请求,包括使用Newman工具的示例。这将帮助你更有效地管理和测试API。
环境与全局变量
环境变量的概念
在Postman中,环境变量允许你存储和管理API测试中常用的数据,如URL、端点、认证信息等。这些变量可以在请求中动态引用,从而简化了测试流程,提高了效率。环境变量对于自动化测试尤为重要,因为它可以确保在不同环境(如开发、测试、生产)下运行测试时,请求参数能够自动适应环境变化,无需手动修改。
创建与管理环境
创建环境
- 在Postman的左侧面板,点击“Manage Environments”。
- 点击“Add”按钮,输入环境名称,例如“Development”。
- 在环境变量编辑器中,添加变量,如
base_url
,并为其分配一个值,例如https://dev.example.com/api
。
管理环境
- 切换环境:在Postman的请求构建器上方,选择不同的环境。
- 编辑环境:在环境列表中,点击环境名称右侧的编辑图标,可以修改变量值或添加新变量。
- 删除环境:点击环境名称右侧的删除图标,确认后即可删除环境。
示例:创建环境并设置变量
环境名称: Development
变量:
- base_url: https://dev.example.com/api
- auth_token: 1234567890abcdef
使用环境变量
在请求的URL、头信息或请求体中,可以使用双大括号{{variable_name}}
来引用环境变量。例如,构建一个请求URL:
URL: {{base_url}}/users
使用全局变量
全局变量与环境变量类似,但它们的作用范围更广,可以在所有环境中使用。全局变量适用于那些在所有环境都保持不变的数据,如API版本号或常量。
创建全局变量
- 在Postman的左侧面板,点击“Globals”。
- 点击“Add”按钮,输入全局变量名称,例如
api_version
。 - 为其分配一个值,例如
v1
。
示例:创建全局变量并引用
全局变量名称: api_version
值: v1
在请求中引用全局变量:
URL: https://api.example.com/{{api_version}}/users
管理全局变量
- 编辑全局变量:在“Globals”面板中,直接修改变量值。
- 删除全局变量:在变量列表中,点击变量名称右侧的删除图标。
在测试脚本中设置全局变量
Postman允许在测试脚本中动态设置全局变量,这在自动化测试中非常有用,可以基于测试结果更新全局变量的值。
// 设置全局变量
pm.environment.set("api_version", "v2");
// 在测试脚本中引用全局变量
const apiVersion = pm.globals.get("api_version");
console.log(`API版本: ${apiVersion}`);
小结
环境变量和全局变量是Postman中管理API测试数据的关键特性。环境变量适用于特定环境的配置,而全局变量则用于所有环境共享的数据。通过动态引用这些变量,可以轻松地在不同环境间切换测试,同时保持测试脚本的灵活性和可维护性。
预请求脚本与测试脚本
编写预请求脚本
预请求脚本是在Postman发送请求之前运行的脚本,主要用于设置请求的环境,如修改请求头、URL参数或请求体。这在自动化测试中非常有用,可以动态生成或修改请求数据,确保每次测试的环境一致性。
示例:使用预请求脚本来设置请求头
// 设置请求头
pm.request.headers.add({
"key": "Authorization",
"value": "Bearer " + pm.environment.get("accessToken")
});
// 修改请求头
pm.request.headers.upsert({
"key": "Content-Type",
"value": "application/json"
});
在这个例子中,我们首先添加了一个Authorization
头,其值为环境变量accessToken
。然后,我们修改了Content-Type
头,确保它为application/json
,这对于发送JSON格式的请求体是必要的。
编写测试脚本
测试脚本是在Postman接收到响应后运行的脚本,用于验证响应是否符合预期。这包括检查响应状态码、响应时间、响应体中的特定值等。
示例:使用测试脚本来检查响应状态码
// 检查响应状态码是否为200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
在这个例子中,我们定义了一个测试,检查响应的状态码是否为200,这是HTTP协议中表示成功的状态码。
示例:使用测试脚本来检查响应体中的特定值
// 检查响应体中的特定值
pm.test("Check response body", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.name).to.equal("John Doe");
});
这里,我们首先将响应体转换为JSON格式,然后使用Chai的expect
函数来检查name
字段是否等于John Doe
。
使用Chai断言库
Chai是一个流行的JavaScript断言库,它提供了丰富的API来编写清晰、可读性强的测试脚本。在Postman中,Chai可以与测试脚本结合使用,以更精细的方式验证响应。
示例:使用Chai来检查响应体中的数组长度
// 引入Chai库
const chai = require('chai');
const expect = chai.expect;
// 检查响应体中的数组长度
pm.test("Check array length in response body", function () {
var jsonData = pm.response.json();
expect(jsonData.users).to.be.an('array').that.is.lengthOf(10);
});
在这个例子中,我们首先引入了Chai库,并使用expect
函数来检查响应体中的users
字段是否是一个长度为10的数组。这展示了Chai如何帮助我们进行更复杂的断言。
通过上述示例,我们可以看到预请求脚本和测试脚本在Postman自动化测试中的重要性,以及如何使用Chai断言库来增强测试的精确度。这些脚本可以显著提高测试的效率和准确性,是Postman自动化测试不可或缺的一部分。
Postman自动化测试:运行与监控测试
运行集合
在Postman中,集合是组织和管理API请求的高效方式。它们允许你将多个请求分组,以便于测试、文档化和共享。运行集合是自动化测试的基础,它可以帮助你执行一系列请求,检查API的响应,并确保API按预期工作。
如何运行集合
- 打开Postman,选择左侧的集合列表。
- 点击你想要运行的集合。
- 在集合页面顶部,点击“Runner”按钮。
- 在Runner界面,你可以选择运行整个集合,或者集合中的特定请求。
- 设置运行次数,如果需要重复测试。
- 点击“Start Run”开始运行集合。
运行集合的高级设置
- 环境变量:在运行集合前,可以设置环境变量,这些变量可以在请求中使用,以动态改变请求的URL、header或body。
- 预请求脚本:在每个请求之前运行的JavaScript脚本,可以用来设置请求的参数,或者执行一些预处理任务。
- 测试脚本:在每个请求之后运行的JavaScript脚本,用于检查响应是否符合预期。
查看测试结果
运行集合后,Postman会显示测试结果,包括每个请求的状态、响应时间、响应数据和测试脚本的结果。
如何查看测试结果
- 在Runner界面,测试完成后,结果会自动显示。
- 结果面板会列出每个请求的执行情况,包括请求的名称、状态码、响应时间、以及测试脚本的通过或失败状态。
- 点击任何一个请求,可以查看详细的响应数据和测试脚本的输出。
分析测试结果
- 状态码:检查每个请求的HTTP状态码,确认是否为预期的200、201等成功状态。
- 响应时间:分析响应时间,确保API的性能符合要求。
- 测试脚本输出:查看测试脚本的输出,确认API的响应数据是否符合预期。
使用Newman进行CI/CD集成
Newman是Postman的命令行集合运行器,可以用于持续集成(CI)和持续部署(CD)的自动化测试流程中。通过Newman,你可以在没有图形界面的情况下运行Postman集合,非常适合在CI/CD管道中使用。
安装Newman
npm install -g newman
运行集合
newman run <collection_id> -e <environment_id> -r cli
在这个命令中:
<collection_id>
是你想要运行的集合的ID。-e <environment_id>
是可选的,用于指定运行集合时使用的环境变量。-r cli
表示输出格式为命令行界面。
集成到CI/CD管道
在CI/CD管道中,你可以将Newman的运行命令作为构建步骤的一部分。例如,在Jenkins中,你可以创建一个shell脚本任务,执行Newman的运行命令。
// Jenkinsfile 示例
pipeline {
agent any
stages {
stage('Run Tests') {
steps {
sh 'newman run <collection_id> -e <environment_id> -r cli'
}
}
}
}
在这个Jenkinsfile中,<collection_id>
和 <environment_id>
需要替换为你的Postman集合和环境的实际ID。
通过上述步骤,你可以在CI/CD流程中自动化运行Postman集合,确保API在每次部署前都经过了充分的测试。
Postman自动化测试进阶
使用Postman Runner
介绍
Postman Runner 是一个强大的工具,用于运行和管理Postman集合中的测试。它允许你批量执行请求,收集结果,并生成详细的测试报告。这对于自动化测试、持续集成和性能监控特别有用。
如何使用
-
打开Postman Runner:
- 在Postman中,选择“Runner”选项。
- 选择你想要运行的集合。
-
配置Runner:
- 环境: 选择或创建一个环境,以便在运行测试时使用特定的变量和值。
- 迭代次数: 设置集合要运行的次数。
- 延迟: 可以设置请求之间的延迟时间,这对于模拟真实用户行为或避免服务器过载很有帮助。
-
运行测试:
- 点击“Start Run”按钮开始执行测试。
-
查看结果:
- 测试完成后,Runner会显示一个结果页面,包括通过、失败和未运行的测试数量。
- 你可以下载测试报告,通常为JSON格式,用于进一步分析或与团队分享。
示例代码
// Postman测试脚本示例
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Body contains string", function () {
pm.expect(pm.response.text()).to.include("Hello World");
});
// 使用环境变量
pm.environment.set("baseUrl", "https://postman-echo.com");
// 使用全局变量
pm.globals.set("token", pm.response.json().token);
创建自动化测试报告
介绍
自动化测试报告是Postman测试结果的可视化表示,它帮助你快速了解测试的健康状况,包括哪些请求通过了测试,哪些失败了,以及失败的原因。
如何创建
-
运行测试:
- 使用Postman Runner运行你的测试集合。
-
导出测试结果:
- 在Runner的结果页面,点击“Export”按钮。
- 选择你想要的格式(如JSON、HTML等)。
-
分析报告:
- 使用Postman内置的报告查看器或第三方工具(如Jenkins、GitHub Actions等)来分析报告。
示例报告分析
假设你运行了一个包含10个请求的集合,其中8个请求通过了测试,2个请求失败。报告将显示:
- 通过的测试: 8/10
- 失败的测试: 2/10
- 失败详情: 每个失败请求的详细信息,包括预期结果与实际结果的对比。
调试与优化测试脚本
介绍
调试和优化测试脚本是确保自动化测试准确性和效率的关键步骤。这包括识别和修复脚本中的错误,以及改进脚本的性能。
调试技巧
-
使用日志:
- 在脚本中使用
console.log()
来输出变量的值或脚本的执行流程,帮助你理解脚本的行为。
- 在脚本中使用
-
断点调试:
- 在Postman中,你可以在测试脚本的任何行设置断点,然后逐行执行脚本来定位问题。
优化策略
-
减少请求:
- 优化你的测试集合,移除不必要的请求,减少测试时间。
-
使用集合变量:
- 集合变量允许你在整个测试过程中共享数据,避免重复请求相同的数据。
-
并行执行:
- 如果可能,将请求设置为并行执行,而不是顺序执行,以减少总执行时间。
示例代码
// 调试示例
console.log("Request URL: " + pm.request.url);
console.log("Response body: " + pm.response.json());
// 优化示例
// 使用集合变量存储API返回的用户ID
pm.collectionVariables.set("userId", pm.response.json().id);
// 在后续请求中使用该变量
pm.request.url = pm.collectionVariables.get("baseUrl") + "/users/" + pm.collectionVariables.get("userId");
通过以上步骤和示例,你可以更有效地使用Postman进行自动化测试,管理你的测试集合,并优化测试脚本的性能。
Postman自动化测试最佳实践
1. 集合的组织与优化
原理
在Postman中,集合是组织和管理API请求的主要方式。通过合理设计集合结构,可以提高自动化测试的效率和可维护性。最佳实践包括:
- 模块化设计:将集合分为多个小集合,每个小集合负责测试特定的功能模块。
- 环境变量管理:使用环境变量存储API的URL、认证信息等,便于在不同环境中切换测试。
- 预请求脚本:在请求前执行脚本,用于设置请求头、参数等,确保每次请求的一致性。
- 测试脚本:使用Postman的测试脚本功能,自动验证API响应,确保功能正确性。
示例
假设我们有一个API集合,用于测试用户登录功能。我们可以使用环境变量来存储API的URL,这样在测试不同环境时,只需要修改环境变量的值。
// 预请求脚本,设置请求URL
pm.environment.set("apiUrl", "https://example.com/api");
// 测试脚本,验证登录响应
pm.test("User login successful", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.success).to.be.true;
pm.expect(jsonData.user).to.have.property("id");
});
2. 请求管理与重用
原理
在自动化测试中,相同的请求可能需要在多个测试用例中使用。通过创建可重用的请求,可以减少重复工作,提高测试效率。最佳实践包括:
- 请求模板:创建请求模板,用于快速生成相似的请求。
- 全局变量:使用全局变量存储测试中需要共享的数据,如用户ID、会话令牌等。
- 集合迭代器:使用集合迭代器运行整个集合,自动处理请求间的依赖关系。
示例
创建一个全局变量,用于存储用户登录后返回的会话令牌,然后在后续的请求中使用这个令牌。
// 设置全局变量,存储会话令牌
pm.globals.set("sessionToken", pm.response.json().token);
// 后续请求中使用会话令牌
pm.request.addHeader("Authorization", "Bearer " + pm.globals.get("sessionToken"));
3. 解决常见问题
问题1:请求参数动态化
在自动化测试中,经常需要使用动态参数,如当前时间戳、随机数等。Postman提供了变量和函数,可以轻松实现参数动态化。
示例
使用Postman内置的pm.variables
和_.random
函数生成动态参数。
// 生成动态参数
var timestamp = Date.now();
var randomNumber = _.random(1000, 9999);
// 设置请求参数
pm.request.url.query.add({ key: "timestamp", value: timestamp });
pm.request.url.query.add({ key: "random", value: randomNumber });
问题2:处理API的认证
API认证是自动化测试中的常见挑战。Postman支持多种认证方式,如OAuth、Basic Auth等,可以灵活处理不同的认证需求。
示例
使用OAuth 2.0认证方式。
// 设置OAuth 2.0认证
pm.request.oauth2 = {
"url": "https://example.com/oauth/token",
"method": "POST",
"grant_type": "client_credentials",
"client_id": "your_client_id",
"client_secret": "your_client_secret"
};
4. 资源与社区支持
原理
Postman社区和官方文档是解决自动化测试中遇到问题的重要资源。通过查阅文档、参与社区讨论,可以获取最新的测试技巧和解决方案。
资源推荐
- Postman官方文档:https://learning.postman.com/docs/
- Postman社区论坛:https://community.postman.com/
- Postman官方博客:https://blog.postman.com/
社区参与
- 提问问题:在遇到具体问题时,可以详细描述问题并附上相关代码或截图,向社区求助。
- 分享经验:将自己在自动化测试中积累的经验和技巧分享给社区,帮助他人解决问题。
通过上述最佳实践和资源利用,可以有效提升Postman自动化测试的效率和质量,确保API的稳定性和可靠性。