理想情况下,我想找到一个基于云的CI系统,它允许我使用Fork运行UI测试,以便本地Jenkins可以被抛弃而不是内部维护.
我尝试了AWS Device Farm和Firebase Test Lab,但两者都使用他们自己的系统来运行测试.似乎他们没有给出在多个设备上分割单个测试套件的选项.它们似乎是同时在不同设备上运行整个测试套件的好工具,但这不是我想要的CI解决方案(将测试套件同时拆分到多个设备).
尝试了BuddyBuild,但在内部他们使用Firebase测试实验室,所以这对我的情况也不起作用.
我主要考虑的是这些方向的解决方案:
>找到一种在基于云的解决方案上运行Fork的方法
>找到另一种方法来跨多个设备分割单个测试套件
欢迎任何建议!你们是如何解决这个问题的?
解决方法
>创建一个更小,更快的测试用例,每个提交运行最高优先级测试用例,而长时间运行的完整测试套件针对最新的合并提交连续运行.这是整个行业中非常普遍的模式.您可以使用Android的内置@Small,@Medium,and @Large annotations或软件包名称来划分测试.
>优化测试用例,以便一次测试多个功能.基本上,不是测试A1,A2,B1,B2等每个组合,而是仅测试A1,B2.有关更详细的说明,请参阅pairwise testing Wikipedia page.
>如果您的应用程序可以使用,请尝试使用模拟器.在过去几年中,性能有了很大提高.使用英特尔硬件加速执行管理器(HAXM)驱动程序,我发现测试比大多数物理设备运行得更快,更可靠.这也可以使您的目标更容易在云中运行.
>检查每个单独测试运行的时间与其优先级相对应.低优先级长时间运行测试可以移动到不太频繁运行的测试.
>观察测试运行以识别测试的睡眠或其他慢速运行区域以改善.
>寻找从未失败的测试.这些也可能是转向不常运行测试的另一个候选者.
>如果您正在寻找分片测试的其他方法,您可以通过使用adb shell am instrument选项在针对您的测试子集的设备之间启动并行脚本来推出自己的方法.虽然,这会创建许多单独的测试报告,您需要自己平均分配测试.