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

2022-05-19 10:18:54 浏览数 (1)

继续更新接口测试平台:

  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看看。

发现都可以成功塞进去。

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

0 人点赞