首页 > 解决方案 > 如何使用 TestNG、Java 和 Appium 在多个移动设备上并行运行每个测试?

问题描述

我有 5 台移动设备,我想在所有设备上运行我的自动化移动应用测试用例以检查兼容性。为此,我需要同时在所有 5 台设备上运行每个测试。因此,如果我有 10 个测试用例,每个测试用例都将在所有设备上运行,总计数为 50。

我正在动态创建设备池。该池将具有连接到主机的设备。因此,在运行测试用例之前,它不会对设备 UDID 有任何事先了解。我知道要为此创建多个 Appium 会话。问题是我需要根据连接的设备数量以某种方式创建每个测试用例的多个副本,然后在所有设备上运行每个测试用例。

例子:

@Test
public void test1(){
}
@Test
public void test2(){
}

设备池连接了 5 台设备。现在我希望 test1() 在每台设备上运行。同样,它适用于 test2()。我可以创建多个 Appium 会话并从设备池中分配一个设备。问题是如何在 TestNG 的运行时复制测试方法。

我在 TestNG 中找不到任何直接的方法。有没有可能实现?如果是,任何示例都可以。

标签: javatestngappium

解决方案


如果您使用的是 maven 和 TestNG - 那么您应该了解带有测试套件的 .xml 文件。尝试实现IAlterSuiteListener并使用测试文件更改您的 .xml。 Test NG允许以各种方式分离线程:例如,对于 3 个设备,您可以通过以下方式运行 1 个相同的测试:

  1. 使用测试创建 TestNG .xml 文件
  2. 在此 xml 中指定 - 实现 IAlterSuiteListener 的侦听器
  3. 使用监听器在运行时更改 xml 文件,它可以检测连接设备的数量(等于线程数),因此您可以thread-count在循环中设置和添加测试。
suite name="Android Compatibility Tests" parallel="tests" thread-count="3"

<test name="Android Compatibility Test-1">
    <classes>
        <class name="tests.android_tests.AndroidCompatibilityTest">
        </class>
    </classes>
</test>

  <test name="Android Compatibility Test-2">
    <classes>
        <class name="tests.android_tests.AndroidCompatibilityTest">
        </class>
    </classes>
</test>

 <test name="Android Compatibility Test-3">
    <classes>
        <class name="tests.android_tests.AndroidCompatibilityTest">
        </class>
    </classes>
</test>

在 Appium 1中阅读有关并行性 的文档https ://www.javadoc.io/doc/org.testng/testng/6.11在此处输入代码/org/testng/IAlterSuiteListener.html


推荐阅读