2016-04-25 75 views
0

我正在探索TestNG注释。我碰到下面的情形,假设我有3个测试,我已经指定的优先级为2周的测试,一种是没有优先权注释默认测试TestNG方法执行默认优先级序列

@Test(groups={"smoke","sanity"},priority=1) 
public void TestCase2(){ 
    System.out.println("TestCase2"); 
} 

@Test(priority=0) 
public void TestCase3(){ 
    System.out.println("TestCase3"); 
} 

@Test() 
public void TestCase1(){ 
    System.out.println("TestCase1"); 
} 

输出:TestCase1 TestCase3 TestCase2

即使我改变TestCase3的序列& TestCase1,输出相同。

我知道

如果你不提的优先级,将采取所有的测试用例为“优先= 0”,然后执行。

问题是为什么TestCase1在TestCase3之前执行?

回答

0
@Test(priority=0) 
public void TestWithZeroPriority(){} 

@Test 
public void TestWithDefaultPriority(){} 

TestNG认为两个Testcases具有相同的优先级签名。所以测试用例TestNG的内部解释如下

@Test(priority=0) 
public void TestWithZeroPriority(){} 

@Test(priority=0) 
public void TestWithDefaultPriority(){} 

所以没有保证哪一个先得到执行。

1

如果您不配置它,TestNG默认未指定默认顺序。它可能会在版本之间改变。

在你的例子中,观察结果是正确的,但预期的结果也可能是正确的。

+0

是啊!那就是这个!即使我将默认优先级0赋予TestCase1并从TestCase3中删除优先级0,输出也保持不变。没有结论。 –

+1

我记得,默认情况下优先级为0。设置为0或没有结果会产生相同的结果 – juherr

1

使用testng可以指定脚本执行不同测试用例的顺序。如果没有在脚本中分配优先级,只提及所有测试用例的@Test,那么脚本可能会随机执行所有不同的测试,并可能导致脚本失败。例如,你有登录测试,那么你有填写验证的用户个人信息。因此,在这种情况下,如果您没有为登录测试和用户个人信息指定优先级,那么脚本可能会先执行用户个人信息填充测试,然后再进行登录测试,在这种情况下,脚本失败,因为登录屏幕脚本正在执行用户个人信息填写测试。

而是,如果您为登录测试分配优先级@Test(优先级= 0),然后对用户个人信息进行@Test(优先级= 1)填充测试,则脚本必须先执行优先级= 0,优先级= 1。

当您想要生成测试执行报告时,testNG注释@Test(priority = 0),@Test(priority = 1)等非常重要。

+0

感谢您的帮助解释:)。但是我想知道你是否提到了优先级= 0,并且没有优先级属性,哪个测试应该先执行?我得出的结论是,无论您提供优先权属性还是优先权= 0,都将具有与TestNG相同的签名。 –