Appium是否可以运行测试,同时触及2个不同的应用程序,一个iOS和另一个Android?

时间:2016-09-16 23:57:45

标签: java android ios junit appium

上下文:我正在使用一个项目,该项目涉及Android控制的硬件和iOS应用程序,通过websocket与该Android设备对话。我们在较低级别(API,单元,合同)测试方面处于良好状态,但没有什么可以帮助我们使用它的UI部分。

UI自动化,特别是端到端不是我最喜欢的测试方式,因为它是片状和慢的,我相信它的目的只是为了保证主用户流是可执行的而不是每一块功能。

所以我开发了一个包含android和iOS代码以及页面对象的套件,但是现在我唯一可以做的就是分别运行它们中的每一个:

  • 启动Android的appium服务器和appium驱动程序,运行android app suite
  • 启动ios的appium服务器和appium驱动程序,运行ios app suite

但这并不是我想要的 - 因为这将是唯一的测试案例,我希望它是完整的端到端;启动appium服务器,启动android服务器,也启动两者的appium驱动程序,运行测试,在ios上放置一个动作,并验证android正在执行它。

我不想让某人手动运行这个东西并查看这两个设备。如果这不起作用,android和ios套件将单独运行,依赖于模拟对手。

所以我把它扔给社区,因为我发布的测试工程组都没有能够得出答案。

我需要知道是否有人曾经做过或看过这个让我失明,或者如果有人知道怎么做。

Can Steve Jobs and Andy Rubin talk?

2 个答案:

答案 0 :(得分:1)

我将研究在不同端口上通过命令行启动2个appium实例,然后将每个套件连接到给定的appium实例。然后,此时您只需要正确地对每个套件进行操作,以便您可以正确测试代码。为此,您需要添加依赖项(可以使用TestNG轻松完成)。

步骤:

1)为IOS和Android套件创建一个线程

2)在不同的appium会话(也称为不同的端口)上运行每个套件

 - You will need to know how to run from command line for this

3)将测试设置为相互依赖(我建议使用TestNG作为框架)

4)使用线程逻辑在开始之前正确等待测试完成。产量和超时将非常有用,以及TestNG依赖性,它将挽救你的生命。

注意:Appium具有超时功能,如果会话在60秒内未获得命令,则会话将被销毁。 AKA确保您增加或找到关闭该超时的方法。

另外作为建议,我建议使用TestNG而不是JUnit。 JUnit是一个单元测试框架,意味着您正在测试特定的功能单元。然而,这对于应用程序自动化并不理想,因为应用程序的许多区域依赖于先前的功能。例如,如果您有登录屏幕,其中登录功能当前已被破坏,您不希望运行用户登录以传递的所有测试。当大部分测试失败时,这不仅会造成很大的恐惧,而且还会使追踪失败的原因变得更加困难。相反,如果您拥有所有这些测试取决于登录功能的传递,那么如果登录失败,则会出现一个错误,然后可以修复,并且当您知道它们将要运行时,依赖于登录功能的所有测试都不会运行通过。

希望这个过程有所帮助,对不起,我显然无法发送代码,因为我需要几个小时输入/计算出来。

答案 1 :(得分:0)

问题解决了,它看起来很简单。

我所做的是实现一个抽象类,用它们的功能和特定的appium端口为android和ios构建驱动程序,同时实例化它们各自的页面对象。所有测试类都扩展了这个抽象类。

然后我将套件分成3块: 一个仅适用于Android,仅访问android的页面对象; 一个用于ios,它也只访问ios的页面对象; 还有第三个测试可以同时控制它们和控制它们。

为了避免总是启动两个appium服务器并且也避免总是为android和ios下载最新的应用程序版本我为每个平台创建了gradle任务,因此CI作业只能调用准备它必须测试的平台的任务在某一特定时刻。