前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口测试平台代码实现153:加密算法更新

接口测试平台代码实现153:加密算法更新

作者头像
我去热饭
发布2022-05-19 10:18:54
2150
发布2022-05-19 10:18:54
举报
文章被收录于专栏:测试开发干货

继续更新接口测试平台:

  1. 先来改一系列的小bug:(admin后台数据的展示None时报错)

这个bug是什么意思呢?就是当我们删除一个数据时,结果报错说,返回的必须是str 而非None。这个问题的原因在于我们的models.py中的 返回展示部分:

返回的self.name, 而创建的时候,默认又是空的None。所以这里会报错。所以为了以防同类情况再次出现。我们先把所有的这种全加上str() 包裹。就算是None,也会显示 字符串的"None" ,而不会再报错了。

好,然后开始既进入正文:【加密算法的继续更新】

首先,先让我们回忆一下当前进度。

我们说要做一个函数,来接受url,body,project_id, 进行加密计算后 把加好的url和body 返回回去。

当前函数如下:

注意,我们已经对函数进行步骤划分,且完成到了从url中提取需要处理的字段名。

打印的效果如下,算法目前可识别出来最终的加密字段名为sign,需要有三个变量,token,userid,time, 其中token 我们成功找到值123abc,userid 和 time暂时为空。

让我们开始从body中取:

body一共我们支持俩种类型,也就是form-data/x-www-form-urlencoded的 二维列表字符串,还有raw-json的字典字符串。

不论哪种我们都直接用正则取即可,又快又方便。

不过这里我们要注意,正则的值有可能是被""包裹起来,也有可能非包裹,比如某数字。所以我们最好是直接全拿,然后忠实替换最好。

如图,分别对俩种格式进行了正则提取。结果如下:

注意,在userid作为i的循环时,成功拿到了值。

然后我们做个简单的判断,意思是url和body中 只要任意一次提取成功便不再继续提取 浪费时间。然后顺便直接给替换到 我们的加密表达式中,最后打印一下表达式:

注意这里,运用了 str(eval( 的方式 进行解析和拼接,以便数字、字符串、列表等格式均可以正确插入。

可以看到,已经成功拼接到表达式中了。

然后还有个#time#没有处理好,也就是当所有地方都不存在这个需要解析的字段时,我们直接运用我们的预置处理办法。

注意,这个最后的判断我们是可以写很多预置字段的。

结果如下:

可以看到,加密字段已经如我们所期望的那样,成功替换到了加密表达式中。所以我们接下来,就是对这个加密字段求值。

首先导入base64的包 或者 md5等等之后用到的:

注意,我之前写的加密表达式是伪代码,真正的base64并不是这么简单的。

所以我们现在来把之前的假表达式,换成真的可以求值的一个表达式:

如图:

base64内部的各种方法,里面的参数必须是encode() utf-8的,且最终的结果需要再次decode() 才能使用。 括号里若是utf-8 则可以省略不写:

代码语言:javascript
复制
sign=base64.b32encode(("token=#token#"+"userid=#userid#"+"#time#").encode()).decode()

复制到平台保存好。代码改成如下:

打印了最终加密结果:

然后我们最后一步,就是插入到url/或body中。

首先是url:

进行了各种判断:结果如下:

可以看到是成功了

然后是body,body这个比较复杂,需要判断类型,并且在之后还要恢复字符串格式。

好了,到此为最后一步了,然后我们打印下各种情况的body看看。

发现都可以成功塞进去。

本节内容到此结束。下一节课,我们讲在 普通调试、登录态节课、用例模块 三处进行调用该功能。且对一些异常情况做好处理工作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发干货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档