51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4946|回复: 1
打印 上一主题 下一主题

[讨论] postman接口测试系列: 时间戳和加密

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-13 13:43:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用postman进行接口测试的时候,对于有些接口字段需要时间戳加密,这个时候我们就遇到2个问题,
其一是接口中的时间戳如何得到?其二就是对于现在常用的md5加密操作如何在postman中使用代码实现呢?
下面我们以一个具体的接口例子来进行说明。
首先来看看我们的接口文档信息,如图所示

此接口文档中,需要三个参数customercode、timestamp和itoken(是customerCode+timestamp+ytoken
加密后的结果)。
第一次操作的时候,我们使用postman会这样操作,如图

这样操作流程是:

选择提交方式是post,输入接口的url地址
选择接口情况的方式是x-www-form-urlencoded
设置接口的参数customerCode、timestamp和itoken和值
设置完成之后点击send发送,查看接口响应结果
说明

x-www-form-urlencoded即是application/x-www-from-urlencoded,将表单内的数字转换为键对值

postman中 form-data、x-www-form-urlencoded、raw、binary的区别:

http://blog.csdn.net/ye1992/article/details/49998511

时间戳转换工具:

http://tool.chinaz.com/Tools/unixtime.aspx

md5加密工具:

https://md5jiami.51240.com/

这样创建会话的接口我们就完成了!但是为了系统的安全性,这里的timestamp是每30分钟就会过期的,
下次我们又需要重新设置timestamp,就是md5加密的结果......这样操作岂不是太麻烦?

还好postman中Pre-Request Script可以在 Request 之前自定义请求数据,这样做的好处就是可以以嵌入
脚本的方式动态准备测试数据,并根据业务需求设计测试用例。

这里我们仍继续以上面的用例为例:

在postman中,如何才能获取当前机器上的timestamp呢?

  1. Math.round(new Date().getTime())
  2. 可以满足我们的要求!!!
  3. 那代码如何实现呢?

  4. //设置当前时间戳毫秒
  5. postman.setGlobalVariable("timestamp",Math.round(new Date().getTime()));
  6. 这样就将获取的时间戳设置为全局变量timestamp
  7. 我们知道itoken的值是md5(customerCode+timestamp+ytoken')
  8. 那么接下来就可以动态的获取md5的信息了,代码如下:

  9. //发起请求之前获取当前的时间戳放在参数里
  10. //postman.setGlobalVariable("customerCode","***2345677***");
  11. //1.设置环境变量 postman.setEnvironmentVariable("key", "value");
  12. //2.设置全局变量 postman.setGlobalVariable("key", "value");
  13. //environment.customerCode = "***2345677***";
  14. customerCode = postman.getGlobalVariable("customerCode");
  15. //设置当前时间戳毫秒
  16. postman.setGlobalVariable("timestamp",Math.round(new Date().getTime()));
  17. //environment.timestamp = Math.round(new Date().getTime());

  18. //postman.setEnvironmentVariable("unixtime_now","timecode");
  19. //var jsonData = JSON.parse(request.data.applyJsonStr);
  20. //postman.setGlobalVariable("ytoken","*********b176a4739bfccb*********");

  21. //获取全局变量
  22. //如postman.getGlobalVariable("key");
  23. customerCode = postman.getGlobalVariable("customerCode");
  24. timestamp = postman.getGlobalVariable('timestamp');
  25. ytoken = postman.getGlobalVariable("ytoken");

  26. var str = customerCode+timestamp+ytoken;


  27. //postman.setEnvironmentVariable("str",str);
  28. //environment.str = str;
  29. postman.setGlobalVariable("str",str);
  30. //var md5 = CryptoJS.MD5(str).toString().toLowerCase();
  31. //使用md5加密
  32. //var strmd5 = CryptoJS.MD5(str).toString();
  33. var strmd5 = CryptoJS.MD5(str);
  34. //environment.strmd5 = strmd5;
  35. postman.setGlobalVariable('md5',strmd5);
  36. //environment.md5 = md5;
  37. //timecode=System.currentTimeMillis();

  38. console.log(str);
  39. 而在接口请求中,就可以使用已经定义好的变量来进行接口操作,代码如下

  40. customerCode:{{customerCode}}
  41. timestamp:{{timestamp}}
  42. ltoken:{{md5}}
复制代码

如图所示

这样下次创建接口的时候,直接运行该用例即可,不用再次修改参数值~(≧▽≦)/~
那么我们如何才能知道该接口用例是成功的呢,该怎么断言呢?
这里列出我该接口断言的一个示例,代码如下

  1. /*
  2. // 推荐用全等 ===,确保类型和值都一致
  3. tests['Status code is 200'] = responseCode.code === 200;
  4. // 判断是否存在 'success' 值  
  5. tests["Body matches code"] = responseBody.has("0");

  6. var jsonData = JSON.parse(responseBody);
  7. postman.setEnvironmentVariable("sessionId",jsonData.result);

  8. tests[`[INFO] Request params: ${JSON.stringify(request.data)}`] = true;

  9. tests["have result "]=jsonData.hasOwnProperty("error")!==true;
  10. tests[`[INFO] Response timeout: ${responseTime}`] = responseTime < 6000;
  11.     **/
  12. //状态代码是200
  13. if(responseCode.code === 200){
  14. // 判断是否存在 'success' 值,检查响应体包含一个字符串
  15. tests["Body matches code"] = responseBody.has("0");
  16. //响应结果中result保存为全局变量sessonId
  17. var jsonData = JSON.parse(responseBody);
  18. postman.setGlobalVariable("sessionId",jsonData.result);
  19. //输入接口参数信息
  20. tests[`[INFO] Request params: ${JSON.stringify(request.data)}`] = true;
  21. // tests["have result "]=jsonData.hasOwnProperty("error")!==true;
  22. //判断接口响应结果有result
  23. tests["have result "]=jsonData.hasOwnProperty("result")===true;
  24. //判断接口响应时间小于N秒
  25. tests[`[INFO] Response timeout: ${responseTime}`] = responseTime < 6000;
  26. }else{
  27. //接口请求失败
  28. tests["Waring:Request Failed. Please Fix!"] = false;
  29. }
复制代码

这样创建会话的接口就完成了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    无聊
    2018-7-6 18:55
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
    发表于 2018-8-15 10:00:43 | 只看该作者
    发现所有百度出来的加密的都是同你的一样,哎
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-23 03:59 , Processed in 0.067860 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表