SandBox改造记-1

经过一段时间的使用,目前已经可以让JVM-Sandbox-Repeater从三台测试服务器上正常的获取到足够多的接口数据了,也设计了一套小的接口测试框架,用于快速的回归已经获取的接口内容。

总体来说使用观感非常的好,快速,便捷,无需额外的维护。利用噪音对比原理,在对比接口返回内容时,也可以非常便捷的识别错误的返回。

但是依然还有一些小的地方,需要按照自己的设想去进行一些改造。

保留用户信息

主要是将 token 对应的用户储存起来,后续使用接口请求时,根据记录的 token ,可以直接使用对应用户的新 token 进行请求。

主要原因如下:

1、相同接口可以是由不同用户去请求的,如果都使用同一个用户的话,对应的 request body 会产生鉴权失败从而导致测试结果对比失败的问题。这样的话,测试起来就没太大意义了。

2、token 失效问题,公司的产品有效时间较短,token 会频繁失效,如果原原本本的按照记录下来的 request headers 去做请求,依然会出现鉴权失败的问题。

所以想了一个处理方法。

新建了两个表:

module_user:用于储存用户的登录信息,用于用户登录。

module_user_token:用于存储 token 对应的 moudule_user_id。

新增了部分源码:

在 repeater-console 的 saveRecord 方法中新增一层判断,如果是登录方法,则解析 request_body 和 response_body 的内容,将需要的信息分别往两个表中存储。

源码暂时不方便公布,不过用 JPARepository 写起来也很方便,逻辑判断和内容拆解的话,有正常的代码水平,即使没写过 JAVA 也应该很容易写出来。

这样的话,每次登录都能将新的 token 记录下来,并与对应的用户进行绑定,后续每次回归 Record 表中的数据时,都能根据 request body 中的 token 获取到对应的用户,重新登录后对这条 Record 进行回归。

过滤测试请求

使用过程中,每次测试都会新增很多测试的请求,这些请求并不是正常的请求,会污染 Record 池,后续测试的时候需要将 Record 池中的 Response 当做标准答案做校验,所以必须保证 Record 中的数据都是项目中产生的实际数据,不能有测试数据。

这个写起来也很简单,只需要在 Sandbox 的源码 doBefore 中判断一下是否存在规定的校验字符串即可。

最开始想着在 headers 中增加一个 key,判断 key 是否存在即可,后面测试了几次都无法正常获取到该 key,时间有限也就没做更多的深究,选择了一个折中处理的方案,在其他 key 对应的 value 中增加了一个校验字符串,然后判断 headers 中是否存在这个校验字符串即可。

噪音对比代码

对比逻辑是根据 Twitter 开源的 diffy 库进行重写的。

image

主要的逻辑如上,需要准备三个版本的 response body。

第一个版本是稳定版本(primary),是正确答案。一般是选择线上版本或者灰度版本,对该接口内容进行一次请求,得到的 response body,根据自身的情况选择即可。总之就是可信任,无明显 BUG 的版本。

第二个版本是稳定版本副本(origin),也是正确答案。我的选择是直接使用 Record 库中的 response body。

第三个版本就是待测试版本(target)了,使用测试服务器进行一次请求即可得到。

有了三个版本的 response body 之后,就按照上图的内容,进行两次噪音获取,分别是 origin_noise 和 target_noise。我自己写的代码是分成了四个维度:是否存在,value类型,value长度,value值。得到一个五位的二进制数,第一位是缺省位,默认为1。

这样,分别对比相同 key 的噪音,只要 target_noise >= origin_noise 就表明目标 key 的数据是符合预期的。

这样的对比并不是100%正确的,但是最起码可以保证98%的情况可以正确判断是否有效。

剩下的2%,有1%的错误,只要对 origin_noise 做严格验证,确保某些字段必须全部吻合(主要是 code 和 message 这些),也基本能保证。

最后的1%,是属于新增字段的,这部分内容我的做法是打上一个标记,直接生成一个新增了字段的接口报告,可以直观的看到哪些接口新增了字段,然后人工做一个判断。

总结

第一阶段的改造已经完成了,期间花的时间也不是特别多,一部分是写的JAVA,一部分写的是老本行Python,总的来说都达到了预期的目标。

完成了这些功能后,就可以以Sandbox为地基,去搭建一些大家都喜闻乐见的落地内容了,我自己还是非常期待后续的工作的,毕竟整个自动化的工作模式有了非常巨大的变化,可以预见的是绝对可以带来非常大的提效作用,具体能做到什么程度就又需要我谨小慎微的去实践了。

你可能感兴趣的:(SandBox改造记-1)