接口测试 借助 anyproxy 二次开发,改善统计打点日志测试流程

君河 · July 07, 2017 · Last by wumeijun replied at June 24, 2019 · 4320 hits

借助 anyproxy 二次开发,改善统计打点日志测试流程


统计打点测试需求

  • 最近公司主产品加入了很多用户行为日志打点,目的是将数据推给大数据部门,改善现有推荐方法,进行人工智能推荐,增加用户留存和活跃等。
  • 如果前端测试未做好,遗漏或者错误打点,就会严重影响后续的推荐和机器学习训练。
  • 那么功能测试工程师一般是怎么测试的呢?首先通过设计特定的打点场景执行步骤,然后用 charles 等抓包查看。由于上传数据都是加密的,那么可能需要提前打未加密的测试包。然后抓到包后,需要把 request 中对应的 json 数据结构化,找到关心的字段,对照 wiki 中的值的含义来判断测试用例是否通过。

anyproxy二次开发改善测试流程

  • anyproxy 是阿里的一个开源项目,它可以作为中间代理代替 charles ,作为测试抓包工具使用。现在我在 anyproxy 上进行了二次开发,主要还是把 request 进行了一下处理,解密了上报的数据包,通过一些改动增加测试效率。

  • 二次开发后,增加如下功能:

  1. 上报日志包解密。之前测试都是重新打包,打包不加密的测试包进行测试,现在可以直接用外网包解密查看日志内容。

  2. 上报日志包字段解析。实际多数情况下,测试并不关心 log 中通用字段,而比较关心 event 等核心事件字段,所以专门将 event 字段列出,解析 json 后用类似 key-value 对的方式展示。同时可以良好地展示一个请求中含有多个 event 事件的情况。

  3. event 事件字段含义的说明。根据 wiki 内容,建立字典查询,对 event 中,某些字段直接给出说明。在实际应用中,可以结合业务用多种说明的方式,比如特定事件的字段全解析,特定字段展示全部情况的说明,特定字段根据 value 返回结果。

  4. 还可以有一些其他的改进,比如,把 Unix 时间戳转标准 Date ,把核心字段做标记。

实际截图

上报流程思考

这是我理解的日志上报的流程,测试完全可以插入其中展示自己的能力。
我们在 ① 和 ② ,即 Client 和 Proxy 和 Server 间可以有较大的操作空间,可以抓到上报,在 anyproxy 中通过 rule.js 篡改 request 、篡改 response ,亦可以把上报收集、整理通过某种方式处理展示,达到你想要的目的。想想可以,在前面自动化构建应用场景,在后面通过日志断言结果。也可以在中间构造一堆假的请求,遍历自己的程序逻辑点。
③ 通常是运维或者数据团队将日志统一存储到集群的机器上。
④ 这部分可能是很多团队欠缺的,如何将数据有效地展示、把存入后台的日志做分析和展示。

共收到 16 条回复 时间 点赞

学习了,解密请求内容还是挺常见的功能,回头我去翻下看看怎么实现解密请求和解密响应内容
另外web界面是在哪里修改的,我看文档只有写到自定义规则,新添加的字段怎么才能展示在web界面呢?

看了下,解密是得用js重写客户端解密的逻辑吧,又得去学下js的语法了。。

—— 来自TesterHome官方 安卓客户端

君河 #3 · July 07, 2017 作者
雪怪 回复

这是当然的。。全部都是JS写的。

用fiddler就能实现

5Floor has been deleted

请问client端的触发逻辑怎么实现的?

看了下,fiddler也是要用js实现解密过程
anyproxy 好在是跨平台的,fiddler现在只能windows下用吧😁

雪怪 回复

嘿嘿,我也只是略懂😨

君河 #9 · July 10, 2017 作者

恩,因为mac工作环境,就没去研究fiddler~~

君河 #10 · July 10, 2017 作者
simple 回复

目前来说Client是测试手工触发的。因为业务团队觉得这块用UI自动化不太好,不太放心,于是就没做。如果前面的UI层能做好是可以打通流程的。

君河 回复

嗯,我们目前还是在思考办法想打通这个环节

想问下,是怎么实现在原本的web界面新增字段,例如截图上的除了原始body内容,还展示了解密后和eventlog
anyproxy自定义规则只能修改原有的字段。。js完全不熟,项目里面的main.js看了2天,楞是找不到请求的参数什么的是从哪传过去的😰

君河 #13 · July 14, 2017 作者
雪怪 回复

在web文件夹下,index是抓包页面,page.js是打开后的详情页。你可以搜索summarySection,这个变量展示request和request body等一堆内容。仿照其他的修改此变量即可。

向阳 用 anyproxy 记录移动端 UI 测试数据 中提及了此贴 27 Sep 20:26
16Floor has been deleted
17Floor has been deleted

在web文件下,没有发现page.js 这个文件,而且我把web 文件导入sublime下,也没查到summarySection 这个

Author only

针对websocket有处理没,我需要处理ws相关的接口,没整好前来请教。

有源码吗大牛

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up