一、Postman介绍
- 概述
- Postman是一款功能强大的API开发和测试工具。它提供了一个直观的图形界面,方便开发人员和测试人员发送各种HTTP请求,轻松地与Web服务进行交互。无论是简单的RESTful API测试,还是复杂的API工作流调试,Postman都能够很好地胜任。
- 主要功能
- 请求发送:
- 可以轻松地发送各种HTTP请求,包括GET、POST、PUT、DELETE、PATCH等方法。对于每个请求,用户可以在界面中输入请求的URL、设置请求头(Headers)和请求体(Body)。例如,在测试一个用户登录API时,可以使用POST方法,在请求体中填写用户名和密码等登录信息,发送到对应的登录接口URL。
- 响应查看与分析:
- 当发送请求后,Postman会清晰地展示服务器返回的响应。包括状态码、响应头和响应体。用户可以方便地查看响应内容,如返回的JSON数据或HTML页面。并且能够对响应数据进行格式化展示,方便阅读和分析。例如,对于一个返回商品列表的API,响应体可能是一个包含商品名称、价格、库存等信息的JSON数组,Postman可以将其格式化后清晰地展示出来。
- 环境和变量管理:
- 支持创建和管理不同的环境变量。这对于在不同的测试环境(如开发环境、测试环境、生产环境)中切换非常有用。例如,可以定义一个变量来存储API的基础URL,在不同环境下,只需要修改这个变量的值,而不需要逐个修改所有请求的URL。还可以设置全局变量和局部变量,用于存储和传递在测试过程中需要使用的数据,如用户令牌、测试数据等。
- 脚本编写:
- 允许用户在请求前后编写JavaScript脚本,实现自动化测试和动态请求。例如,可以在请求前编写脚本生成一个随机的用户ID,将其添加到请求参数中;在响应后编写脚本检查返回数据中的某个字段是否符合预期。通过脚本编写,可以扩展Postman的功能,实现更复杂的测试场景。
- 集合(Collections)和文件夹管理:
- 可以将相关的请求组织成集合,并在集合中创建文件夹来进一步分类。这有助于更好地管理和组织大量的API测试用例。例如,可以创建一个“用户管理”集合,在其中包含用户注册、登录、信息查询、修改密码等相关请求。集合还可以进行批量操作,如批量运行集合中的所有请求,方便进行回归测试。
- API文档生成:
- Postman能够根据请求的历史记录和定义自动生成API文档。这对于团队协作和API的维护非常有帮助。生成的文档可以包括API的端点(Endpoints)、请求方法、请求参数、响应格式等信息,方便其他开发人员和测试人员了解API的功能和使用方法。
- 应用场景
- API开发阶段:
- 开发人员在开发API时,可以使用Postman快速测试自己编写的接口。通过发送请求并查看响应,及时发现和解决接口实现过程中的问题,如验证接口是否按照预期的方式处理请求、返回正确的数据格式等。
- API测试阶段:
- 测试人员可以利用Postman进行全面的API功能测试。包括正常情况测试(如输入正确的参数获取正确的结果)、边界值测试(如测试接口对最大和最小允许参数值的处理)、异常情况测试(如发送错误格式的请求或超出范围的参数,检查接口的错误处理机制)等。还可以进行性能测试,通过多次发送请求并记录响应时间,来初步评估接口的性能。
- 团队协作和知识共享:
- 在团队中,开发人员和测试人员可以共享Postman的请求集合和环境配置。这使得团队成员之间能够更好地沟通和协作,新成员可以快速上手了解API的测试方法和相关配置。并且,生成的API文档也可以作为团队内部的知识资产,方便后续的维护和扩展。
二、Postman安装
- 系统要求
- Postman支持多种操作系统,包括Windows、Mac和Linux。- 对于Windows系统,需要Windows 7或更高版本,并且至少有1GB的内存和200MB的可用硬盘空间。- Mac系统要求Mac OS X 10.10或更高版本,至少1GB内存和200MB可用硬盘空间。- Linux系统的要求因不同的发行版而异,但一般要求64 - bit操作系统,至少1GB内存和200MB可用硬盘空间。
- 下载安装包
- 可以通过Postman官方网站(Postman- 在官网首页,找到“Download”按钮,点击后会根据你的操作系统自动推荐合适的安装包。如果是Windows系统,会下载一个.exe文件;Mac系统则是.dmg文件;Linux系统会提供适用于不同发行版的安装文件(如.deb或.rpm)。
- 安装过程(以Windows为例)
- 下载完成后,找到安装文件并双击运行。- 在安装向导中,按照提示逐步进行操作。首先选择安装语言,然后接受许可协议。- 可以选择安装路径,默认路径通常是
C:\Program Files\Postman
,如果需要修改,可以点击“浏览”按钮选择其他路径。- 接着,选择是否创建桌面快捷方式和开始菜单快捷方式。- 点击“安装”按钮,等待安装过程完成。安装完成后,可以选择是否立即启动Postman。
- 下载完成后,找到安装文件并双击运行。- 在安装向导中,按照提示逐步进行操作。首先选择安装语言,然后接受许可协议。- 可以选择安装路径,默认路径通常是
- 安装后配置(首次使用)
- 首次打开Postman后,可能需要进行一些初始配置。- 如果有账号,可以登录账号,这样可以同步请求集合、环境等信息到云端,方便在不同设备上使用。如果没有账号,也可以选择跳过登录。- 之后就可以开始使用Postman进行API开发和测试了。可以先熟悉一下界面布局,如左侧的请求集合栏、中间的请求编辑和响应查看区域、顶部的请求方法和URL输入栏等。
三、Postman入门示例
以下是一个使用Postman测试一个简单的“待办事项(To - Do List)”RESTful API的入门示例。假设这个API有以下几个端点:
GET /todos
:获取所有待办事项的列表。POST /todos
:创建一个新的待办事项。PUT /todos/{id}
:更新指定ID的待办事项。DELETE /todos/{id}
:删除指定ID的待办事项。
(一)、启动Postman并设置环境(可选)
- 打开Postman应用程序。
- 如果要设置环境变量(方便在不同环境下切换API的基础URL),可以点击右上角的“Manage Environments”(管理环境)按钮。
- 在弹出的“Manage Environments”对话框中,点击“Add”(添加)来创建一个新环境。例如,我们创建一个名为“Local Development”(本地开发)的环境,在“Variable”(变量)列添加一个名为“base_url”的变量,在“Initial Value”(初始值)栏填写“http://localhost:3000”(假设API在本地的3000端口运行),然后点击“Save”(保存)。
(二)、发送GET请求获取待办事项列表
- 在Postman的主界面,确保请求方法为“GET”。
- 在地址栏输入“{{base_url}}/todos”(如果设置了环境变量),或者直接输入完整的API URL,如“http://localhost:3000/todos”。
- 点击“Send”(发送)按钮。
- 查看响应:
- 状态码应该是200(假设一切正常),表示请求成功。- 响应体可能是一个JSON数组,例如
[{"id": 1, "task": "Buy groceries", "completed": false}, {"id": 2, "task": "Read a book", "completed": false}]
,其中每个对象代表一个待办事项,包含“id”(事项ID)、“task”(任务内容)和“completed”(是否完成)等字段。
- 状态码应该是200(假设一切正常),表示请求成功。- 响应体可能是一个JSON数组,例如
(三)、发送POST请求创建新的待办事项
- 将请求方法切换为“POST”。
- 在地址栏保持和之前获取列表相同的URL(“{{base_url}}/todos”或“http://localhost:3000/todos”)。
- 在“Body”(请求体)选项卡中,选择“raw”(原始数据)格式,并将数据格式设置为“JSON”。
- 在请求体中输入要创建的待办事项的信息,例如
{"task": "Exercise", "completed": false}
。 - 点击“Send”按钮。
- 查看响应:
- 状态码应该是201(表示资源成功创建)。- 响应体可能会返回刚刚创建的待办事项的完整信息,包括新生成的“id”,例如
{"id": 3, "task": "Exercise", "completed": false}
。
- 状态码应该是201(表示资源成功创建)。- 响应体可能会返回刚刚创建的待办事项的完整信息,包括新生成的“id”,例如
(四)、发送PUT请求更新待办事项
- 将请求方法切换为“PUT”。
- 在地址栏输入“{{base_url}}/todos/{id}”,其中“{id}”是要更新的待办事项的ID。例如,如果要更新刚才创建的ID为3的待办事项,就输入“http://localhost:3000/todos/3”。
- 在“Body”选项卡中,同样选择“raw”格式和“JSON”数据类型,输入更新后的待办事项信息,如
{"task": "Go for a run", "completed": false}
。 - 点击“Send”按钮。
- 查看响应:
- 状态码应该是200,表示更新成功。- 响应体可能会返回更新后的待办事项的完整信息,用于确认更新后的内容。
(五)、发送DELETE请求删除待办事项
- 将请求方法切换为“DELETE”。
- 在地址栏输入“{{base_url}}/todos/{id}”,使用要删除的待办事项的ID。例如,“http://localhost:3000/todos/3”。
- 点击“Send”按钮。
- 查看响应:
- 状态码应该是204(表示删除成功,且无内容返回)。- 为了验证是否真的删除,可以再次发送一个GET请求获取待办事项列表,确认刚才删除的事项已经不存在。
通过这个入门示例,你可以初步了解如何在Postman中发送不同类型的HTTP请求来测试API,并且观察和分析响应结果,从而更好地理解API的功能和行为。
四、管理用例
- 用例组织:集合(Collections)和文件夹(Folders)
- 集合(Collections):
- 定义与创建:集合是Postman中用于组织API请求的基本单位。它就像是一个项目文件夹,将相关的API测试用例放在一起。可以通过点击Postman左侧边栏的“Collections”旁边的“+”号来创建一个新集合。在创建时,需要为集合命名,这个名字应该能够反映集合中API请求的主题或功能,比如“电商系统API测试”或“用户认证接口测试”。- 添加请求到集合:创建好集合后,可以将已有的请求添加到集合中。方法是在请求编辑界面,点击“Save”按钮,然后在弹出的对话框中选择要保存到的集合。也可以直接将请求从“History”(历史记录)拖放到相应的集合中。每个集合可以包含多个API请求,这些请求共同构成了针对某一特定功能或系统的完整测试用例集。
- 文件夹(Folders):
- 在集合中创建文件夹:为了更好地组织集合中的请求,可以在集合内部创建文件夹。在一个集合中,点击“...”(更多操作)按钮,然后选择“Add Folder”来创建文件夹。文件夹的名字可以根据具体的功能模块或者业务逻辑来命名,例如在“电商系统API测试”集合中,可以创建“商品管理”“订单管理”“用户管理”等文件夹,将对应的API请求分别放入这些文件夹中。- 移动和管理请求在文件夹之间的位置:通过拖拽操作,可以方便地将请求在不同文件夹之间移动,或者在文件夹和集合根目录之间移动。这样可以根据测试的重点和流程,灵活地调整用例的组织方式。例如,当发现某个请求在功能上更适合归属于另一个文件夹时,可以直接将其拖拽过去。
- 用例执行:运行集合(Run Collections)
- 批量执行:
- 选中一个集合或者一个文件夹后,点击“Run”按钮,就可以启动对集合或文件夹中所有请求的批量执行。在运行之前,可以对运行设置进行配置,包括选择运行的环境、迭代次数、延迟时间等。例如,如果要对一个包含多个用户注册请求的集合进行测试,可以设置迭代次数为3,模拟3次用户注册操作,并且设置适当的延迟时间,以避免请求过于频繁导致服务器压力过大或者出现异常。- 在运行过程中,Postman会逐个发送集合中的请求,并在界面上显示每个请求的执行情况,包括请求名称、请求方法、URL、状态码、响应时间等信息。这可以帮助测试人员快速了解整个集合测试的结果,发现可能存在的问题。
- 执行顺序和控制:
- 请求在集合中的顺序决定了它们的执行顺序。可以通过在集合中上下拖动请求来调整顺序。在某些情况下,需要按照特定的业务流程来执行请求,比如先登录获取令牌,然后使用令牌进行其他接口的访问。通过合理安排请求顺序,可以更好地模拟真实的用户操作和业务场景。
- 用例编辑:更新请求和用例参数
- 修改请求参数:
- 在集合中的每个请求都可以随时进行编辑。可以修改请求方法、URL、请求头、请求体等内容。例如,如果API的端点发生了变化,需要更新请求的URL;或者根据新的业务逻辑,需要调整请求体中的参数格式。在编辑过程中,还可以利用变量(环境变量、全局变量)来使请求更加灵活和可维护。- 对于参数化测试,可以在请求中引用变量,然后通过更新变量的值来改变测试用例的输入。比如,在一个用户登录测试用例中,将用户名和密码设置为变量,通过更新这些变量的值,可以轻松地测试不同用户的登录情况。
- 更新断言:
- 断言是验证API响应是否符合预期的关键部分。在集合中的请求,可以随时更新断言脚本。可以根据API功能的变化或者更严格的测试要求,添加、删除或修改断言。例如,最初只验证响应状态码是否为200,随着测试的深入,可能需要增加对响应体中特定数据字段的验证,如验证返回的用户信息是否包含正确的姓名和邮箱。
- 用例共享和协作
- 导出和导入集合:
- Postman允许将集合导出为不同的格式,如JSON格式。通过点击集合旁边的“...”(更多操作)按钮,选择“Export”来导出集合。导出后的文件可以方便地分享给其他团队成员。其他成员可以通过点击“Import”按钮,将集合导入到自己的Postman环境中,从而实现用例的共享。这在团队协作和跨部门测试中非常有用,例如,开发团队可以将API接口测试用例集合提供给测试团队,让测试团队快速上手进行测试。- 在导入集合时,还可以选择是否覆盖已有的同名集合或者请求,以及如何处理环境变量等内容。
- 团队协作功能(使用Postman云服务):
- 如果团队成员都使用Postman账户登录,并且开启了团队协作功能(通过Postman云服务),可以在团队空间中共享集合。这样,团队成员可以实时同步集合的更新,并且可以在集合上进行评论和协作。例如,测试人员在测试过程中发现问题,可以在共享集合的请求上添加评论,开发人员可以直接查看评论并进行反馈和修复。这种协作方式提高了团队沟通的效率,减少了因为信息不对称导致的问题。
五、Postman断言
定义和作用:
- 断言是在Postman中用于验证API响应是否符合预期的一种机制。它通过编写测试脚本来检查响应的各个方面,如状态码、响应头、响应体中的数据等。当发送一个请求后,Postman会执行断言脚本,如果所有断言都通过,测试用例被视为通过;否则,测试用例失败。这有助于确保API的功能正确性和稳定性。
常用断言方法:
- 状态码断言:
- 可以使用
pm.test()
函数结合pm.expect()
来检查响应状态码。例如,pm.test("Status code should be 200", function () {pm.expect(pm.response.code).to.equal(200);});
。这里定义了一个测试名称为“Status code should be 200”的断言,检查响应状态码是否等于200。
- 可以使用
- 响应头断言:
- 检查响应头中的特定字段。例如,要检查
Content - Type
是否为application/json
,可以使用pm.test("Content - Type is application/json", function () {pm.expect(pm.response.headers.get("Content - Type")).to.equal("application/json");});
。这会在响应头中查找Content - Type
字段,并验证其值是否符合预期。
- 检查响应头中的特定字段。例如,要检查
- 响应体断言(JSON数据):
- 当响应体是JSON格式时,可以深入检查其中的数据。例如,假设响应体是一个包含用户信息的JSON对象,如
{"id": 1, "name": "John", "email": "[email protected]"}
,可以使用pm.test("User name should be John", function () {pm.expect(pm.response.json().name).to.equal("John");});
来验证name
字段的值是否为“John”。还可以使用更复杂的断言,如检查数组长度、对象属性是否存在等。
- 当响应体是JSON格式时,可以深入检查其中的数据。例如,假设响应体是一个包含用户信息的JSON对象,如
六、全局变量
定义和作用:
- 全局变量是在Postman中定义的可以在所有请求、脚本和环境中访问的变量。它提供了一种跨请求共享数据的方式,方便在不同的API测试场景中使用相同的数据。例如,可以定义一个全局变量用于存储API的通用认证令牌,这样在多个需要认证的请求中都可以使用这个令牌。
设置和使用全局变量:
- 设置全局变量:可以在“Manage Environments”对话框中的“Globals”选项卡中设置全局变量。点击“Add”按钮,输入变量名(如“auth_token”)和初始值(如“abc123”)。- 使用全局变量:在请求的URL、请求头或请求体中,可以使用双花括号
{{变量名}}
来引用全局变量。例如,在请求头中设置Authorization: Bearer {{auth_token}}
,这样在发送请求时,会将全局变量auth_token
的值替换到请求头中。
- 设置全局变量:可以在“Manage Environments”对话框中的“Globals”选项卡中设置全局变量。点击“Add”按钮,输入变量名(如“auth_token”)和初始值(如“abc123”)。- 使用全局变量:在请求的URL、请求头或请求体中,可以使用双花括号
七、环境变量
定义和作用:
- 环境变量是与特定环境相关联的变量。Postman允许创建多个不同的环境,如开发环境、测试环境、生产环境等,每个环境可以有自己的一组变量。这有助于在不同的测试和部署场景中灵活地切换API的配置。例如,在开发环境中,API的基础URL可能是
http://localhost:3000
,而在生产环境中是https://api.example.com
,通过环境变量可以方便地切换。
- 环境变量是与特定环境相关联的变量。Postman允许创建多个不同的环境,如开发环境、测试环境、生产环境等,每个环境可以有自己的一组变量。这有助于在不同的测试和部署场景中灵活地切换API的配置。例如,在开发环境中,API的基础URL可能是
创建和管理环境变量:
- 创建环境:点击右上角的“Manage Environments”按钮,然后点击“Add”来创建一个新环境。给环境命名(如“Development”或“Production”),并在环境变量列表中添加变量。例如,添加一个名为“base_url”的变量,在“Initial Value”栏填写对应的环境URL。- 使用环境变量:在请求的URL、请求头或请求体中,同样使用双花括号
{{变量名}}
来引用环境变量。在发送请求之前,可以通过切换环境来使用不同环境下的变量值。例如,在URL中使用{{base_url}}/api/users
,当切换到不同环境时,base_url
的值会自动更新,从而使请求发送到正确的API端点。
- 创建环境:点击右上角的“Manage Environments”按钮,然后点击“Add”来创建一个新环境。给环境命名(如“Development”或“Production”),并在环境变量列表中添加变量。例如,添加一个名为“base_url”的变量,在“Initial Value”栏填写对应的环境URL。- 使用环境变量:在请求的URL、请求头或请求体中,同样使用双花括号
八、请求前置脚本(Pre - request Script)
- 定义和作用
- 请求前置脚本是在发送请求之前执行的JavaScript脚本。它允许对请求进行动态设置,如生成动态的请求参数、修改请求头、设置变量等操作。这对于一些需要根据特定条件或数据来构建请求的场景非常有用。例如,可以在前置脚本中生成一个随机的用户ID,然后将其添加到请求参数中,用于测试API对不同用户ID的处理。
- 访问和编辑请求前置脚本
- 在Postman中,打开一个请求后,你可以在请求编辑区域找到“Pre - request Script”选项卡。点击这个选项卡,就可以进入前置脚本编辑区域。在这里,你可以使用JavaScript编写在发送请求之前需要执行的脚本。
- 基本语法和内置对象
- 语法规则:
- 前置脚本遵循JavaScript语法。你可以定义变量、函数,使用条件语句(如if - else)、循环语句(如for、while)等来构建复杂的脚本。例如,你可以定义一个变量来存储一个动态的参数值:
var dynamicParam = 'value';
。
- 前置脚本遵循JavaScript语法。你可以定义变量、函数,使用条件语句(如if - else)、循环语句(如for、while)等来构建复杂的脚本。例如,你可以定义一个变量来存储一个动态的参数值:
- 内置对象:
pm
对象(Postman对象):这是Postman提供的一个核心对象,用于在脚本中与Postman的各种功能进行交互。
- 变量操作:使用
pm.variables.set()
可以设置变量。例如,如果你想设置一个名为dynamicId
的变量,其值为1,可以这样写:pm.variables.set('dynamicId', 1);
。这个变量可以在请求的URL、请求头或者请求体中被引用,如{{dynamicId}}
。- 请求头操作:通过pm.request.headers.add()
可以添加请求头。假设你要添加一个自定义的请求头X - Custom - Header
,其值为custom - value
,可以这样写:pm.request.headers.add('X - Custom - Header', 'custom - value');
。- 环境和全局变量操作:可以通过pm.environment.set()
和pm.globals.set()
分别设置环境变量和全局变量。不过,需要注意的是,在实际使用中,通常先获取当前环境或全局变量的值,进行修改后再设置回去。
- 变量操作:使用
console
对象:用于在脚本执行过程中输出调试信息。例如,console.log('This is a debug message.');
会在Postman的控制台(可以通过“View” - > “Show Postman Console”来查看)中输出一条调试消息。这对于检查脚本的执行情况和变量的值非常有用。
- 常见应用场景
- 动态参数生成
- 时间戳生成:在很多API请求中,需要包含一个时间戳作为参数,以确保数据的时效性或者用于验证请求的顺序等。可以在前置脚本中生成时间戳并设置为变量。例如:
var timestamp = Date.now();
pm.variables.set('requestTimestamp', timestamp);
- 然后在请求的URL或者请求体中使用这个变量,如
https://api.example.com/data?timestamp={{requestTimestamp}}
。- 随机数生成:如果需要生成一个随机的用户ID或者其他随机参数,可以使用JavaScript的Math.random()
函数。例如,生成一个1到100之间的随机整数作为用户ID:
- 然后在请求的URL或者请求体中使用这个变量,如
var randomUserId = Math.floor(Math.random() * 100)+1;
pm.variables.set('randomUserId', randomUserId);
- 之后在请求的相关部分(如请求体
{"userId": "{{randomUserId}}"}
)使用这个变量来发送请求。
- 之后在请求的相关部分(如请求体
- 认证信息处理
- 获取和设置认证令牌:如果API需要认证令牌才能访问,并且这个令牌需要在每次请求前更新或者获取。可以在前置脚本中编写代码来获取令牌。假设通过一个登录接口来获取令牌,并且返回的令牌在响应体的
token
字段中:
- 获取和设置认证令牌:如果API需要认证令牌才能访问,并且这个令牌需要在每次请求前更新或者获取。可以在前置脚本中编写代码来获取令牌。假设通过一个登录接口来获取令牌,并且返回的令牌在响应体的
pm.sendRequest({
url: 'https://api.example.com/login',
method: 'POST',
header: 'Content - Type: application/json',
body: {
mode: 'raw',
raw: '{"username": "user", "password": "password"}'
}
}, function (err, response) {
if (!err && response) {
var token = response.json().token;
pm.variables.set('authToken', token);
pm.request.headers.add('Authorization: Bearer'+ token);
}
});
- 这段脚本首先发送一个POST请求到登录接口,使用提供的用户名和密码进行登录。如果请求成功(没有错误并且有响应),从响应体中获取令牌,将其设置为变量
authToken
,并且添加到请求头中,用于后续的认证。
- 这段脚本首先发送一个POST请求到登录接口,使用提供的用户名和密码进行登录。如果请求成功(没有错误并且有响应),从响应体中获取令牌,将其设置为变量
- 数据加密与签名
- 数据加密:如果API要求请求数据进行加密,可以在前置脚本中对数据进行加密处理。例如,使用一个简单的加密函数(假设已经有一个名为
encryptData
的函数)对请求体中的数据进行加密。假设请求体是一个包含敏感信息的JSON对象:
- 数据加密:如果API要求请求数据进行加密,可以在前置脚本中对数据进行加密处理。例如,使用一个简单的加密函数(假设已经有一个名为
var data = {
"secretInfo": "sensitive data"
};
var encryptedData = encryptData(JSON.stringify(data));
pm.variables.set('encryptedData', encryptedData);
pm.request.body.raw = encryptedData;
- 这里将数据转换为字符串后进行加密,将加密后的数据设置为变量,并且更新请求体为加密后的数据。- 数据签名:对于一些需要签名的API请求,也可以在前置脚本中生成签名。例如,使用一个签名函数(假设为
generateSignature
)对请求数据和一个密钥进行签名:
- 这里将数据转换为字符串后进行加密,将加密后的数据设置为变量,并且更新请求体为加密后的数据。- 数据签名:对于一些需要签名的API请求,也可以在前置脚本中生成签名。例如,使用一个签名函数(假设为
var data = {
"data": "some data"
};
var secretKey = "your_secret_key";
var signature = generateSignature(JSON.stringify(data), secretKey);
pm.variables.set('signature', signature);
pm.request.headers.add('X - Signature: '+ signature);
- 生成签名后,将签名设置为变量,并添加到请求头中,用于服务器端验证请求的合法性。
九、读取外部文件实现参数化
定义和作用:
- 参数化是一种将测试数据从外部数据源(如文件)读取并应用到API测试中的技术。通过读取外部文件,可以轻松地使用大量不同的测试数据来执行相同的API请求,提高测试的覆盖范围和效率。例如,可以将一组用户登录信息(用户名和密码)存储在一个CSV文件中,然后在测试用户登录API时,逐行读取文件中的数据作为请求参数,模拟多个用户的登录操作。
实现方式(以CSV文件为例):
- 准备外部文件:创建一个CSV文件,例如“user_login_data.csv”,内容可以是两列,一列是用户名,一列是密码,如:
username,password
user1,pwd1
user2,pwd2
user3,pwd3
- 在Postman中读取文件:
- 在请求前置脚本中,可以使用
fs
模块(Postman内置对文件系统的支持)来读取CSV文件。例如:
- 在请求前置脚本中,可以使用
var csv = require('csv-parser');
var fs = require('fs');
var dataArray = [];
fs.createReadStream('user_login_data.csv')
.pipe(csv())
.on('data', function (data) {
dataArray.push(data);
})
.on('end', function () {
// 在这里可以使用dataArray中的数据进行参数化
pm.variables.set('current_username', dataArray[0].username);
pm.variables.set('current_password', dataArray[0].password);
});
- 上述代码首先引入了
csv - parser
和fs
模块,然后创建一个空数组dataArray
。通过fs.createReadStream
读取CSV文件,并使用csv()
函数将其解析。当解析到每一行数据时,将数据添加到dataArray
中。当读取结束后,从dataArray
中取出第一行数据(可以根据需要修改索引来使用不同的数据行),并将用户名和密码分别设置为变量current_username
和current_password
。最后,可以在请求的URL或请求体中使用这些变量,如在请求体中设置{"username": "{{current_username}}", "password": "{{current_password}}"}
来发送不同的用户登录数据。
- 上述代码首先引入了
十、测试报告
- 测试报告生成方式
- 自动生成(通过运行集合):在Postman中,当你运行一个集合(Collections)或者一个文件夹(Folders)中的多个请求后,会自动生成一个测试报告。这个报告总结了所有请求的执行情况,包括每个请求的详细信息和整体的统计数据。- 使用 Newman(命令行工具)生成更详细报告:Newman是Postman的命令行工具,可以在命令行环境中运行Postman集合,并生成各种格式的详细测试报告。这对于将测试集成到持续集成/持续交付(CI/CD)管道中非常有用。例如,在自动化测试脚本中,可以使用Newman来运行测试集合,并将生成的报告保存为HTML、JSON等格式,方便后续查看和分析。
- 测试报告内容结构
- 概述部分:
- 集合和环境信息:报告首先会显示被测试的集合名称、版本号(如果有)以及运行测试时所使用的环境。这有助于确定测试的范围和上下文。例如,如果你正在测试一个电商API的“订单管理”集合,报告开头会明确显示这个集合名称和对应的环境(如“测试环境”)。- 运行统计数据:包括总请求数、成功请求数、失败请求数、请求的总时间等基本统计信息。这些数据可以让你快速了解测试的整体情况。例如,如果总请求数为10,成功请求数为8,失败请求数为2,你就可以知道大概有20%的请求出现了问题,需要进一步查看。
- 请求详情部分:
- 请求顺序和基本信息:按照请求在集合中的执行顺序,逐个列出每个请求的详细信息。包括请求名称、请求方法(如GET、POST等)、请求URL、请求头信息等。这部分信息可以帮助你回顾每个测试用例的具体设置。例如,对于一个用户登录请求,会显示其名称为“用户登录测试”,请求方法是POST,URL是“https://api.example.com/login”,以及包含用户名和密码的请求头信息。- 响应状态码和时间:对于每个请求,会显示服务器返回的响应状态码和响应时间。状态码可以直观地告诉你请求是否成功(如200表示成功,404表示未找到资源等),响应时间则反映了接口的性能。例如,一个获取商品列表的请求返回状态码200,响应时间为500毫秒,这表示请求成功且接口响应速度相对较快。- 断言结果:这是测试报告的关键部分,显示了每个请求中所设置断言的执行情况。如果断言全部通过,会显示“Tests passed”;如果有断言失败,会详细列出失败的断言内容。例如,对于一个验证用户信息接口返回的用户姓名是否正确的断言,若返回的姓名与预期不符,报告中会显示类似于“断言失败:预期用户姓名为‘John’,实际返回‘Jane’”的内容。
- 详细响应数据(可选):
- 在某些情况下,测试报告还可以包含每个请求的详细响应数据,如响应头和响应体。这对于深入分析接口返回的数据非常有用。例如,当你怀疑接口返回的数据格式有问题时,可以查看响应体的详细内容,确认数据是否符合接口文档的要求。不过,为了避免报告文件过大,Postman可能默认不包含详细响应数据,需要根据具体情况手动设置是否显示。
- 测试报告格式及用途
- HTML格式:
- 格式特点:生成的HTML格式的测试报告具有良好的可读性,适合直接在浏览器中查看。它通常会以表格、列表等形式清晰地展示测试结果,并且可以通过链接、折叠展开等方式展示详细信息。例如,请求详情部分可能以表格形式列出每个请求的基本信息、状态码和时间,点击每个请求可以展开查看更详细的断言结果和响应数据。- 主要用途:在团队内部共享测试结果、向非技术人员(如项目经理、产品经理)汇报测试情况时非常方便。他们可以在浏览器中直观地了解测试的整体情况和具体问题,而不需要了解复杂的测试工具和技术细节。
- JSON格式:
- 格式特点:JSON格式的报告是一种结构化的数据格式,便于机器读取和处理。它包含了所有测试结果的详细信息,以键值对的形式组织。例如,“requests”键对应的值是一个数组,其中每个元素包含了一个请求的详细测试结果,包括请求信息、响应信息、断言结果等。- 主要用途:适合用于自动化测试流程中,作为后续数据处理和分析的输入。例如,在持续集成服务器上,可以编写脚本读取JSON格式的测试报告,提取关键信息(如失败请求的数量和详情),并根据这些信息决定是否继续部署代码或者发送通知给相关人员。
十一、Newman生成测试报告
- 安装Newman
- 前提条件:确保你的系统已经安装了Node.js,因为Newman是基于Node.js运行的命令行工具。你可以从Node.js官方网站(https://nodejs.org/)下载并安装适合你操作系统的版本。- 安装命令:在安装好Node.js后,打开终端(在Windows系统中是命令提示符或PowerShell,在Mac和Linux系统中是终端应用程序),使用以下命令安装Newman:
npm install -g newman
。这个命令会将Newman全局安装到你的系统中,-g
参数表示全局安装。安装完成后,你可以在终端中通过输入newman -v
来检查Newman是否安装成功并查看其版本号。
- 前提条件:确保你的系统已经安装了Node.js,因为Newman是基于Node.js运行的命令行工具。你可以从Node.js官方网站(https://nodejs.org/)下载并安装适合你操作系统的版本。- 安装命令:在安装好Node.js后,打开终端(在Windows系统中是命令提示符或PowerShell,在Mac和Linux系统中是终端应用程序),使用以下命令安装Newman:
- 准备Postman集合和环境文件(可选)
- 导出Postman集合:在Postman应用程序中,你需要先将想要测试的集合导出。点击集合旁边的“...”(更多操作)按钮,选择“Export”,然后选择合适的格式(通常是JSON格式)来保存集合文件。这个文件包含了集合中的所有请求、文件夹、变量以及断言等信息。- 导出环境文件(如果需要):如果你的集合依赖于特定的环境变量,你还需要导出环境文件。在Postman中,点击右上角的“Manage Environments”按钮,选择要导出的环境,然后点击“Export”按钮,将环境文件保存为JSON格式。
- 运行Newman并生成报告
- 基本命令格式:
newman run <collection_file_path> -e <environment_file_path> -r <report_type>
。其中,<collection_file_path>
是你之前导出的Postman集合文件的路径,<environment_file_path>
是环境文件的路径(如果不需要环境变量,可以省略这个参数),<report_type>
是你想要生成的报告类型,如html
、json
等。- 示例:假设你的Postman集合文件名为my_collection.json
,保存在当前目录下,并且你想要生成一个HTML格式的报告,不使用环境文件,那么命令如下:newman run my_collection.json -r html
。Newman会运行集合中的所有请求,并在终端中显示每个请求的执行情况,同时在当前目录下生成一个名为newman.html
的HTML格式测试报告。- 自定义报告选项(以HTML为例):
- 基本命令格式:
- 报告模板:Newman支持使用自定义的HTML报告模板来生成更符合需求的报告。你可以从Newman的官方文档或开源社区找到合适的模板,然后使用
-t <template_file_path>
参数指定模板文件的路径。例如:newman run my_collection.json -r html -t my_template.html
。- 报告详细程度:可以通过--reporter-html-export <output_file_path>
参数来指定报告的详细程度和输出文件路径。例如,如果你想要生成一个包含更详细响应数据的HTML报告,可以使用这个参数来设置。
- 报告模板:Newman支持使用自定义的HTML报告模板来生成更符合需求的报告。你可以从Newman的官方文档或开源社区找到合适的模板,然后使用
- 查看和使用测试报告
- HTML报告查看:如果生成的是HTML报告,你可以直接在浏览器中打开报告文件。在浏览器中,你可以查看测试的总体情况,包括总请求数、成功请求数、失败请求数等统计信息,以及每个请求的详细信息,如请求方法、URL、响应状态码、断言结果等。这种格式的报告非常适合分享给团队成员或者非技术人员,方便他们直观地了解测试情况。- JSON报告处理:对于JSON格式的报告,你可以使用编程语言(如Python、JavaScript)来读取和处理报告数据。例如,在Python中,你可以使用
json
模块来读取JSON文件,然后对其中的数据进行分析和提取。你可以提取失败请求的详细信息,生成自定义的测试总结,或者将报告数据集成到其他工具(如持续集成服务器)中,用于自动化的质量控制和决策过程。
- HTML报告查看:如果生成的是HTML报告,你可以直接在浏览器中打开报告文件。在浏览器中,你可以查看测试的总体情况,包括总请求数、成功请求数、失败请求数等统计信息,以及每个请求的详细信息,如请求方法、URL、响应状态码、断言结果等。这种格式的报告非常适合分享给团队成员或者非技术人员,方便他们直观地了解测试情况。- JSON报告处理:对于JSON格式的报告,你可以使用编程语言(如Python、JavaScript)来读取和处理报告数据。例如,在Python中,你可以使用
版权归原作者 小白~小黑 所有, 如有侵权,请联系我们删除。