我对TestNG文档的阅读表明,如果我有一个标记为这样的测试方法:
@BeforeSuite(alwaysRun = true)
@Test
public void MyTestMethod { ... }
然后MyTestMethod
将在任何地方定义的任何其他测试之前运行,无论是类,套件还是组。但情况似乎并非如此。
有没有办法让测试方法在其他一切之前无条件地运行? (如果失败,则不会运行其他测试。)
修改
测试类:
class Suite_Setup
extends BaseTestSuite
{
@BeforeSuite(alwaysRun = true)
def setup() {
System.out.println("Conducting test suite setup...")
// Verify that the internal API is configured properly and that the API host is available...
new Action(ApiHostname, new BasicCookieStore)
}
}
修改
答案:
我们自动生成自己的TestNG.xml文件,并且未包含@BeforeSuite方法。一旦包含它,@BeforeSuite
就会产生预期效果。
但是,似乎@BeforeSuite
(可能还有其他@Before...
和@After...
注释)可能与@Test
混合使用比禁止执行带注释的方法,它们使它不止一次运行!
另外,我没有说明我正在使用哪个版本的TestNG。这是6.2。
答案 0 :(得分:4)
尝试在类级别或方法级别使用组。
在我的情况下,我有一组需要在所有事情之前运行的冒烟测试,如果其中任何一个失败,则不应运行其他测试。
@Test(groups="smoke")
public class SmokeTests {
public void test1 {
//
}
...
}
所有其他测试类都是:
@Test(dependsOnGroups = "smoke")
public class OtherTests {
public void test1 {
//
}
...
}
答案 1 :(得分:2)
我认为答案是
在以下示例中,testRemove将在testInsert,testReadAll和testUpdate运行之后运行。 testReadAll将在testInsert运行后运行。 testUpdate将在testInsert运行后运行。 请注意,testReadAll和testUpdate之间没有依赖关系。
@Test
public void testInsert()
{..}
@Test(dependsOnMethods={"testInsert"})
public void testUpdate()
{..}
@Test(dependsOnMethods={"testInsert"})`
public void testReadAll()`
{..}
@Test(dependsOnMethods={"testInsert", "testUpdate", "testReadAll"})`
public void testRemove()`
{..}
答案 2 :(得分:1)
@Test(alwaysRun = True)
使测试始终运行,无论它依赖的方法或组,甚至它都失败
答案 3 :(得分:0)
删除@Test
,方法不能同时是配置和测试方法。
答案 4 :(得分:0)
有没有办法标记测试方法,以便无条件地在其他所有方法之前运行?
尝试为目标测试分配最低优先级值。
@Test(priority = -2147483648)
public void myTest() {
...
}
您可以阅读有关TestNG测试优先级超过there的更多信息。
如果失败,则不会运行其他测试。
您需要使用以下选项之一根据此测试方法进行其他测试:
如果您将使用其中一个依赖项选项,则无需为第一个方法提供优先级。