每当我们在priority
带注释的方法上指定dependsOnMethods
和@Test
时,测试方法的执行顺序不符合优先级。为什么会这样?
以下是演示该问题的测试类:
package unitTest.TestNGTestCases;
import org.testng.annotations.Test;
public class TestNGTest1 {
@Test(priority=1)
public void t1()
{
System.out.println("Running 1");
}
@Test(priority=2,dependsOnMethods="t1")
public void t2()
{
System.out.println("Running 2");
}
@Test(priority=3,dependsOnMethods="t2")
public void t3()
{
System.out.println("Running 3");
}
@Test(priority=4)
public void t4()
{
System.out.println("Running 4");
}
}
实际输出:
Running 1
Running 4
Running 2
Running 3
===============================================
All Tests Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================
预期产出:
Running 1
Running 2
Running 3
Running 4
===============================================
All Tests Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================
测试执行的顺序应该是t1,t2,t3,t4。为什么t4在t1之后执行,当t2和t3的优先级高于t4?
TIA
答案 0 :(得分:4)
首先执行所有独立方法(没有@dependsOnMethods依赖关系)。然后将执行具有依赖性的方法。如果执行顺序中存在歧义,即使在此顺序之后,优先级也会出现。
这是订购方案:
现在所有歧义都已解决,因为没有两种方法可以具有相同的名称。
答案 1 :(得分:1)
我今天遇到了同样的问题。
首先,我仅使用priority
进行测试,但之后我还需要添加dependsOnMethods
。
最初我已将dependsOnMethods
仅添加到我的某些@Test
方法中。
结果,我的测试的执行顺序已经混乱。
我已经阅读了很多与此主题相关的文章和讨论,结果表明,使用priority
和dependsOnMethods
属性 togeter 带来了很多整体情况的不确定性以及TestNG的行为在这种情况下永远无法预测和明确定义。
我的解决方案是将dependsOnMethods
添加到我的测试方法的 ALL ,同时我还为 ALL保留了priority
的mehtods。
现在他们的执行顺序恢复正常,同时我受益于dependsOnMethods
的功能。
即链中第一个失败的测试方法导致所有后续测试方法被跳过并在报告中显示正确。
这是我的测试类中的片段:
@Test(priority = 2, dependsOnMethods= {"Meganav_Point_C1_and_Click_C3"})
public void Click_product_in_Category_result_page() throws Throwable {
Grid.clickProduct(1, 1);
}
@Test(priority = 3, dependsOnMethods= {"Click_product_in_Category_result_page"})
public void PDP_setQty() throws Throwable {
ProductDetailsPage.setQty(2);
}
@Test(priority = 4, dependsOnMethods= {"PDP_setQty"}, alwaysRun= true)
public void PDP_click_Add_To_Basket() throws Throwable {
ProductDetailsPage.addToBasket();
}
希望这有帮助。
此致 Veselin Petrov
答案 2 :(得分:-1)
Can someone help me to understand the below sequence of execution?
public class Testpract {
@Test
public void setup()
{
System.out.println("Setup");
}
@Test(priority=1)
public void gotopage()
{
System.out.println("gottopage");
}
@Test(priority=2, dependsOnMethods="gotopage")
public void verifytitle()
{
System.out.println("verifytitle");
}
@Test(dependsOnMethods="login")
public void verifyimage()
{
System.out.println("verifyimage");
}
@Test(dependsOnMethods="verifyhomepage", priority =10)
public void login()
{
System.out.println("login");
}
@Test(priority=7)
public void verifyhomepage()
{
System.out.println("verifyhomepage");
}
output is
Setup
gottopage
verifyhomepage
PASSED: setup
PASSED: gotopage
PASSED: verifyhomepage
@Test
public void setup()
{
System.out.println("Setup");
}
@Test(priority=1)
public void gotopage()
{
System.out.println("gottopage");
}
@Test(priority=2, dependsOnMethods="gotopage")
public void verifytitle()
{
System.out.println("verifytitle");
}
@Test(dependsOnMethods="login", priority =3)
public void verifyimage()
{
System.out.println("verifyimage");
}
@Test(dependsOnMethods="verifyhomepage", priority =10)
public void login()
{
System.out.println("login");
}
@Test(priority=7)
public void verifyhomepage()
{
System.out.println("verifyhomepage");
}
output is
Setup
gottopage
verifytitle
verifyhomepage
login
verifyimage
PASSED: setup
PASSED: gotopage
PASSED: verifytitle
PASSED: verifyhomepage
PASSED: login
PASSED: verifyimage