*项目名称:流量回放平台
背景:互联网研发交付节奏短,技术演进,回归测试容易成为瓶颈;跨部门/业务调用,只mock桩无法独善其身;项目交接,刚交接完就上线,无法准确评估影响范围
关键步骤:
1) 分析实际业务,整合http(diffy)和jvm sandbox(repeater)两套技术实现,形成一套流量回放解决方案.
2) 根据项目类型、接口读写性质以及测试数据情况等自动分发.
3) 借助repeater原生能力实现下游mock,把一次请求的入参、出参、下游调用等序列化并进行存储.默认将httpservlet的拦截作为入口调用,录制入参和返回值.
4) 程序执行过程中对某下游方法的调用,主要是从入口调用进行区别,回放时该调用的返回值可被mock.回放时不会发生真实调用,利用sandbox流量干预能力,根据mockstrategy搜索匹配,将录制时的返回值直接返回.
成果:缩短回归测试时间,提高交付能力;专项测试节约1~6人天/次;提升回归测试代码覆盖率40%以上.
*项目名称:Android app应用覆盖率收集组件开发
背景:为了进一步提升精准测试水平,打造测试覆盖率闭环,满足app持续集成的质量要求,所以针对app应用进行测试覆盖率收集组件的开发工作。
关键步骤:
1) 通过在应用持续集成流水线构建时提前给应用插桩(涉及覆盖率收集插桩和覆盖率信息上报插桩)达到应用APP在测试完成后能够自动上报并收集测试覆盖率的目的
2) 针对gradle插件tansform API进行了重构完成覆盖率信息上报插件的开发,插件内部使用ASM字节码增强技术完成对覆盖率信息上报的插桩处理;
3) 利用springboot开发插桩处理微服务组件,通过调用jacoco API和okhttp API完成覆盖率数据生成和上报等处理操作,作为服务提供者供覆盖率信息上报插件调用;
4) 利用springboot开发文件处理微服务组件,完成对手机应用上报的覆盖率数据的接收、合并、持久化、上传等处理操作;
成果:该服务组件上线以来,在应用前端的敏捷测试过程发挥了极大作用,帮助测试人员提升了APP的测试覆盖率,app应用的线上问题大幅度下降。
*项目名称:java服务测试覆盖率组件开发
背景:为了提升团队精准测试水平,分析每次迭代未覆盖部分的代码,反推在前期测试设计是否充分,以及检测程序中的无用代码,核查代码设计中是否存在思维混乱点,进而提升代码质量,所以对jacoco基于jenkins持续构建插件进行了二次开发.
关键步骤:
1) 通过jacoco dump指令获取测试完成后的 exec 文件(二进制文件,里面有探针的覆盖执行信息);
2) 获取基线提交与被测提交之间的差异代码:基于AST语法树进行基线版本和测试版本代码对比,获取增量差异代码diff文件.
3) 将差异代码进行解析,切割为更小的颗粒度,选择方法作为最小纬度;
4) 改造 JaCoCo methodAnalyzer,使它仅支持对差异代码生成覆盖率报告;
成果:该工具上线以来,在版本迭代敏捷交付的过程中已经协助测试人员发现了一些测试设计上存在的问题,有效的提升了增量代码的覆盖率,对交付产品的质量提升起到了很好的促进作用.
*项目名称:接口测试平台
背景:为了降低接口测试门槛,提升测试质量,采用django web框架,采用分层设计,结合Python单元测试框架unittest和macaca ui测试框架进行开发,主要功能实现了对http协议接口和app应用ui测试脚本在平台进行维护以及定时执行;主要功能包括测试脚本管理、测试套件管理、定时任务管理等
关键步骤:
1) 分析接口测试用例构成,抽象用例结构(接口用例构成:运行上下文+配置+用例主体(header、url、vars、parameter)+响应校验+相应提取等;ui用例构成:运行上下文+元素集+断言等)和用例集结构,确定数据存储(yaml)方式.
2) 设计用例分层结构(基本的api,测试场景(由api构建),测试用例集),便于用例复用和灵活组装.
3) 用例执行实现(接口:python request库;ui:macaca和webdriver)以及执行方式实现(异步(ajax+Django-celery)和同步).
4) 测试过程中需要的动态数据通过相关服务刷新到redis进行存储供消费者使用.
5) 测试报告展现实现主要通过视图层view中进行相关逻辑处理后在相应模版层template中展示.