Postman进行单接口的简单断言只是入门。当你需要验证整个用户注册、登录、到下单的完整流程时,就需要进行业务流程串联测试。
业务流程串联测试
简单来说,业务流程串联测试就是模仿真实用户的操作序列,将多个独立的API请求按逻辑顺序组织起来,并让后一个请求能够使用前一个请求的响应数据。
作用:它能帮你发现那些在单接口测试中无法暴露的问题,比如数据状态在不同接口间传递是否正确,或者整个流程的时序依赖是否可靠。
和单接口测试的区别:单接口测试关注一个点的正确性;串联测试则关注一条线,甚至一个面的通畅和稳固。
掌握串联测试的主要技术
实现业务流程串联,主要靠Postman提供的以下几项主要技术:
变量和环境管理
环境变量 和全局变量 允许你在不同的请求之间存储和传递数据。例如,你可以将登录接口返回的token保存为一个环境变量,后续所有需要认证的请求都会自动使用这个token。
变量的作用域 从大到小通常是:全局变量 > 环境变量 > 集合变量 > 局部变量。正确使用作用域能让你的测试结构更清晰。
脚本的用法
Tests脚本:在收到响应后执行。这里是你进行断言和数据提取的主要阵地。你可以使用 pm.response.json() 解析响应体,然后用 pm.environment.set("variable_key", "variable_value") 将需要的值(如token、orderId)存入环境变量。
Pre-request Scripts:在发送请求前执行。常用于动态生成参数(如时间戳)、计算签名或从变量中组装请求体。
构建自己的请求链
通过在请求的URL、请求头或请求体中,使用 {{variable_name}} 语法引用之前脚本中设置的变量,就形成了请求之间的数据流。例如,在查询订单的请求URL中,可以使用 https://api.example.com/orders/{{order_id}}。
设计测试流程和数据流
一个清晰的测试方案是成功的一半。以下是一个典型的电商业务流程作演示:
1. 用户注册:POST /register,user_id, token,状态码为 201,返回包含用户ID
2. 用户登录:POST /login,新的 token,状态码为 200,返回新的令牌
3. 创建商品:POST /products,product_id,状态码为 201,返回商品信息
4. 下单:POST /orders,order_id,状态码为 201,返回包含订单ID
5. 支付:POST /payments,payment_id,状态码为 200,支付状态为成功
6. 查询订单,GET /orders/{{order_id}},-,状态码为 200,订单状态已更新
在这个流程中,数据流是这样传递的:
注册后获取的user_id 和token可用于登录及后续的创建商品、下单等操作。
创建商品后获取的product_id需要在下单请求的Body中引用。
下单后获取的order_id则用于后续的支付、查询订单和清理测试数据。
复杂测试技巧
当测试流程变得越来越复杂时可以使用下面这些技巧:
条件执行和流程控制
你可以在Collection Runner或通过Newman运行时,利用 postman.setNextRequest("request_name"); 函数来跳转到特定的请求。这让你能够实现诸如"如果登录失败则重置密码"、"如果库存不足则触发补货"等分支逻辑。
处理异步操作
有些流程(如支付成功回调、后台任务处理)不是立即完成的。你可以:
在Tests脚本中使用 setTimeout 或递归函数来轮询某个状态查询接口,直到任务完成或超时。
这是一种相对高级的用法,需要谨慎处理超时和失败情况。
动态数据管理和测试独立性
为了保证测试的可靠性和可重复性,要避免使用固定的测试数据。
使用 Pre-request Scripts 或Postman内置的动态变量(如 {{$guid}} 生成唯一标识、{{$timestamp}} 获取当前时间戳)来构造每次运行都不一样的数据。
在Tests脚本的断言中,也要使用这些动态变量来验证响应内容。
实现自动化和集成
将编排好的测试流程写入自动化。
使用Collection Runner
在Postman图形界面中,你可以通过Collection Runner批量运行整个Collection。在运行前,记得为整个Collection或Folder配置迭代次数和延迟,这对于性能摸底或处理接口限速场景很有用。
使用Newman实现CLI自动化
Newman是Postman的命令行工具,让你能够在CI/CD流水像Jenkins、GitLab CI中自动执行测试集合。
安装Newman后,一个基本的运行命令是:newman run my_collection.json -e my_environment.json --reporters cli,html。
你可以生成多种格式的报告(如HTML、JUnit),方便和持续集成系统集成。
集成到CI/CD流水线
将Newman命令写入你的CI/CD pipeline配置文件(如Jenkinsfile、.gitlab-ci.yml),可以实现每次代码提交或部署后自动执行API流程测试。这能保证代码变更不会破坏已有的主要业务流程。
测试须知:
清晰的命名:为请求、变量和集合起一个一目了然的名字。
模块化设计:将可复用的逻辑(如通用认证)写在Collection级别的Pre-request Scripts或Tests中。
完整的断言:不仅要断言HTTP状态码,还要断言关键的响应字段和业务状态。
环境隔离:严格区分开发、测试、生产环境的配置,使用不同的Environment。
避开的常见问题:
硬编码数据:坚决不要在请求URL或Body中直接写死会变化的值。
过度依赖界面操作:对于复杂的、需要条件逻辑的测试,要善用脚本,而非完全依赖Collection Runner的线性执行。
忽略测试清理:测试创建的数据(如测试订单、临时用户)应该有清理机制(如通过After Collection钩子执行清理脚本),避免产生测试垃圾。
通过以上方法就能在Postman中构建起强大、可靠且易于维护的复杂业务流程测试,从而在API级别保证你软件产品的测试质量。