如何在使用TestNG的特定测试用例之前运行特定方法?

时间:2017-05-30 06:16:46

标签: java unit-testing selenium automated-tests testng

在我的测试课程中,假设我有15个测试用例。在15个中,我只需要5个测试用例的通用测试数据。因此,我想编写一个方法,它将创建测试数据,但该方法将在运行这5个测试中的任何一个之前执行。

我知道@BeforClass - 它将在运行该类的任何测试之前运行,并且@BeforeMethod - 将在该类中的每个测试之前运行。

我不想使用@BeforeClass为15个测试用例创建测试数据,因为如果我想调试不属于这5个测试用例的测试,它仍会创建数据,这是我目前的测试不需要,也会增加执行时间。

有没有使用TestNG的方法,我可以在执行某些测试之前运行特定的方法(不使用testng.xml)

3 个答案:

答案 0 :(得分:0)

从您的描述中我了解到您需要一个dataProvider(正是这个,为多个测试用例提供相同数据的方法,或者为同一测试用例提供多个数据的方法)。

@DataProvider(name = "dataProviderFor5TestCases")
public Object[][] createData() {
 return new Object[][] {
   { "Joe", new Integer(43) },
   { "Mary", new Integer(32)},
 };
}

然后您可以在测试用例中声明dataProvider:

@Test(dataProvider = "dataProviderFor5TestCases")
public void testCase1(String name, Integer age) {
 System.out.println(name + " " + age);
}

结果将是:

Joe 43
Mary 32

因此testCase1将使用dataProvider中创建的数据集执行两次。但是,我认为您需要为所有5个测试用例提供相同的数据(可实现)。

现在,关于执行时间。我不是100%肯定,但我相信数据是按需创建的(即如果跳过或失败的testCase没有创建数据;但我的负载非常小,所以请尝试并让我们知道!)

  

OP评论后更新:   所以,你可能会更好,然后使用testGroups,它将适合你在测试之前的设置和之后的清理(不用于不相关的测试用例):

@Test(groups = { "init" })
public void serverInit() {
startServer();
}

@Test(groups = { "init" })
public void initEnvironment() {
createUsers()
}

@Test(groups = { "cleanup"}, dependsOnGroups = { "init.*" })
public void testCase1() {
//perform your tests
}


@Test(dependsOnGroups = { "cleanup"})
puplic void cleanup(){
deleteUsers();
killServer();
}

如果任何 init 测试方法失败(即服务器无法启动),则上述testCase1 将不会执行。另外,只有testCase1成功时才会调用cleanup方法。如果你想要运行清理方法而不管testCase1结果如何,你可以像这样使用alwaysRun:

@Test(dependsOnGroups = { "cleanup"}, alwaysRun=true)

希望有所帮助! 祝你好运!

从这里取得的例子: TestNG DataProvider

答案 1 :(得分:0)

TestNG仅提供对其他测试方法的依赖。使其成为测试方法。

要存档所需的文件,您可以执行以下操作:

@Test
void testMethod(){
     //this is your test method
     beforemethod();
}

//your before method for you test-case
void beforemethod(){
}

希望这可以解决您的问题

答案 2 :(得分:-2)

您可以在dependsOnMethods注释中使用@Test()

e.g。

@Test
public void testDataSetup() 
 {
    // Setup your testDataHere
}


@Test(dependsOnMethods = { "testDataSetup" })
public void testExecute1() 
{
 // Use Your logic here which executes after datasetup
   }

有关完整教程,请参阅this link