流量回放平台学习梳理
平台目的
释放回归测试过程中的资源
术语说明
1、所谓埋点就是在应用中特定的流程收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑,包括访问数(Visits),访客数(Visitor),停留时长(Time On Site),页面浏览数(Page Views)和跳出率(Bounce Rate)。这样的信息收集可以大致分为两种:页面统计(track this virtual page view),统计操作行为(track this button by an event)。
2、PV:Page view页面浏览量或点击量
环境条件
1、基本埋点
细化要执行接口测试的具体接口,每个接口有属于自己业务逻辑的业务埋点。实现方式有spring Aop动态拦截接口...;
2、应用中加入业务埋点
让用户自由组合,不同的业务埋点组合条件组成不同的测试场景;
埋点实现方式
第一种:自己公司研发在产品中注入代码统计,并搭建起相应的后台查询。
第二种:第三方统计工具,如友盟、神策、Talkingdata、GrowingIO等。
案例说明
1)腾讯微信小程序运维中数据统计,累计用户量、今日PV
3、应用日志按规范写入ES库,作为“流量”来源;
应用日志规范参考
1)每次请求都有独立的token标记;
2)应用号用于区分不同的服务应用;
3)接口编号用于区分相同服务的不同接口。
3、已形成的接口自动化平台
实现内容:从数据库读取请求报文(请求url,请求参数,请求头,响应报文),发送请求,对比结果
4、已形成的UI自动化平台
实现内容:接入PuppeteerAPI来代替之前的Seleium,Puppeteer可以调用Chrome的API来直接操作Web
接口自动化
1、构建报文
ES日志导入自动化数据库(前置条件:已形成一套自动化平台,且有数据入库标准规范),按照单次请求进行落地,包括服务的请求报文和请求外部soa的请求和返回;
2、执行
把过程中调用的所有接口使用日志中记录的返回,从而达到“回放”场景的效果。
1)并发执行并且不影响正常的业务测试流程
实现方式:增加token标记形式触发mock测试,请求报文中增加token标记,底层逻辑通过识别标记判断是否需要读取mock返回;
2)对比返回
实现方式:部署了两个环境,一个是生产线上版本代码作为基线版本,另一个则是最新签入代码版本的代码,同样的请求同时发到两个环境,收集接口返回数据和中间的外部soa的请求数据作为要对比的结果。
3、分析
分析两个环境的返回报文和中间soa请求报文,生成了测试报告。
实现方式:
1)对比结果进行聚合,同时支持用户忽略、标记差异。同时每个差异项都会有跳转到测试日志的链接,方便分析定位问题。
2)接入持续集成。每次代码签入自动触发拉取日志到报告分析的整个流程,每次从签入到收到分析报告只需要3min左右。对于使用者来说,只需要在前期配置日志查询条件和分析报告的时候进行介入。
3)ES聚合查询解决大量日志查询成本增加问题。用户选择关注的一些业务埋点,通过ES查询聚合出这些埋点在生产日志中出现的所有组合,同时按照出现概率排序,这样一来,用户无需去拼接一些无效的日志组合即可最大限度的回归线上场景。
图像比对测试
1、引入生产日志流量,只需要服务端的请求和返回,用来当做网页发起的请求的Mock返回,这样用户也能通过日志条件配置的方式来使用UI自动化;
2、采用对比的形式呈现结果,可以是类似接口的对比两个不同版本的环境的展示图片,也可以是对比上一次各个页面的展示;
3、图片比对
实现方式:逐像素矩阵的对比两张图片,对比完后,把不同像素矩阵合并在一起,达到一个不同差一点圈出来的效果,方便用户快速查看不同之处
4、接入PuppeteerAPI来代替之前的Seleium,Puppeteer可以调用Chrome的API来直接操作Web,同时不用打开浏览器,且技术支持较好
5、多测试服务器并发执行任务;OCR接入,识别图片中的所有文案,进行纯文本对比;图片按照模块切片,减少由于模块变动导致的差异;