简介
在postman使用中,很多接口使用共同的请求地址和相同的参数,这样我们可以定义一些公共的环境变量,每个collection可以使用变量.postman也内置了一些变量,比如生成随机数,生成字符串,生成id,这些变量用于表单测试是非常方便的.
下面我就简简单单定义变量和请求参数自定义装饰器并测试结果.
定义环境变量
在postman中可以自定义环境变量,我们可以添加全局变量也可以添加自定义collection的变量,这里我定义了一个,eureka集合的变量,其中包含主机名和端口地址等变量.
使用变量
使用变量目前有三种方式:
- 第一种如图,在表单中添加变量,注意使用 中的变量将会被定义的变量值替换掉
- 第二种如图, 在使用application/json的方式发送请求时,就没办法使用 形式的变量.此时我们需要在pre-request-Srcipt中手动些装饰器,将替换掉.
在这种方式下可分为两种具体实现:
- 方式一:将使用replace替换 内置变量
- 方式二:解析json为obj对象,然后更改obj对象的值
json请求值:{
"instance": {
"instanceId": "{{appID}}:11101",
"app": "{{appID}}",
"appGroutName": null,
"ipAddr": "127.0.0.1",
"sid": "na",
"homePageUrl": null,
"statusPageUrl": null,
"healthCheckUrl": null,
"secureHealthCheckUrl": null,
"vipAddress": "tf-service",
"secureVipAddress": "tf-service",
"countryId": 1,
"dataCenterInfo": {
"@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
"name": "MyOwn"
},
"hostName": "127.0.0.1",
"status": "UP",
"leaseInfo": null,
"isCoordinatingDiscoveryServer": false,
"lastUpdatedTimestamp": 1529391461000,
"lastDirtyTimestamp": 1529391461000,
"actionType": null,
"asgName": null,
"overridden_status": "UNKNOWN",
"port": {
"$": 11102,
"@enabled": "false"
},
"securePort": {
"$": 7002,
"@enabled": "false"
},
"metadata": {
"@class": "java.util.Collections$EmptyMap"
}
}
}
pre-request-Srcipt中的内容// 检查请求头是否是json
function isJsonReq(){
var header = pm.request.headers;
header.each(function(v){
if(v['key']=='Content-Type'&&v['value']=="application/json"){
return true;
}
});
return false;
}
// 方法一: 替换全局变量
pm.request.body.raw = replace(pm.request.body.raw);
console.log(pm.request)
function replace(reqbody){
if(reqbody&&isJsonReq()){
var values = pm.environment.values;
values.each(function(v){
reqbody = reqbody.replace(new RegExp("{{"+v['key']+"}}",'g'),v['value'])
})
}
return reqbody;
}
// 方法二: 动态生成编号 |
使用高级js库
在postman的沙盒环境中,我们可以使用一些高级的js库.
我们可以在pre-request-script和end-test中使用.
var Ajv = require('ajv'); |
测试结果
在每次请求后还可以编写断言脚本验证结果
tests["请求成功"] = responseCode.code === 204; |
参考: