0


postman 如何查看 request 请求的header和response参数

文章目录

问题描述

工作中,使用postman,发现返回结果不是自己想要的,但是不确定参数是否传递准确,但是又无法像chrome浏览器F12的开发者工具这样的神器,于是在网上搜了相关信息,做个笔记,方便以后学习

地址栏传递参数

在这里插入图片描述

查看 request请求的面板

在这里插入图片描述

请求前函数 Pre-request Script

  1. var appKey ="11111111111";//需要根据现场情况修改var appSecret ="22222222222222";//需要根据现场情况修改var md5 =calcMd5();var date =newDate().toString();var nonce =createUuid();var timestamp =newDate().getTime();var textToSign ="";
  2. textToSign += request.method +"\n";
  3. textToSign += request.headers["accept"]+"\n";
  4. textToSign += request.headers["content-type"]+"\n";var headers =headersToSign();var signatureHeaders;var sortedKeys = Array.from(headers.keys()).sort();for(var headerName of sortedKeys){
  5. textToSign += headerName +":"+ headers.get(headerName)+"\n";
  6. signatureHeaders = signatureHeaders ? signatureHeaders +","+ headerName : headerName;}
  7. textToSign +=urlToSign();
  8. console.log("textToSign\n"+ textToSign.replace(/\n/g,"#"));var hash = CryptoJS.HmacSHA256(textToSign, appSecret);
  9. console.log("hash:"+ hash);var signature = hash.toString(CryptoJS.enc.Base64);
  10. console.log("signature:"+ signature)
  11. pm.globals.set('AppKey', appKey);
  12. pm.globals.set('Md5', md5);
  13. pm.globals.set("Date", date);
  14. pm.globals.set("Signature", signature);
  15. pm.globals.set("SignatureHeaders", signatureHeaders);
  16. pm.globals.set("Nonce", nonce);
  17. pm.globals.set("Timestamp", timestamp);functionheadersToSign(){var headers =newMap();for(var name in request.headers){
  18. name = name.toLowerCase();if(!name.startsWith('x-ca-')){continue;}if(name ==="x-ca-signature"|| name ==="x-ca-signature-headers"|| name =="x-ca-key"|| name ==='x-ca-nonce'){continue;}var value = request.headers[name];
  19. headers.set(name, value);}
  20. headers.set('x-ca-key', appKey);
  21. headers.set('x-ca-timestamp', timestamp);
  22. console.log("headers: "+ headers.size);for(var key in headers){
  23. console.log("key:"+ key +"value:"+ headers[key]);}return headers;}functionurlToSign(){var params =newMap();var contentType = request.headers["content-type"];if(contentType && contentType.startsWith('application/x-www-form-urlencoded')){const formParams = request.data.split("&");
  24. formParams.forEach((p)=>{const ss = p.split('=');
  25. params.set(ss[0], ss[1]);})}const ss = request.url.split('?');if(ss.length >1&& ss[1]){const queryParams = ss[1].split('&');
  26. queryParams.forEach((p)=>{const ss = p.split('=');
  27. params.set(ss[0], ss[1]);})}var sortedKeys = Array.from(params.keys())
  28. sortedKeys.sort();var l1 = ss[0].indexOf('/',10);var url = ss[0].substring(l1);var first =true;var qs
  29. for(var k of sortedKeys){var s = k +"="+ params.get(k);
  30. qs = qs ? qs +"&"+ s : s;
  31. console.log("key="+ k +" value="+ params.get(k));}return qs ? url +"?"+ qs : url;}functioncalcMd5(){var contentType = request.headers["content-type"];if(request.data &&!contentType.startsWith('application/x-www-form-urlencoded')){var data = request.data;var md5 = CryptoJS.MD5(data);var md5String = md5.toString(CryptoJS.enc.Base64);
  32. console.log("data:"+ data +"\nmd5:"+ md5String);return md5String;}else{return"";}}functioncreateUuid(){return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c){var r = Math.random()*16|0, v = c =='x'? r :(r&0x3|0x8);return v.toString(16);});}

在这里插入图片描述

  1. Content-Type:application/json
  2. X-Ca-Key:{{AppKey}}
  3. X-Ca-Signature:{{Signature}}
  4. X-Ca-Signature-Headers:{{SignatureHeaders}}
  5. X-Requested-With:XMLHttpRequest
  6. X-Ca-Timestamp:{{Timestamp}}
  7. X-Ca-Nonce:{{Nonce}}
  8. Accept:*/*

axios 等价实现 AK / SK 代码

  1. axios实例对象添加请求拦截器
  1. // 请求拦截器
  2. http.interceptors.request.use(function(config){getTokenInfo(config)// 在请求对象中添加 header信息returntrimOnlySpace(config)},function(error){// 对请求错误做些什么return Promise.reject(error)})
  1. 利用 AxiosRequestConfig 实例对象添加头信息
  1. import CryptoJS from'crypto-js'exportfunctiongetTokenInfo(configObj){var appKey ='22918213';//需要根据现场情况修改var appSecret ='wEEt313l0KotykQaN17f';//需要根据现场情况修改functionresetHeadersInfo(key, value){
  2. configObj.headers[key]= value
  3. }functionheadersToSign(){var headers =newMap();for(var name in configObj.headers){
  4. name = name.toLowerCase();if(!name.startsWith('x-ca-')){continue;}if(name ==='x-ca-signature'|| name ==='x-ca-signature-headers'|| name =='x-ca-key'|| name ==='x-ca-nonce'){continue;}var value = configObj.headers[name];
  5. headers.set(name, value);}
  6. headers.set('x-ca-key', appKey);
  7. headers.set('x-ca-timestamp', timestamp);
  8. console.log('headers: '+ headers.size);for(var key in headers){
  9. console.log('key:'+ key +'value:'+ headers[key]);}return headers;}functionurlToSign(){var params =newMap();var contentType = configObj.headers['Content-Type']|| configObj.headers['content-type'];// var contentType = 'application/json';if(contentType && contentType.startsWith('application/x-www-form-urlencoded')){const formParams = configObj.data.split('&');
  10. formParams.forEach((p)=>{const ss = p.split('=');
  11. params.set(ss[0], ss[1]);})}const ss = configObj.url.split('?');if(ss.length >1&& ss[1]){const queryParams = ss[1].split('&');
  12. queryParams.forEach((p)=>{const ss = p.split('=');
  13. params.set(ss[0], ss[1]);})}var sortedKeys = Array.from(params.keys())
  14. sortedKeys.sort();// var l1 = ss[0].indexOf('/', 10);// var url = ss[0].substring(l1);var url = ss[0]var first =true;var qs
  15. for(var k of sortedKeys){var s = k +'='+ params.get(k);
  16. qs = qs ? qs +'&'+ s : s;
  17. console.log('key='+ k +' value='+ params.get(k));}return qs ? url +'?'+ qs : url;}functioncalcMd5(){var contentType = configObj.headers['Content-Type']|| configObj.headers['content-type'];
  18. console.log(contentType)// var contentType = 'application/json'if(configObj.data &&!contentType.startsWith('application/x-www-form-urlencoded')){var data = configObj.data;var md5 = CryptoJS.MD5(data);var md5String = md5.toString(CryptoJS.enc.Base64);
  19. console.log('data:'+ data +'\nmd5:'+ md5String);return md5String;}else{return'';}}functioncreateUuid(){return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c){var r = Math.random()*16|0, v = c =='x'? r :(r &0x3|0x8);return v.toString(16);});}var md5 =calcMd5();var date =newDate().toString();var nonce =createUuid();var timestamp =newDate().getTime();var textToSign ='';
  20. textToSign += configObj.method.toUpperCase()+'\n';// textToSign += 'POST\n';
  21. textToSign +=(configObj.headers['Accept']|| configObj.headers['accept'])+'\n';// textToSign += '*/*' + '\n';
  22. textToSign +=(configObj.headers['Content-Type']|| configObj.headers['content-type'])+'\n';// textToSign += 'application/json' + '\n';var headers =headersToSign();var signatureHeaders;var sortedKeys = Array.from(headers.keys()).sort();for(var headerName of sortedKeys){
  23. textToSign += headerName +':'+ headers.get(headerName)+'\n';
  24. signatureHeaders = signatureHeaders ? signatureHeaders +','+ headerName : headerName;}
  25. textToSign +=urlToSign();// textToSign += '/artemis/api/v1/resource/searchResourcesByAuth';
  26. console.log('textToSign\n'+ textToSign);
  27. console.log('textToSign\n'+ textToSign.replace(/\n/g,'#'));var hash = CryptoJS.HmacSHA256(textToSign, appSecret);
  28. console.log('hash:'+ hash);var signature = hash.toString(CryptoJS.enc.Base64);resetHeadersInfo('domainId',0);// 多线路id ,解决内外网 IP 地址不一致的问题resetHeadersInfo('X-Ca-Key', appKey);resetHeadersInfo('X-Ca-Signature', signature);resetHeadersInfo('X-Ca-Signature-Headers', signatureHeaders);resetHeadersInfo('X-Ca-Nonce', nonce);resetHeadersInfo('X-Ca-Timestamp', timestamp);return configObj
  29. }

响应后的函数 Test

  1. // 1、Status code is 200 检查响应状态码是否为200
  2. pm.test("Status code is 200",function(){
  3. pm.response.to.have.status(200);});// 2、Body matches string 检查响应中是否包含指定字符串// 例①
  4. pm.test("Body matches string",function(){
  5. pm.expect(pm.response.text()).to.include(pm.variables.get("time"));// 是否包含变量time});// 例②
  6. pm.test("Body matches string",function(){
  7. pm.expect(pm.response.text()).to.include("tags");// 是否包含tags});// 3、json value check 检查响应中json 值
  8. pm.test("Your test name",function(){var jsonData = pm.response.json();
  9. pm.expect(jsonData.errmsg).to.eql("ok");// 检查json中errmsg是否等于"ok"});// 4、Is equal to a string 检查响应等于一个字符串
  10. pm.test("Body is correct",function(){
  11. pm.response.to.have.body('{"errcode":0,"errmsg":"ok"}');// 是否等于{"err......}});// 5、Response heads Content- Type 检查是否包含 Content- Type 这种响应头
  12. pm.test("Content-Type is present",function(){
  13. pm.response.to.have.header("Content-Type");});// 6、Response time is less than 200ms 检查请求耗时小于200ms
  14. pm.test("Response time is less than 300ms",function(){
  15. pm.expect(pm.response.responseTime).to.be.below(300);// 耗时是否小于300ms});
标签: postman 测试工具

本文转载自: https://blog.csdn.net/hbiao68/article/details/140705192
版权归原作者 胖鹅68 所有, 如有侵权,请联系我们删除。

“postman 如何查看 request 请求的header和response参数”的评论:

还没有评论