Java 如何在使用TestNG只运行特定测试用例之前运行特定方法?
在我的测试课上,假设我有15个测试用例。在15个测试用例中,我只需要5个测试用例的通用测试数据。因此,我想编写一个方法,它将创建测试数据,但该方法将在运行这5个测试之前执行 我知道Java 如何在使用TestNG只运行特定测试用例之前运行特定方法?,java,unit-testing,selenium,automated-tests,testng,Java,Unit Testing,Selenium,Automated Tests,Testng,在我的测试课上,假设我有15个测试用例。在15个测试用例中,我只需要5个测试用例的通用测试数据。因此,我想编写一个方法,它将创建测试数据,但该方法将在运行这5个测试之前执行 我知道@BeforClass-它将在运行类中的任何测试之前运行,@beforethod-它将在类中的每个测试之前运行 我不想使用@BeforeClass为15个测试用例中的5个创建测试数据,因为如果我想调试一个不属于这5个测试用例的测试,它仍然会创建数据,这不是我当前测试所需要的,也会增加执行时间 使用TestNG有什么办法
@BeforClass
-它将在运行类中的任何测试之前运行,@beforethod
-它将在类中的每个测试之前运行
我不想使用@BeforeClass
为15个测试用例中的5个创建测试数据,因为如果我想调试一个不属于这5个测试用例的测试,它仍然会创建数据,这不是我当前测试所需要的,也会增加执行时间
使用TestNG有什么办法吗?我可以在执行某些测试之前运行特定的方法(不使用TestNG.xml)您可以在
@Test()中使用dependsOnMethods
e、 g
有关完整教程,请参见您可以在@Test()
注释中使用dependsOnMethods
e、 g
有关完整的教程,请参见您的描述,我知道您需要一个数据提供者(确切地说,就是为多个测试用例提供相同数据的方法,或者为同一测试用例提供多个数据)
然后,您可以在测试用例上声明dataProvider,如下所示:
@Test(dataProvider = "dataProviderFor5TestCases")
public void testCase1(String name, Integer age) {
System.out.println(name + " " + age);
}
结果将是:
Joe 43
Mary 32
因此,testCase1将使用dataProvider中创建的数据集执行两次。然而,我认为所有5个测试用例都需要相同的数据(可以实现)
现在,关于执行时间。我不是100%确定,但我相信数据是按需创建的(即,如果跳过测试用例或失败,则不会创建任何数据;但我的负载非常小,因此请尝试并让我们知道!)
OP评论后更新:
因此,您最好使用testGroups,它将适合您在测试前的设置和测试后的清理(无需为不相关的测试用例调用):
如果任何init测试方法失败(即服务器无法启动),则不会执行上述testCase1。此外,仅当testCase1成功时才会调用cleanup方法。如果希望在不考虑testCase1结果的情况下运行cleanup方法,可以像这样使用alwaysRun:
@Test(dependsOnGroups = { "cleanup"}, alwaysRun=true)
希望有帮助!
祝你好运
示例如下:
从您的描述中,我了解到您需要一个数据提供者(确切地说,就是为多个测试用例提供相同数据的方法,或者为同一测试用例提供多个数据)
然后,您可以在测试用例上声明dataProvider,如下所示:
@Test(dataProvider = "dataProviderFor5TestCases")
public void testCase1(String name, Integer age) {
System.out.println(name + " " + age);
}
结果将是:
Joe 43
Mary 32
因此,testCase1将使用dataProvider中创建的数据集执行两次。然而,我认为所有5个测试用例都需要相同的数据(可以实现)
现在,关于执行时间。我不是100%确定,但我相信数据是按需创建的(即,如果跳过测试用例或失败,则不会创建任何数据;但我的负载非常小,因此请尝试并让我们知道!)
OP评论后更新:
因此,您最好使用testGroups,它将适合您在测试前的设置和测试后的清理(无需为不相关的测试用例调用):
如果任何init测试方法失败(即服务器无法启动),则不会执行上述testCase1。此外,仅当testCase1成功时才会调用cleanup方法。如果希望在不考虑testCase1结果的情况下运行cleanup方法,可以像这样使用alwaysRun:
@Test(dependsOnGroups = { "cleanup"}, alwaysRun=true)
希望有帮助!
祝你好运
示例如下:
TestNG仅提供对其他测试方法的依赖性。这是一种测试方法
要归档所需内容,可以执行以下操作:
@Test
void testMethod(){
//this is your test method
beforemethod();
}
//your before method for you test-case
void beforemethod(){
}
希望这能解决您的问题TestNG只提供对其他测试方法的依赖性。这是一种测试方法
要归档所需内容,可以执行以下操作:
@Test
void testMethod(){
//this is your test method
beforemethod();
}
//your before method for you test-case
void beforemethod(){
}
希望这能解决您的问题我可能会在一个单独的类中分离这5个测试。想象一下,可怜的灵魂试图阅读包含15个测试的测试类,并试图找出哪个设置代码属于哪个。我可能会在一个单独的类中分离出这5个测试。想象一下,可怜的灵魂试图读取包含15个测试的测试类,并试图找出哪个安装代码属于哪个。从OP的评论中可以看出:“如果我想调试一个不属于这5个测试用例的测试,它仍然会创建数据…”此解决方案具有错误的依赖性。i、 e.如果testDataSetup成功(即数据已创建),则将运行测试用例testExecute1。我不认为这是OP想要的;因为他不想在跳过测试用例或测试失败时创建数据。OP的评论是:“如果我想调试一个不属于这5个测试用例的测试,它仍然会创建数据…”此解决方案具有错误的依赖性。i、 e.如果testDataSetup成功(即数据已创建),则将运行测试用例testExecute1。我不认为这是OP想要的;因为如果测试用例被跳过或失败,他不想创建数据。我的意思是不使用java数据类型构建测试。通过测试数据,我的意思是创建资源——比如名为John、Bob、Mike的用户,或者配置一些服务器细节。此外,我想在测试执行之前将服务器重置为状态,即删除用户,重置服务器配置(我不想使用@AfterClass执行此操作,因为它将等待类的所有测试运行)您发布的内容与OP提出的略有不同。好的,TDHM,在您的反馈后更新了问题,希望我们这次能够正确回答!我的意思是不使用java数据类型构建测试。通过测试数据,我的意思是创建资源——比如名为John、Bob、Mike的用户,或者配置一些服务器细节。另外,我想在测试执行之前将服务器重置为状态,即de