Java 是否有更干净的方法来构造TestNG测试用例?

Java 是否有更干净的方法来构造TestNG测试用例?,java,eclipse,selenium,testing,testng,Java,Eclipse,Selenium,Testing,Testng,我的问题更多地与结构/清洁有关。我在TestNG中有一个测试脚本,希望添加测试用例以进行扩展。我想知道是否有一种干净的方法来重复测试用例。例如: 我可以做到: @Test(priority=0, name = login ) //some code @Test(priority=2, name = submit ) //some code @Test(priority=3, name = accept ) 这只是一个测试场景。现在我想对不同的流做同样的事情,但是测试用例正在重复。。。例如:

我的问题更多地与结构/清洁有关。我在TestNG中有一个测试脚本,希望添加测试用例以进行扩展。我想知道是否有一种干净的方法来重复测试用例。例如:

我可以做到:

@Test(priority=0, name = login )
//some code

@Test(priority=2, name = submit )
//some code

@Test(priority=3, name = accept )
这只是一个测试场景。现在我想对不同的流做同样的事情,但是测试用例正在重复。。。例如:

@Test(priority=0, name = login )
//some code

@Test(priority=2, name = submit )
//some code

@Test(priority=3, name = rejected )
在这两个流中,我重复登录和提交的两个测试是相同的。流程中唯一的变化是每次提交后发生的情况,例如提交、拒绝、取消等。我只知道一种方法,即每次重复编写登录名并提交

问题是,是否有更好/更干净、更结构化的方法来编写此文档,而不是我每次都重复登录的下面的文档?

@Test(priority=0, name = login )
//some code

@Test(priority=2, name = submit )
//some code

@Test(priority=3, name = accept )
//Some code

@Test(priority=4, name = login )
//some code

@Test(priority=5, name = submit )
//some code

@Test(priority=6, name = rejected )
//some code
.
.
.
@Test(priority=n ... 

如果您的目标是删除重复的测试,那么创建更多的非个性化测试,并通过在测试中指定来多次运行它们如何

例如,您可以执行以下操作:

<?xml version="1.0" encoding="UTF-8"?>

<suite name="Test Suite 1">
    <test name="Test Set 1">
        <classes>
            <class name="test.mytest.Test1" />
            <class name="test.mytest.Test2" />
        </classes>
    </test>
    <test name="Test Set 2">
        <classes>
            <class name="test.mytest.Test1" />
            <class name="test.mytest.Test3" />
        </classes>
    </test>
</suite>
运行时(我在示例中使用了Maven),将生成:

Running TestSuite
==Before method==
test login
==Before method==
test submit
test accept
==Before method==
test login
==Before method==
test submit
test reject
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.253 sec - in TestSuite
对于本例,我按类组织它们,但您可以按组、方法等进行组织

编辑 根据您的评论,我添加了一个使用@BeforeMethod的示例以及生成的输出

如果您希望专门重用@before方法,我想您可以将其放入基类中,并让测试用例对其进行扩展:

public class TestBase {

    @BeforeMethod
    public void before(){
        System.out.println("==Before method==");
    }
}

public class Test1 extends TestBase{

    @Test
    public void testLogin(){
        System.out.println("test login");
    }

    @Test
    public void testSubmit(){
        System.out.println("test submit");
    }

}
我从来都不需要做这样的事情,所以我不能用最佳实践来谈论它,但它会起作用。

这会起作用吗

public class BeforeStuff {
@BeforeMethod()
}

public class Test1 {
    @Test
    @Test
}

public class Test2 {
    @Test
}

public class Test3 {
    @Test
    }
}

这看起来可以解决我需要它做的事情。虽然,接下来的问题是,before方法会在哪里?我不确定你用它做什么,所以很难说它应该适用于你的具体案例。我修改了我的答案,以显示使用@BeforeMethod的示例以及它将产生的输出。这正是我想要的。很高兴听到。如果是这样的话,你介意把问题标记为已回答吗?
public class BeforeStuff {
@BeforeMethod()
}

public class Test1 {
    @Test
    @Test
}

public class Test2 {
    @Test
}

public class Test3 {
    @Test
    }
}