在我的测试课程中,假设我有15个测试用例。在15个中,我只需要5个测试用例的通用测试数据。因此,我想编写一个方法,它将创建测试数据,但该方法将在运行这5个测试中的任何一个之前执行。
我知道@BeforClass
- 它将在运行该类的任何测试之前运行,并且@BeforeMethod
- 将在该类中的每个测试之前运行。
我不想使用@BeforeClass
为15个测试用例创建测试数据,因为如果我想调试不属于这5个测试用例的测试,它仍会创建数据,这是我目前的测试不需要,也会增加执行时间。
有没有使用TestNG的方法,我可以在执行某些测试之前运行特定的方法(不使用testng.xml)
答案 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