本节我们准备搞定这个加密的生成算法。
好的,在这大家也跟了150期了,对于这个算法的实现,能否知道从哪下手呢?觉得难么?
如果觉得难,那么此时要怎么办?能帮助你的就是 热饭的《测试开发方法论》
方法论迟早会成书,目前已经在设计中了,到时候打赏过的同学都可以成本价拿到书,排名前100的同学都会免费收到,而且博主亲自签名款哦~
根据《测试开发方法论》中所说:
当想要做一个工具方法函数的时候,通过固定的步骤来设计就会很简单且简单实现:
1. 这个函数要写在哪?
写在views.py中,游离在外,方便调用。
2. 这个函数要干什么?
生成最终的sign或者其他加密字段,并返回拼接好后的url和body!
3. 这个函数需要什么上游数据?
需要数据库拿出来的url和body,然后是项目id,根据项目id来获取到加密表达式和加密位置。
4.这个函数要怎么调用?
各个上游函数,通过a,b = func(a,b,c) 来调用。这几个变量大家应该知道是什么了,就是url,body,project_id。
5.这个函数内部要怎么实现?
首先我拿到的有完整的url+body, 然后还有加密表达式,那么完全可以用Python代码来计算出最终的变量。然后根据加密插入位置 来决定给url还是body加入,最后把拼接完的url和body送返还给调用者即可。
6.这个函数要求什么性能么?
当然有要求,这个函数在所有需要加密的请求中均会运行一次,而且如果遇到非常长的url和body,并且加密过程很繁琐的情况下,如果算法不够智能,则会严重拖慢使用体验。不过我们当前要解决的事完成实现,而非优化。关于什么时候优化,优化的目标,程度和手段,同样可以在《测试开发方法论》中找到答案。
7.兼容性稳定性健壮性等等
这个优先级要高,作为一个被调用的桩函数,它接收到的数据可能是多种多样的,那么这里首先要保证的就是不能报错,然后是想尽办法适配各种类型的,比如url 有的人写的后面没有参数,有的有参数,有的后面是?有的后面是/或.com或其他字符串,那我们进行拼接新的加密字段的时候,就要针对这些情况做出不同的对应方案才可以让上游函数放心调用。
然后继续进行下列思考:
因为函数比较复杂,所以我们准备先去草纸-test.py中,去实现,这样多轮调试可以很快节省成本,等实现后,再复制到项目views.py中即可,这也算是个快速开发的小窍门,同样可在《测试开发方法论》中找到。
不过我们这里仍然漏掉了一个重要参数,那就是body的类型,在我们的body中有 none,form-data,x-www.. 和 纯文本格式的 raw-json , raw-text 甚至url,js等等类型,那么加密字段要想插入它们的写法必然也是不同的,甚至提取的时候就不同,此时我们应该传入请求体类型。
那么对于一些无法提取和无法插入的请求体我们要怎么办呢?答案是不办!直接返回无法插入就可以了,能这么操作的用户估计是不会用,你一个加密字段,你往一段xml里插什么插,你是接口测试人员么?当然我们不用真的嘲讽,只需要不执行即可。
好本期思考完毕,希望小伙伴能自己先根据这些锻炼的设计出来,下期我再开始正式代码实现。