【腾讯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

相关文章

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接