Selenium 未遵循testNG优先级

Selenium 未遵循testNG优先级,selenium,testng,Selenium,Testng,在testNG.xml文件中,我有10多个用于回归测试的测试类(在测试套件标记中)。一、 然后,使用@test注释中的priority=xxx,按照特定的顺序对几个测试类的自动测试进行排序。特定类中的优先级值是连续的,但每个测试类具有不同的范围。例如: testClass1 : values are from 1-10 testClass2 : values are from 11-23 testClass3 : values are from 31-38 . . . last

在testNG.xml文件中,我有10多个用于回归测试的测试类(在测试套件标记中)。一、 然后,使用@test注释中的priority=xxx,按照特定的顺序对几个测试类的自动测试进行排序。特定类中的优先级值是连续的,但每个测试类具有不同的范围。例如:

testClass1 : values are from 1-10 
testClass2 : values are from 11-23    
testClass3 : values are from 31-38 
. 
. 
. 
lastTestClass : values are from 10201-10215

这样做的目的是有一个特定的序列,其中10+个测试类被执行。有一个测试类需要在测试执行结束时执行——因此,该类中的优先级范围为10201-10215。但是,这个特定的测试类在第一个类之后立即进行测试,优先级从1到10。

设计按特定顺序运行的测试是一种糟糕的做法。您可能希望在将来并行运行测试,而依赖顺序将阻止您这样做

考虑改用TestNG侦听器:

看起来您正在尝试在测试后实现某种拆卸过程。 如果是这种情况,您可以实现
ITestListener
,并在执行所有测试后使用
onFinish
方法运行一些代码

此外,此TestNG注释可能适用于您的案例:

org.testng.annotations.AfterSuite

将测试设计为按特定顺序运行是一种糟糕的做法。您可能希望在将来并行运行测试,而依赖顺序将阻止您这样做

考虑改用TestNG侦听器:

看起来您正在尝试在测试后实现某种拆卸过程。 如果是这种情况,您可以实现
ITestListener
,并在执行所有测试后使用
onFinish
方法运行一些代码

此外,此TestNG注释可能适用于您的案例:

org.testng.annotations.AfterSuite

我建议您使用依赖项,而不是使用优先级。他们将严格按照顺序运行您的测试,从不在依赖测试之前运行依赖测试,即使您并行运行

我知道您在不同的类中有不同的范围,因此在
dependOnMethods
中,您必须指定所引用测试的根:

@Test(  description = "Values are from 1-10")
public void values_1_10() {
    someTest();
}

@Test(  description = "Values are from 21-23",
        dependsOnMethods = { "com.project.test.RangeToTen.values_1_10" })
public void values_21_23() {
    someTest();
}

如果每个范围中有多个测试,则可以使用
dependsOnGroups

@Test(  enabled = true,
        description = "Values are from 1-10")
public void values_1_10_A() {
    someTest();
}

@Test(  enabled = true,
        description = "Values are from 1-10")
public void values_1_10_B() {
    someTest();
}

@Test(  enabled = true,
        description = "Values are from 1-10",
        dependsOnGroups = { "group_1_10" })
public void values_21_23_A() {
    someTest();
}

@Test(  enabled = true,
        description = "Values are from 1-10",
        dependsOnGroups = { "group_1_10" })
public void values_21_23_B() {
    someTest();
}

您还可以通过testng.xml中的更多选项执行相同的操作:

另一种选择是使用“保留顺序”:


但正如Anton所提到的,如果您想要并行运行,这可能会给您带来麻烦,因此我建议您使用依赖项。

我建议您使用依赖项,而不是使用优先级。他们将严格按照顺序运行您的测试,从不在依赖测试之前运行依赖测试,即使您并行运行

我知道您在不同的类中有不同的范围,因此在
dependOnMethods
中,您必须指定所引用测试的根:

@Test(  description = "Values are from 1-10")
public void values_1_10() {
    someTest();
}

@Test(  description = "Values are from 21-23",
        dependsOnMethods = { "com.project.test.RangeToTen.values_1_10" })
public void values_21_23() {
    someTest();
}

如果每个范围中有多个测试,则可以使用
dependsOnGroups

@Test(  enabled = true,
        description = "Values are from 1-10")
public void values_1_10_A() {
    someTest();
}

@Test(  enabled = true,
        description = "Values are from 1-10")
public void values_1_10_B() {
    someTest();
}

@Test(  enabled = true,
        description = "Values are from 1-10",
        dependsOnGroups = { "group_1_10" })
public void values_21_23_A() {
    someTest();
}

@Test(  enabled = true,
        description = "Values are from 1-10",
        dependsOnGroups = { "group_1_10" })
public void values_21_23_B() {
    someTest();
}

您还可以通过testng.xml中的更多选项执行相同的操作:

另一种选择是使用“保留顺序”:

但正如Anton所提到的,如果您想要并行运行,这可能会给您带来麻烦,所以我建议您使用依赖项