如果当前正在执行来自另一个特定类的测试,是否有任何好的解决方案来防止testng从特定类运行测试?
我有下一个套房:
<suite name="Name" parallel="classes" thread-count="5">
<test name="TestName">
<packages>
<package name="test.folder.*" />
</packages>
</test>
</suite>
在“文件夹”中,它有很多另一个文件夹,其中包含由该套件并行执行的测试类。
但是我需要以某种方式指定,例如,test. folder.A1。A1测试正在运行,测试ng应该等到它完成,才能运行类test.folder.b1。B1测试并选择另一个不在指定类的“禁止”列表中的类。
让我们再解释一次我想要什么。
关键是我有测试,它们相互影响,我想保存并行性,但不想同时执行它们。
我目前找到的唯一方法是,它在当前套件中添加了一个测试,在单线程中执行所有可影响的测试,然后以与现在相同的方式执行另一个测试。
但是我希望你有更漂亮的解决方案。
TestNG已经实现了“依赖方法”、“依赖组”选项。
但是您的要求是具有某种类级别的依赖关系。
如果您试图找到一个在测试运行时更改测试顺序的解决方案,这将不起作用。
TestNG决定了测试的具体顺序,并将其保持在整个执行过程中。如果测试轮到了,那么您可以简单地等待一些条件,但不要采取新的测试来代替当前的测试。
所以我的建议将保持这个假设。
选项1-使用单独的测试xml配置
看起来你已经在使用这个了。
将所有不能安全并行运行的测试移动到具有非并行配置的单独测试xml中,并保持其他测试并行运行,然后将它们合并到单个xml中运行是一种易于实现和维护的常见解决方案。
在大多数情况下,与其他现有的替代方案相比,它已经足够好了,因为它简单明了。
以下是它可能看起来像的示例:
https://stackoverflow.com/a/70753897/5226491
方案2-实现自己的同步
正如我提到的,没有现成的选择。
你应该:
您必须使用所有必要的同步来实现这一点,以确保它不会导致问题、死锁等。
您可以首先实现一个ITestListener
,它会在测试开始时将所有正在运行的测试类添加到线程安全集合中,并在测试完成时将其删除。
https://www.javadoc.io/doc/org.testng/testng/7.4.0/org/testng/ITestListener.html
https://www.javadoc.io/doc/org.testng/testng/7.4.0/org/testng/ITestResult.html#getTestClass--
我认为选项2需要时间来实现和测试(更不用说良好的编程经验),并且选择它必须有一个非常好的理由。