【问题标题】:How to set TestNG to run which test that available如何设置 TestNG 以运行可用的测试
【发布时间】:2022-01-19 08:36:31
【问题描述】:

我有一套 testNG(上面的 Maven),里面有测试,我想运行一些测试,同时其他测试不会运行(它们可以忽略甚至失败) - 这种情况适用于少数手机连接到 PC 和一些不连接, 套件看起来像这样:

    <test name="Redmi 6A">
        <listeners>
            <listener class-name="com.qa.listeners.TestListener" />
        </listeners>
        <parameter name="emulator" value="false" />
        <parameter name="platformName" value="Android" />
        <parameter name="deviceName" value="Redmi 6A" />
        <parameter name="systemPort" value="10000" />
        <parameter name="chromeDriverPort" value="11000" />
        <classes>
            <class name="redmi6A.Installation"/>
        </classes>
    </test>

    <test name="OnePlus 6 Pro">
        <listeners>
            <listener class-name="com.qa.listeners.TestListener" />
        </listeners>
        <parameter name="emulator" value="false" />
        <parameter name="platformName" value="Android" />
        <parameter name="deviceName" value="onePlus 6Pro" />
        <parameter name="systemPort" value="10000" />
        <parameter name="chromeDriverPort" value="11000" />
        <classes>
            <class name="onePlus6Pro.Installation"/>
        </classes>
    </test>

所以我希望代码在两个设备都连接的情况下才能工作,另一方面,只有在其中一个设备连接的情况下才能工作

【问题讨论】:

  • 当你开始测试时,你知道设备是否连接吗?或者只有在测试开始运行时您才会知道这一点?
  • @MaxDaroshchanka 我只会在测试运行时知道 - 我的意思是物理上我知道,但代码不知道,我不想方便地禁用它

标签: java maven testng


【解决方案1】:

选项1

只需将 testNG xml 生成委托给一些预构建 CI 步骤。

创建一个类,例如检查 adb 设备列表并包含或排除一些 xml 部分。

运行该类并生成 xml 并在测试运行中使用它。

选项2

使用IAnnotationTransformListener 禁用基于某些逻辑的测试。

您必须以某种方式定义哪个测试取决于哪个设备。在您的示例中,我看到您可以从类包名称中检索它。然后您必须检查设备是否已连接并在需要时禁用测试。

https://techfortesting.wordpress.com/2019/12/27/iannotation-transformer/

注意:您必须在 xml 中应用此侦听器,而不是在代码中。这是因为它应该应用在TestNG执行的早期阶段。

抱歉,我没有提供最终的代码 sn-ps,因为实现它需要时间。

【讨论】:

  • 谢谢,在选项 1 中,您如何从正在运行的实际类中调用用于您的配置的特定类?关于选项 2,我需要在同一类中添加所有测试吗?因为如果是这样,则不会为每个设备创建报告或视频文件夹?
  • 对于 1,您可以使用 public static void main 方法创建类并使用 mvn exec:java -Dexec.mainClass="package.name.ClassName" 运行它,运行测试将是第二个 maven 命令。
  • 对于选项 2 - 不需要将所有测试放在一个类中。无论如何,您可以根据您的 xml 设置配置并添加相应的 @Before/After 方法来开始和停止视频录制和根据需要创建文件夹。我想你可以从一些简单的行为开始,一步步调整..
  • Ok 选项 2 看起来更好,因为如果我理解它可以从代码内部工作,即使 devops 提供从环境变量中获取参数而不是通过将其发送到 Testng xml maven,而不是制作类似 stackoverflow.com/questions/6061470/if-then-else-using-xml 的 if else,但我仍然需要看看如何与那个监听器一起工作
  • 如果我在周末有空闲时间,我会尝试使用IAnnotationTransformListener 添加一些示例。但是你会得到这个监听器的结果——xml中提到的一些测试只是没有执行并且在报告中不可见。
猜你喜欢
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 2013-05-04
  • 2017-12-22
相关资源
最近更新 更多