分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程
一、前言
早期一个产品的上线,需要经过开发测试环节,而随着功能不断地迭代,测试要回归的功能越来越多,花费的时间也越来越长。一方面降低了发布频率,另一方面也很难保证上线完全没问题。后来引入自动化,但是自动化用例编写和维护都需要耗费大量人力和时间,因此,我们开始着手开发一套不需要使用者完全介入的平台。
二、怎么做
目前业界各公司各团队很多都在搭建属于自己的流量回放系统,大家的思路是把线上的流量放到测试环境回放,回放后分析系统存在的问题。
我们团队的流量采用的是生产环境ElasticSearch中的日志,ElasticSearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。通过其提供的一些接口,可以很方便地进行日志查询,查询方式包括精准和模糊查询,结果可以聚合。由此,可以很方便地当做我们的“流量”来源。
我们的流量回放平台包括了接口自动化测试和UI自动化测试两个方面,下面介绍这两个方面的实施方案。
三、接口自动化测试
一次单独的接口自动化流程可以抽象成构建报文,执行请求,分析返回三个部分。
3.1 构建报文过程
1)我们规范化了ES的记录方式,每次请求都有独立的token标记,同时也会存在一些基本埋点,比如应用编号用于区分不同的服务应用,接口编号用于区分相同服务的不同接口。
2)每个接口也有属于自己业务逻辑的业务埋点,比如订单状态、支付状态。通过基本埋点,用来细化我们要执行接口测试的具体接口,通过业务埋点,可以让用户自由组合,不同的业务埋点组合条件组成了不同的测试场景,对于平台来说只需要执行这些日志对应的接口测试即可。
3)搜索ES日志,把日志导入我们的自动化数据库,按照单次请求进行落地,包括服务的请求报文和请求外部SOA的请求和返回。
3.2 执行过程
把过程中调用的所有接口使用日志中记录的返回,从而达到“回放”场景的效果。
1)为了能够并发执行并且不影响正常的业务测试流程,我们通过给请求增加token标记的形式来触发Mock测试:在请求报文中增加日志中的token标记,底层逻辑通过识别标记判断是否需要读取Mock返回。
2)为了对比返回,我们部署了两个环境,一个是以生产环境线上版本代码作为基线版本,另一个则是最新签入的代码版本,同样的请求同时发到两个环境,收集接口返回数据和中间的外部SOA的请求数据作为要对比的结果。
3.3 分析过程
分析两个环境的返回报文和中间SOA请求报文,生成测试报告。为了提升分析的效率,会对对比结果进行聚合,同时支持用户忽略、标记差异。同时每个差异项都会有跳转到测试日志的链接,方便分析定位问题。
在此基础上,我们接入到了持续集成过程中,每次代码签入自动触发拉取日志到报告分析的整个流程,每次从签入到收到分析报告只需要3min左右。对于使用者来说,只需要在前期配置日志查询条件和分析报告的时候进行介入。
一些接口随着业务逻辑的增加,业务埋点越来越多,日志埋点组合也越来越多,人工维护日志查询条件方式的成本开始增加。为了解决这个问题,我们利用了ES查询的聚合查询功能,提供了一个方案,用户选择关注的一些业务埋点,通过ES查询聚合出这些埋点在生产日志中出现的所有组合,同时按照出现概率排序,这样一来,用户无需去拼接一些无效的日志组合即可最大限度的回归线上场景。
四、UI自动化测试
我们之前的UI自动化过程,往往是唤起具体的页面,通过识别页面元素,发起输入点击等操作,再通过一些元素的出现判断用例成功失败。存在的问题有:
- 不稳定,网页经历比较大的改版,UI自动化用例也需要大规模修正。
- 用例编写成本较高,一个用例如果牵扯的流程比较复杂的话,往往需要编写很多代码。
- 结果不明显,对于报告来说,如果出现差异,往往需要用例的Owner来分析,或者分析失败时候的截图,倘若图片是整个页面的截图,还需要细致分析具体是哪个地方有问题。
借助接口流量回放的思路,我们对于UI自动化流程进行了改良。
- 同样的引入生产日志流量,差别在于只需要服务端的请求和返回,用来当做网页发起的请求和Mock返回,这样用户也能通过日志条件配置的方式来使用UI自动化;
- 同样的采用对比的形式呈现结果,可以是类似接口的对比两个不同版本环境的展示图片,也可以是对比上一次各个页面的展示;
- 逐像素矩阵的对比两张图片,对比完后,把不同像素矩阵合并在一起,达到一个不同差一点圈出来的效果,方便用户快速查看不同之处;
- 监听页面发起的请求,收集后,类似我们在接口自动化过程中对比请求的模式;
- 接入PuppeteerAPI来代替之前的Selenium,Puppeteer可以调用Chrome的API来直接操作Web,同时不用打开浏览器,且技术支持较好;
- 多测试服务器并发执行任务;
- OCR接入,识别图片中的所有文案,进行纯文本对比;
- 图片按照模块切片,减少由于模块变动导致的差异;
这套UI自动化最主要特点就是避免了用例的维护,接入成本也比较低,基本上任何Web页面只要是按照特定格式把日志存入ES,都可以快速接入,用户只需要配置不同的日志条件和分析差异。
整个流量回放平台上线使用以来,已经运行了5W+次,发现了3000+的问题,平均每天发现10+个问题。省去了回归测试时间,提升整体的发布频率,从之前的每周只能发布一次提高到了一周可以发布三次。
流量回放平台释放了我们在回归测试过程中的资源,但是没有平台是能百分百保证质量的。我们的目标,就是在工作过程中持续发现一些改进点,研发更多的平台工具来释放人力,保证整个研发过程的质量。