有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Appium是否能够运行一个测试,同时接触两个不同的应用程序,一个是iOS,另一个是Android?

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

UI自动化,尤其是端到端的自动化,不是我最喜欢的测试方式,因为它是脆弱而缓慢的,我相信它的目的只是保证主要用户流是可执行的,而不是每一项功能

因此,我开发了一个套件,其中包括安卓和iOS代码以及页面对象,但现在我唯一能做的就是分别运行它们中的每一个:

  • 启动适用于安卓的appium服务器和appium驱动程序,运行安卓应用程序套件
  • 启动ios的appium服务器和appium驱动程序,运行ios应用程序套件

但这并不完全是我想要的——因为这将是唯一的测试用例,我希望它是完整的端到端;启动appium服务器,启动安卓服务器,同时启动两者的appium驱动程序,运行在ios上放置操作的测试,并验证安卓是否正在执行该操作

我不希望有人手动运行这个东西,同时查看这两个设备。如果这不起作用,安卓和ios套件将分别运行,依赖于模拟版

所以我把它扔到这里给社区,因为我所投递的测试工程小组中没有一个能给出答案

我需要知道是否有人做过或看到过这件事来给我启示,或者是否有人知道如何去做

Can Steve Jobs and Andy Rubin talk?


共 (2) 个答案

  1. # 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秒内没有收到命令,会话将被销毁。又名确保你增加或找到一种方法来关闭超时

    此外,作为建议,我建议使用TestNG而不是JUnit。JUnit是一个单元测试框架,这意味着您正在测试特定的功能单元。然而,这对于应用程序自动化来说并不理想,因为应用程序的许多领域都依赖于以前的功能。例如,如果您有一个登录屏幕,其中登录功能当前被破坏,那么您不想运行所有需要用户登录才能通过的测试。这不仅会在你的大部分测试失败时引起很多恐惧,还会让你更难找到失败的原因。相反,如果所有这些测试都依赖于登录功能的通过,那么如果登录失败,就会出现一个可以修复的错误,并且所有依赖于登录功能的测试在您知道它们将通过时不会运行

    希望这个过程能有所帮助,很抱歉,我显然无法在这个过程中发送代码,因为我需要几个小时才能输入/理解

  2. # 2 楼答案

    问题解决了,就这么简单

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

    然后我把套房分成三部分: 一个仅适用于Android,它仅访问Android的页面对象; 一个用于ios,它也只访问ios的页面对象; 第三个测试是同时启动ios和android并控制它们

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