在开发不同阶段可能存在不同的环境,比如测试环境和生产环境。
测试环境API如下:
https://dev.postman.com/get
https://dev.postman.com/post
https://dev.postman.com/put
生产环境API如下:
https://postman-echo.com/get
https://postman-echo.com/post
https://postman-echo.com/put
在这么情况下,按照常规思路要么你需要维护两套环境的API,要么每次都手动一个个去修改URL,不管哪种选择都比较麻烦且低效,那么有没有比较的好的方法来解决这个问题呢?
通过比较我们可以发现,以上两组API主要是除了host不同之外其他都一样,其实把Host用变量替换,这样就可以灵活切换环境。
Postman提供了变量设置,有4种变量类型。
环境变量指在不同环境,同一个变量值随着环境不同而变化,比如我们上面举例场景就可以使用环境变量,当在测试环境时,host值为: dev.postman.com ,当切换到生产环境时,host值变为:postman-echo.com 。
环境变量设置:在postman界面点击右上角眼睛图标,即可开始设置环境变量和全局变量。环境变量设置过程如下图所示:我们可以设置两种环境 dev
和release
,dev
是开发测试环境; release
是正式的生产环境。host
环境变量,根据不同的环境值不一样。
变量引用格式为{{varname}}
,如下图所示:
详细过程见视频演示。
本地变量主要是针对单个URL请求设置的变量,作用域只是局限在请求范围内。如请求URL如下,设置两个本地变量(user,passwd)作为参数。请求方式为POST
https://postman-echo.com/post
从上图中我们可以看到变量设置的格式为{{variable_name}}
变量设置好之后需要赋值,在Pre-request-Script
里面编写如下代码:
pm.variables.set("user","51zxw");
pm.variables.set("passwd","66666");
点击send执行之后的返回值如下,可以看到我们定义的变量已经发送。
{
"args": {},
"data": "",
"files": {},
"form": {
"user": "51zxw",
"passwd": "6666"
},
"headers": {
"host": "postman-echo.com",
"content-length": "24",
"accept": "*/*",
"accept-encoding": "gzip, deflate",
"cache-control": "no-cache",
"content-type": "application/x-www-form-urlencoded",
"cookie": "sails.sid=s%3ARNfROdcmaqrU3ZqglMdbnqU4tI3_BHTE.WUBtzhacnJT44oLzytikWtVmg7wfkD7tDNb%2FPtVBRnM",
"postman-token": "9367ea9b-b349-4bc4-85d4-5638b5ff30e1",
"user-agent": "PostmanRuntime/7.1.5",
"x-forwarded-port": "443",
"x-forwarded-proto": "https"
},
"json": {
"user": "sutune",
"passwd": "12345"
},
"url": "https://postman-echo.com/post"
}
全局变量是指在所有的环境里面,变量值都是一样的,全局变量的作用域是所有请求。
全局变量设置有两种方式:
界面设置
点击眼睛图标后,在Global
选项菜单点击Edit
菜单即可设置全局变量,如下图所示。全局变量的引用格式和环境变量一样,
注意:当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量。
脚本设置
使用如下脚本可以设置全局变量:variable_key
表示变量名称, variable_value
表示变量值。
pm.globals.set("variable_key", "variable_value");
实践案例
在实际接口测试过程中,接口经常会有关联。比如需要取上一个接口的某个返回值,然后作为参数传递到下一个接口作为参数。假设我们要获取A接口返回的userid
值作为B接口的请求参数。
A接口请求URL如下:
https://postman-echo.com/post
返回值
{
"args": {},
"data": "",
"files": {},
"form": {
"userid": "123456"
},
"headers": {
"host": "postman-echo.com",
"content-length": "13",
"accept": "*/*",
"accept-encoding": "gzip, deflate",
"cache-control": "no-cache",
"content-type": "application/x-www-form-urlencoded",
"cookie": "sails.sid=s%3AxZeg8NHeQGGFv2AUFblww7xF5HeP-4pi.sYxwR13VMFrUqvpJ%2Be8scGNnjgQAdOP3EeL6DSZqNQo",
"postman-token": "7890d763-2bb1-4e88-aa1c-ad0bfc7db9b1",
"user-agent": "PostmanRuntime/7.1.5",
"x-forwarded-port": "443",
"x-forwarded-proto": "https"
},
"json": {
"userid": "123456"
},
"url": "https://postman-echo.com/post"
}
根据返回值我们需要从返回值中提取userid值。在Test
标签栏下编写如下脚本获取userid
值
//获取返回的响应值然后转化为json格式
var jsonData = pm.response.json();
//获取返回的userid值
userid=jsonData.json['userid'];
//控制台日志查看
console.log(userid);
//将获取的变量设置全局变量
pm.globals.set("userid", userid);
B接口请求URL如下:请求方式为GET
postman-echo.com/get?userid={{userid}}
先执行A接口的,然后在执行B接口,此时B接口通过全局变量userid
可以获得A接口的返回值。
数据变量是通过导入外部数据文件(json文件或者csv文件),来获取变量数据。我们可以创建一个如下内容的json文件:
data.json
[{
"username": "jack",
"passwd": "6666"
},{
"username": "Bob",
"passwd": "5555"
}, {
"username": "Marry",
"passwd": "8888"
}]
稍后我们会结合运行Collection来讲解如何导入该数据文件。
一般来说执行完测试,我们需要对测试结果来进行校验,判断结果是是否符合我们的预期,也就是断言。在接口测试中一般会根据响应状态码或者响应返回的数据来进行断言。
Postman提供一个测试沙箱(Postman Sandbox) 测试沙箱是一个JavaScript执行环境,可以通过JS脚本来编写pre-request Script和test Script。
接口请求URL如下:请求方式为POST
postman-echo.com/post
断言规则
user
参数值与定义的一致测试脚本
在pre-request Script
定义变量user
pm.variables.set("user",'zxw');
在Test
栏下面编写如下脚本
//判断响应状态码
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//获取发送的参数值
username=pm.variables.get("user");
console.log(username);
//校验响应内容是否和请求的一致
pm.test("Check username", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.json['user']).to.eql(username);
});
//检测响应时间是否小于0.5s
pm.test("Response time is less than 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
断言结果
扩展资料:Postman测试脚本官方文档