Postman通过数据文件(CSV或JSON)为集合进行参数化,允许你使用不同的数据集来运行相同的测试用例,是能显著提高测试的覆盖率和效率。
数据文件和参数化基础
在Postman中,参数化是指将请求中的静态值替换为变量。这些变量的值可以来源于环境变量、集合变量,或者外部的数据文件。当使用CSV或JSON文件时,文件中的每一行(或每个对象)代表一组测试数据,Postman会为每一组数据运行一次集合中的所有请求。
CSV和JSON格式的选择:
CSV:数据结构简单、扁平,适合表格型数据。文件体积相对较小。
JSON:数据结构复杂,存在嵌套或数组。可读性更好,尤其对于多层数据。
数据驱动测试实战步骤
1. 准备你的数据文件
根据你的测试场景,创建一个CSV或JSON文件。确保第一行(CSV)或第一个属性名(JSON)定义了变量名,这些名称将用于在Postman中引用数据。
JSON文件示例 (test-data.json):
json
[
{
"username": "tenmao",
"age": 18
},
{
"username": "tenyuan",
"age": 28
}
]
2. 创建集合并参数化请求
新建一个集合,并将你需要测试的API请求添加进去。
在请求的URL、请求头、请求体等任何需要动态变化的位置,使用 {{变量名}} 的语法来引用数据文件中的变量。
例如,在请求体中引用JSON数据文件中的username和age:
json
{
"user": "{{username}}",
"age": "{{age}}"
}
3. 配置并运行集合Runner
在Postman中打开Collection Runner(集合运行器)。
选择你刚刚创建并参数化好的集合。
在 "Data" 区域,点击 "Select File" 上传你准备好的CSV或JSON数据文件。上传后可以点击 "Preview" 预览数据是否正确载入。
设置 "Iterations"(迭代次数),它决定了测试运行的次数。通常,迭代次数和数据文件中的数据行数一致,这样每一行数据都会运行一次测试集合。
根据需要配置其他选项,如 "Delay"(请求间隔)和 "Environment"(使用的环境变量),然后点击 "Run..." 开始执行测试。
4. 编写测试脚本验证数据
在请求的 "Tests" 标签页下,可以编写JavaScript代码来验证响应结果,并动态地使用当前迭代的数据。
一个常见的测试用例是验证响应体中是否包含了数据文件中预期的值:
javascript
// 检查响应状态码是否为200,并且响应体中的name字段和当前迭代数据中的name值一致
pm.test("Status is 200 and have name", () => {
pm.expect(pm.response.code).is.equal(200); // 验证状态码
const responseJson = pm.response.json();
pm.expect(responseJson.name).to.eql(pm.iterationData.get("name")); // 验证数据
});
在这个脚本中,pm.iterationData.get("name") 用于从数据文件中获取当前迭代轮次的 name 字段值。
技巧实践
在Pre-request Script中处理复杂数据:除了在Tests脚本中使用数据文件,还可以在 "Pre-request Script" 中利用数据文件里的值。例如,你可以用它们来生成动态的签名(Signature)、时间戳,或者和其他环境变量结合,构造更复杂的请求参数。
和Newman集成实现CI/CD:Postman的命令行工具 Newman 同样支持数据驱动测试,这对于集成到持续集成/持续部署(CI/CD)流水线(如Azure DevOps)中很重要。
使用命令如下:
newman run your_collection.json -d your_data.json
通过Newman,你可以在自动化构建流程中轻松运行带有不同数据集的API测试。
理解变量作用域:在Postman中,当存在同名变量时,其优先级从高到低一般为:数据变量(Data) > 局部变量(Local) > 环境变量(Environment) > 集合变量(Collection) > 全局变量(Global)。在数据驱动测试中,数据文件中定义的变量在当前迭代中具有最高优先级。
保持数据和测试分离:将测试数据独立于测试脚本存放在外部文件中,使得维护测试数据变得更加方便。当测试用例需要增减或修改时,你通常只需要更新数据文件,而无需改动请求和测试脚本本身。