【腾讯TMQ】像google一样测试系列之三:方案选型篇

2024-04-14 04:32

本文主要是介绍【腾讯TMQ】像google一样测试系列之三:方案选型篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

三种测试模式预研

在测试代码放在什么位置上,及如何运行上, 经历了如下过程:

最初模式:采用google官网单测模式:Local unit tests和 Instrumented Tests。

但:组内希望与大组保持一致,即用testng,提供一个界面点击后运行用例。同时是运行在业务app内。

因此,模式a诞生

模式考虑:和开发代码写在同一目录下,以不同package区分,同时新建测试activity界面供点击运行用例,整体测试代码编进开发代码以app运行。

缺点:

(1)和业务耦合太大,业务app在打包时需要裁掉测试代码和资源,和mainfest.xml中的测试元素。开发也不建议写在一起;

(2)同时都能以命令行运行了,还要搞界面来点击运行用例,感觉多此一举;

(3)测试范围上有些减少,比如 Android层的测试,Activity内一些private的逻辑的测试,则测试不了。非要测,就会变成触发UI点击来测,就变成了UI自动化了;

(4)与google单测理念不一致,一些google提供的测试库不支持;

(5)调试不方便,每调试一次,都要打一次包,而打包耗时较久。

优点:

(1)测试代码是在真的Android环境上执行;

(2)可以直接调用业务代码和被测接口。

综上,考虑到该模式,在测试范围,业务代码耦合,CI上,均不够好,因此放弃。

希望继续保持和大组一致,诞生了模式B。

模式考虑:因为目前小组内的产品,均是AS+gradle开发环境,而且AS+gradle也是行业趋势。因此,新建module,类型为lib,测试代码写在module下,同时被业务module依赖,相当于手管插件方式。和业务代码统一打成app,真机运行。

缺点:

1.、需要先运行业务app,才能触发测试代码,如果还需要和大组有界面点击运行,仍然需要在业务代码上 增加该代码,也是有耦合,同时业务app在打包时,需要裁掉该代码;

2、因为module只能是lib,因此被测接口要反射来调用,不能直接调用;

3、调试不方便;

4、业务打包,要裁掉该module;

5、测试范围上同样有些减少,比如 Android层的测试,Activity内一些private 的逻辑的测 试,同样测试不了。

优点:

1、测试代码剥离了,和业务耦合小了点。也可以不用界面点击来运行;

2、测试运行环境为真Android环境。

综上,考虑到该模式,在测试范围,调试方便性,均不够好,因此放弃。

最终还是回归到了最初模式:Local Unit Tests和Instrumented Tests。

方案选型

在经过各模式的预研,实践,选好测试模式后,选用什么框架来测试也是个选择。

考虑的是:Robolectric。

Robolectric样例代码:

综上:

1、从Robolectric样例代码可以看出,目前Robolectric 基本是 从UI层介入,理论上可以忽略UI层,测试单一组件的逻辑,但关键的是不能测试组件的集成逻辑。

2、android层的测试也是运行在PC端的,它并不能测试业务app在真实Android环境上的表现。

因此,最终放弃了Robolectric,选择了Local Unit Tests和Instrumented Tests。

未完待续……

关注微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!

这里写图片描述

这篇关于【腾讯TMQ】像google一样测试系列之三:方案选型篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/902072

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL容灾备份的实现方案

《MySQL容灾备份的实现方案》进行MySQL的容灾备份是确保数据安全和业务连续性的关键步骤,容灾备份可以分为本地备份和远程备份,主要包括逻辑备份和物理备份两种方式,下面就来具体介绍一下... 目录一、逻辑备份1. 使用mysqldump进行逻辑备份1.1 全库备份1.2 单库备份1.3 单表备份2. 恢复

redis中session会话共享的三种方案

《redis中session会话共享的三种方案》本文探讨了分布式系统中Session共享的三种解决方案,包括粘性会话、Session复制以及基于Redis的集中存储,具有一定的参考价值,感兴趣的可以了... 目录三种解决方案粘性会话(Sticky Sessions)Session复制Redis统一存储Spr

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指