继续更新接口测试平台:
- 先来改一系列的小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看看。
发现都可以成功塞进去。
本节内容到此结束。下一节课,我们讲在 普通调试、登录态节课、用例模块 三处进行调用该功能。且对一些异常情况做好处理工作。