0


Postman Pre-request Script

这个其实是普通的

  1. js

脚本,有一些和

  1. postman

的通信他也提供了一些快捷命令如下
在这里插入图片描述

postman常用参数使用

环境变量

  1. //设置当前环境变量
  2. pm.environment.set("key", "value");
  3. //获取当前环境变量
  4. pm.environment.get("key");
  5. //清除当前环境变量
  6. pm.environment.unset("key");
  7. //设置全局环境变量
  8. pm.globals.set("key", "value");
  9. //获取全局环境变量
  10. pm.globals.get("key");
  11. //清除全局环境变量
  12. pm.globals.unset("key");
  13. //在全局和当前环境变量中获取
  14. pm.variables.get("key");
  15. //设置集合
  16. pm.collectionVariables.set("key",["value1","value2","value3"])
  17. //获取集合
  18. pm.collectionVariables.get("key");
  19. //清除集合
  20. pm.collectionVariables.unset("key");
  21. //遍历集集合,遍历function(遍历当前值,索引,集合,)
  22. pm.collectionVariables.get("key").forEach(function(a,b,c){
  23. console.log(a);
  24. console.log(b);
  25. console.log(c);
  26. });

查询字符串

  1. //获取当前请求方式,返回:string
  2. var method = pm.request.method;
  3. //输出当前请求信息,返回:json
  4. var request = pm.request.toJSON();
  5. //输出当前请求url,返回:string
  6. var url = pm.request.url.toString();
  7. //输出当前请求参数,参数(是否编码):true false ,返回:string
  8. var querypararm = pm.request.url.getQueryString(false);
  9. //获取请求参数,参数(请求的键值)(string 类型),返回:string
  10. var value = pm.request.url.query.get("key_name");
  11. //删除请求参数,参数(请求的键值)
  12. pm.request.url.query.remove("key_name");
  13. //添加请求参数,参数(添加请求参数),数组类型
  14. pm.request.url.query.add("key1=value1","key2=value2");
  15. //判断某个键值是否存在,返回:boolean
  16. var has = pm.request.url.query.has("key");

内置请求

  1. //定义请求信息
  2. var requests = {
  3. url:url,//请求url
  4. method: 'POST',//请求方式
  5. header: {'Content-Type':'application/json'},//请求header
  6. body: {
  7. mode: 'raw',//数据模型
  8. raw: JSON.stringify({mobile:raw.mobile,useScene:"login"})//数据
  9. }
  10. };
  11. //发送请求,参数:请求信息,响应函数(异常,响应数据)
  12. pm.sendRequest(requests,function (err, response) {
  13. var result = response.json();
  14. console.log(result);
  15. });

请求头

  1. //获取所有headers
  2. var header = pm.request.getHeaders();
  3. //移除header
  4. pm.request.removeHeader("key");
  5. //添加header
  6. pm.request.addHeader("key:value");

请求体

  1. //获得body中的内容,返回:string
  2. var body = pm.request.body.raw;
  3. //重新设置body内容,参数:string
  4. pm.request.body.update("");
  5. //添加param参数,参数:string或者QueryParam对象
  6. pm.request.addQueryParams("key=value");
  7. //移除para参数,参数:数组字符串
  8. pm.request.removeQueryParams("1","2");

Cookies

值得注意的是必须把这个

  1. domain

添加到

  1. cookies -> Manage Cookies -> Domains Allowlist

中,否则

  1. cookie

的注入无效,你可以添加一个很广泛的域名比如

  1. .com

来实现对所有的允许,但是建议使用精确
在这里插入图片描述

https://learning.postman.com/docs/sending-requests/response-data/cookies/#get-a-cookie

  1. //创建一个cookie容器
  2. const cookieJar = pm.cookies.jar();
  3. //设置cookie,参数: url,cookieName,cookieValue,回调函数function(异常,设置成功的cookie)
  4. /**
  5. * 如果设置失败,提示如下:Unable to access "xxxx.com" cookie store. Try whitelisting the domain in "Manage Cookies
  6. * 点击界面的 Cookies > Domains Allowlist(左下角) > 在输入框中加入xxxx.com 点击
  7. * add
  8. */
  9. cookieJar.set("xxxx.com","name","value",function(error,cookie){
  10. console.log(error);
  11. console.log(cookie);
  12. })
  13. //获取cookie,参数: url,cookieName,回调函数function(异常,cookie)
  14. cookieJar.get("xxxx.com","name",function(error,cookie){
  15. console.log(error);
  16. console.log(cookie);
  17. })
  18. //获取所有cookie,参数: url,回调函数function(异常,cookie)
  19. cookieJar.getAll("xxxx.com", function(error, cookies){
  20. console.log(error);
  21. console.log(cookie);
  22. });
  23. //删除cookie,参数: url,cookieName,回调函数function(异常)
  24. cookieJar.unset("xxxx.com", "name", function(error){
  25. console.log(error);
  26. });
  27. //删除所有cookie,参数: url,回调函数function(异常)
  28. cookieJar.clear("xxxx.com", "name", function(error){
  29. console.log(error);
  30. });

工具

  1. //字符串转json对象
  2. var json =JSON.parse("");
  3. //json对象转字符串
  4. var string = JSON.stringify(obj);
  5. //获取当前时间的时间格式
  6. var time = require('moment')().format("YYYY-MM-DD HH:mm:ss");
  7. //参数编码参数
  8. var encodeURI = encodeURIComponent("");
  9. //编码整个url
  10. var encodeURI = encodeURI("");
  11. //base64编码
  12. var content = CryptoJS.enc.Utf8.parse("1");
  13. var base64Content = CryptoJS.enc.Base64.stringify(content);
  14. //base64解码
  15. var parsedWordArray = CryptoJS.enc.Base64.parse(base64Content);
  16. var wordString = parsedWordArray.toString(CryptoJS.enc.Utf8);
  17. //xml转换json对象,参数:请求响应的xml
  18. var jsonObject = xml2Json(responseBody);
  19. //解析响应的csv
  20. const parse = require('csv-parse/lib/sync');
  21. const responseJson = parse(pm.response.text());
  22. //解析html
  23. const $ = cheerio.load(pm.response.text());
  24. console.log($.html());
  25. //MD5加密
  26. var md5 = CryptoJS.MD5("").toString();
  27. //SHA1加密
  28. var sha1 = CryptoJS.SHA1("").toString();
  29. //AES加密
  30. const keys = CryptoJS.enc.Utf8.parse("123456789");//秘钥
  31. const ivs = CryptoJS.enc.Utf8.parse('tltlaycvtweasa');//偏移量
  32. let encryptedWord = CryptoJS.enc.Utf8.parse("1");//加密内容
  33. var encrypted = CryptoJS.AES.encrypt(encryptedWord, keys, { iv: ivs,mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}); //加密结果
  34. var ciphertext = encrypted.toString(); //密文

Tests编写

值获取
  1. //请求耗时
  2. var time = pm.response.responseTime;
  3. //获取响应code
  4. var code = pm.response.code;
  5. //获取错误描述:例如返回200,下面返回的是OK
  6. var status = pm.response.status;
  7. //获取响应数据
  8. var data = pm.response.json();
  9. //获取响应header
  10. var header = pm.response.headers.get("key");
模板判断
  1. //断言响应中是否包含指定字符串
  2. pm.test("断言响应体包含指定字符串", function () {
  3. pm.expect(pm.response.text()).to.include("指定字符串");
  4. });
  5. //断言响应是否等于指定字符串
  6. pm.test("断言响应是否等于指定字符串", function () {
  7. pm.response.to.have.body("指定字符串");
  8. });
  9. //断言json值是否等于指定值
  10. pm.test("断言json值是否等于指定值", function () {
  11. var jsonData = pm.response.json();
  12. pm.expect(jsonData.value).to.eql(100);
  13. });
  14. //断言是否存在Content-Type标头
  15. pm.test("断言是否存在Content-Type标头", function () {
  16. pm.response.to.have.header("Content-Type");
  17. });
  18. //断言cookie是否存在
  19. pm.test("断言cookie是否存在", () => {
  20. pm.expect(pm.cookies.has('JSESSIONID')).to.be.true;
  21. });
  22. //断言cookie是否等于特定值
  23. pm.test("断言cookie是否等于特定值", () => {
  24. pm.expect(pm.cookies.get('JSESSIONID')).to.eql('1');
  25. });
  26. //断言响应时间小于200ms
  27. pm.test("断言响应时间小于200ms", function () {
  28. pm.expect(pm.response.responseTime).to.be.below(200);
  29. });
  30. //断言状态码为200
  31. pm.test("断言状态码为200", function () {
  32. pm.response.to.have.status(200);
  33. });
  34. //断言状态响应说明是否包指定值
  35. pm.test("断言状态响应说明是否包指定值", function () {
  36. pm.response.to.have.status("Created");
  37. });
  38. //断言成功响应状态码,oneOf表示在一组值中
  39. pm.test("断言成功响应状态码", function () {
  40. pm.expect(pm.response.code).to.be.oneOf([201,202]);
  41. });
  42. //断言环境值和响应回来的值
  43. pm.test("断言环境值和响应回来的值", function () {
  44. pm.expect(pm.response.json().name).to.eql(pm.environment.get("name"));
  45. });
  46. //断言响应数据类型
  47. /* 响应数据结构如下
  48. {
  49. "name": "Jane",
  50. "age": 29,
  51. "hobbies": [
  52. "skating",
  53. "painting"
  54. ],
  55. "email": null
  56. }
  57. */
  58. const jsonData = pm.response.json();
  59. pm.test("Test data type of the response", () => {
  60. pm.expect(jsonData).to.be.an("object");//是否为对象类型
  61. pm.expect(jsonData.name).to.be.a("string");//是否为字符串类型
  62. pm.expect(jsonData.age).to.be.a("number");//是否为数字类型
  63. pm.expect(jsonData.hobbies).to.be.an("array");//是否为数组
  64. pm.expect(jsonData.website).to.be.undefined;//是否未定义
  65. pm.expect(jsonData.email).to.be.null;//是否为null
  66. });
  67. //断言数组
  68. /* 响应数据结构如下
  69. {
  70. "errors": [],
  71. "areas": [ "goods", "services" ],
  72. "settings": [
  73. {
  74. "type": "notification",
  75. "detail": [ "email", "sms" ]
  76. },
  77. {
  78. "type": "visual",
  79. "detail": [ "light", "large" ]
  80. }
  81. ]
  82. }
  83. */
  84. const jsonData = pm.response.json();
  85. pm.test("Test array properties", () => {
  86. //判断是否为空
  87. pm.expect(jsonData.errors).to.be.empty;
  88. //判断是否包含 "goods"
  89. pm.expect(jsonData.areas).to.include("goods");
  90. //判断 settings 中的object是否有type='notification'
  91. const notificationSettings = jsonData.settings.find
  92. (m => m.type === "notification");
  93. pm.expect(notificationSettings)
  94. .to.be.an("object", "Could not find the setting");
  95. //判断是否notificationSettings.detail中是否包含"sms"
  96. pm.expect(notificationSettings.detail).to.include("sms");
  97. //判断是否notificationSettings.detail中是否包含如下所有成员
  98. pm.expect(notificationSettings.detail)
  99. .to.have.members(["email", "sms"]);
  100. });
  101. //断言一个对象包含键或属性
  102. //断言包含所有的key
  103. pm.expect({a: 1, b: 2}).to.have.all.keys('a', 'b');
  104. //断言包含任何一个成员
  105. pm.expect({a: 1, b: 2}).to.have.any.keys('a', 'b');
  106. //断言不包含任何一个成员
  107. pm.expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');
  108. //断言是否包含a属性
  109. pm.expect({a: 1}).to.have.property('a');
  110. //断言值是否为object对象,并且包含所有的key
  111. pm.expect({a: 1, b: 2}).to.be.an('object')
  112. .that.has.all.keys('a', 'b');
  113. //TV4校验
  114. //定义校验模型,要求值为boolean类型
  115. var schema = {
  116. "items": {
  117. "type": "boolean"
  118. }
  119. };
  120. //定义测试数据
  121. //满足要求
  122. var data1 = [true, false];
  123. //不满足要求
  124. var data2 = [true, 123];
  125. //校验TV4模型
  126. pm.test('校验TV4模型', function() {
  127. pm.expect(tv4.validate(data1, schema)).to.be.true;
  128. pm.expect(tv4.validate(data2, schema)).to.be.true;
  129. });
  130. //JSON模型校验
  131. //构建Ajv
  132. var Ajv = require('ajv');
  133. //初始化
  134. var ajv = new Ajv({logger: console})
  135. //定义规则
  136. var schema = {
  137. "properties": {
  138. "alpha": {
  139. "type": "boolean"
  140. }
  141. }
  142. };
  143. //定义测试数据
  144. //符合规则
  145. var test1 = {alpha: true};
  146. //不符合规则
  147. var test2 = {alpha: 123};
  148. //校验
  149. pm.test('JSON模型校验', function() {
  150. pm.expect(ajv.validate(schema, test1)).to.be.true;
  151. pm.expect(ajv.validate(schema, test2)).to.be.false;
  152. });
  153. //将请求结果可视化
  154. //数据样例
  155. /**
  156. [
  157. {
  158. "name": "Alice",
  159. "email": "alice@example.com"
  160. },
  161. {
  162. "name": "Jack",
  163. "email": "jack@example.com"
  164. },
  165. // ... and so on
  166. ]
  167. */
  168. //数据模板
  169. var template = `
  170. <table bgcolor="#FFFFFF">
  171. <tr>
  172. <th>Name</th>
  173. <th>Email</th>
  174. </tr>
  175. {{#each response}}
  176. <tr>
  177. <td>{{name}}</td>
  178. <td>{{email}}</td>
  179. </tr>
  180. {{/each}}
  181. </table>
  182. `;
  183. //填充数据模板
  184. pm.visualizer.set(template, {
  185. response: pm.response.json()
  186. });

动态变量

获取动态变量
  1. //动态变量获取
  2. pm.variables.replaceIn('{{$randomFirstName}}');
常见动态变量的选择

具体文档链接:https://learning.postman.com/docs/tests-and-scripts/write-scripts/variables-list/
变量名描述例子$guid一个uuid-v4风格GUID“611c2e81-2ccb-42d8-9ddc-2d0bfa65c1b4”$timestamp当前UNIX时间戳(以秒为单位)1562757107$isoTimestamp当前ISO时间戳(UTC为零)2020-06-09T21:10:36.177Z$randomUUID随机的36个字符的UUID“6929bb52-3ab2-448a-9796-d6480ecad36b”$randomAlphaNumeric随机字母数字字符6,“y”,“z”$randomBoolean随机布尔值(真/假)true,false,false,true$randomInt1至1000之间的随机整数802,494,200

demo

这是一个注入

  1. csrf

的脚本,
在package中编写
在这里插入图片描述
然后在需要的接口的

  1. script

中引入
在这里插入图片描述
在这里插入图片描述
也可以给整个

  1. collection

  1. script

添加,那么这个目录下的所有接口都共用这个脚本

在这里插入图片描述

官方文档

https://learning.postman.com/docs/tests-and-scripts/write-scripts/intro-to-scripts/


本文转载自: https://blog.csdn.net/m0_69082030/article/details/141070240
版权归原作者 名难取aaa 所有, 如有侵权,请联系我们删除。

“Postman Pre-request Script”的评论:

还没有评论