环境变量

环境变量设置

1、局部变量

变量定义、设置和切换的操作按钮都在右上角位置,见下图:
image.png
建议按照不同的项目和不同的环境(开发、测试、生产)进行定义,见下图所示:
image.png

2、Collection变量

集合变量打开的位置和本地变量/全局变量稍有不同
image.png
image.png

3、全局变量

全局变量和局部变量在统一个界面上,点击界面下方的Globals按钮即可打开全局变量设置界面
image.png

环境变量使用

环境变量使用时和EL表达式类似:{{变量名}}。

1、请求路径中使用

多个请求使用同一个变量,即使请求接口地址发生变更,只要更改同一个变量值即可,不需要手动修改所有的请求路径。
image.png

2、请求头中使用

可以动态从其他请求结果中获取token,不需要每次请求进行手动拷贝修改。
image.png

3、请求参数中使用

可以定义全局变量比如分页数、分页大小、当前时间等。
image.png

脚本

Postman脚本功能比较强大,可以节省很多人工拷贝粘贴的工作。

1、前置脚本(Pre-request Script)

前置脚本多用来设置动态请求头(比如动态设置token)或者进行请求签名。

1.1、请求头设定

  1. let token = pm.environment.get("token");
  2. console.log('token', token);
  3. pm.request.headers.add({
  4. key: 'token',
  5. value: token
  6. });
  7. console.log('headers', pm.request.headers);

1.2、请求签名

  1. let param = {};
  2. // 封装请求对象
  3. pm.request.body.urlencoded.each(item => {
  4. if(item.key != 'sign') {
  5. param[item.key] = item.value;
  6. }
  7. });
  8. // 键值排序
  9. let keys = Object.keys(param).sort();
  10. // 拼接字符串
  11. let temp = '';
  12. for(let i = 0; i < keys.length; i++) {
  13. temp += (keys[i] + '=' + param[keys[i]]);
  14. if(i < keys.length - 1) {
  15. temp = temp + '&';
  16. }
  17. }
  18. console.log('temp', temp);
  19. // MD5加密
  20. let md5sign = CryptoJS.MD5(temp).toString();
  21. console.log('sign', md5sign);
  22. // HmacSHA256
  23. let appSecret = '4cb77ad0617d11e9b063b5b124799222';
  24. let shasign = CryptoJS.HmacSHA256(temp, appSecret).toString();
  25. console.log('sign', shasign);
  26. // 添加签名参数
  27. pm.request.body.urlencoded.add({
  28. 'key': 'sign',
  29. 'value': md5sign
  30. });
  31. console.log('request', pm.request.body.urlencoded);

2、后置脚本(Tests)

2.1、变量设定

后置脚本可以解析请求返回的json对象,并将某个属性设置到局部变量(比如解析登录接口返回的token属性并设置到局部变量中,其它的接口可以使用该局部变量进行请求头设置)。

  1. var jsonData = pm.response.json();
  2. pm.environment.set("token", jsonData.token);

2.2、接口测试

可以对接口返回内容进行断言,如果失败会生成测试报告。

  1. pm.test("Response time is less than 200ms", function () {
  2. pm.expect(pm.response.responseTime).to.be.below(200);
  3. });
  4. pm.test("Status code is 200", function () {
  5. pm.response.to.have.status(200);
  6. });
  7. pm.test("Result code is 0", function () {
  8. var jsonData = pm.response.json();
  9. console.log('jsonData', jsonData);
  10. pm.expect(jsonData.code).to.eql(0);
  11. });
  12. pm.test("返回列表非空", function () {
  13. var jsonData = pm.response.json();
  14. pm.expect(jsonData.code).to.eql(0);
  15. pm.expect(jsonData.msg).to.eql("success");
  16. pm.expect(jsonData.unitEntitys).to.be.an("array");
  17. pm.expect(jsonData.unitEntitys.length).to.gt(1);
  18. });