如何一个接一个地运行TestNG类

时间:2017-03-15 18:48:39

标签: java eclipse testng

我想运行一个包含4个不同类的testng.xml文件。我想在另一个完成之后运行每一个。所以当1级完成然后2级开始,当2级完成时,3级开始执行。到目前为止,我已经编写了这个代码,但它同时触发了所有类。即使我尝试了parallel = false而且它也没有用。任何帮助将不胜感激。谢谢

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test"  parallel="false" preserve-order="true" verbose="2">
    <test name="Test 1">
        <classes>
            <class name="class1"></class>
        </classes>
    </test>
    <test name="Test 2">
        <classes>
            <class name="class2"></class>
        </classes>
    </test>
    <test name="Test 2">
        <classes>
            <class name="class3"></class>
        </classes>
    </test>
</suite>

5 个答案:

答案 0 :(得分:1)

您需要做的是同时使用@BeforeClass和@AfterClass批注来启动和退出Webdriver。您需要定义webdriver在@BeforeClass中启动,并且webdriver在@AfterClass方法中退出(如果您选择在完成此类后关闭此webdriver)。

举个例子...

@BeforeClass
public void initClass()
{
    //Set the system property
    String driverPath = System.getProperty("user.dir") +"\\chromedriver\\chromedriver.exe";
    String driverType = "webdriver.chrome.driver";
    
    System.setProperty(driverType, driverPath);

    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
}

在本课程的最后,如果我想退出该webdriver实例:

@AfterClass
public void finish()
{             
    driver.manage().deleteAllCookies();
    driver.quit();
}

对每个测试类都执行此操作,然后下一个类将仅在上一个类完成后才开始。

TestNG xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test thread-count="5" name="Test" preserve-order="true">
        <classes>
            <class name="Pkg.ClassA" />
            <class name="Pkg.ClassB" />
            <class name="Pkg.ClassC" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

答案 1 :(得分:0)

设置不完全相同,但我们使用&#34; next&#34;我们的一些工作中的属性要进行顺序处理:

<batch:job id="JOB_NAME" job-repository="jobRepository"> 
    <batch:step id="process1" next="process2"> 
        <batch:tasklet>
            <batch:chunk>
                processing info
            </batch:chunk>
        </batch:tasklet>
    </batch:step>

    <batch:step id="process2" next="process3">
        <batch:tasklet>
            <batch:chunk>
                processing info
            </batch:chunk>
        </batch:tasklet>
        </batch:tasklet>
    </batch:step>

这样的事可能适合你。

答案 2 :(得分:0)

为什么不将所有测试类添加到同一个<test>标记中然后运行它们?

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test"  parallel="false" preserve-order="true" verbose="2">
    <test name="Test 1">
        <classes>
            <class name="class1"></class>
            <class name="class2"></class>
            <class name="class3"></class>
        </classes>
    </test>
</suite>

这基本上会一个接一个地在每个Test类中执行测试方法。您可以通过为每个System.out.println(Thread.currentThread().getId());方法添加@Test来确认这一点。您应该看到正在打印相同的线程ID。

答案 3 :(得分:0)

也许您在@Test注释中使用“priority”和“dependsOnGroups”。此参数对于订单更重要(请参阅6.10更改https://github.com/cbeust/testng/blob/master/CHANGES.txt)。

“优先级”示例。

此代码:

public class Class1 {

    @Test(priority = 1)
    public void test1() {
        System.out.println("Class1 test1");
    }

    @Test(priority = 2)
    public void test2() {
        System.out.println("Class1 test2");
    }

}

public class Class2 {

    @Test(priority = 1)
    public void test1() {
        System.out.println("Class2 test1");
    }

    @Test(priority = 2)
    public void test2() {
        System.out.println("Class2 test2");
    }

}

结果:

Class1 test1
Class2 test1
Class1 test2
Class2 test2

“dependsOnGroups”的示例。

此代码:

public class Class1 {

    @Test(groups = {"someGroup"})
    public void test1() {
        System.out.println("Class1 test1");
    }

    @Test(dependsOnGroups = {"someGroup"})
    public void test2() {
        System.out.println("Class1 test2");
    }

}

public class Class2 {

    @Test(groups = {"someGroup"})
    public void test1() {
        System.out.println("Class2 test1");
    }

    @Test(dependsOnGroups = {"someGroup"})
    public void test2() {
        System.out.println("Class2 test2");
    }

}

结果相同:

Class1 test1
Class2 test1
Class1 test2
Class2 test2

答案 4 :(得分:0)

测试名称标记应该是唯一的,我会看到第2类和第2类的测试名称3级是相同的,这就是你看到问题的原因。

如果您仍然看到问题,请添加日志/其他信息。