在TestNG中使用不同的@BeforeMethod方法

问题描述 投票:0回答:1

我想在 TestNG 中针对不同的测试运行不同的步骤集。这可能吗?

示例:

@BeforeMethod
Method1{
Step 1
Step 2
}

@BeforeMethod
Method2{
Step 3
Step 4
}

@Test 
Test1 {
 Run Method1 Steps
 Test1 Steps;
}

@Test 
Test2 {
 Run Method2 steps
 Test2 steps
}
java selenium-webdriver testng ui-automation testng-annotation-test
1个回答
0
投票

您可以在每个需要的测试中直接调用 Method1 和 Method2,但这种方法有一些缺点,例如代码重复和用额外的数据污染测试,从而影响测试的可读性(即将设置和测试本身混合在一起)单一方法)。但如果它正确地完成了它的工作,那还是可以的。

作为替代方案,我建议查看 @BeforeMethod/@AfterMethod 注释的 onlyForGroups 属性。它允许您仅对具有指定组的测试方法运行设置/拆卸方法,因此您可以将测试逻辑与配置逻辑分离,同时在添加新的设置/拆卸方面保持良好的可扩展性。

这是一个简短的例子:

public class DummyTest {


    @BeforeMethod(onlyForGroups = {"testA"})
    public void beforeTestA1() {
        System.out.println("Before Test A executed - 1");
    }


    @BeforeMethod(onlyForGroups = {"testA", "testB"})
    public void beforeTestAB1() {
        System.out.println("Before Test AB executed - 1");
    }


    @BeforeMethod(onlyForGroups = {"testB"})
    public void beforeTestB1() {
        System.out.println("Before Test B executed - 1");
    }


    @BeforeMethod(onlyForGroups = {"testB", "testA"})
    public void beforeTestAB2() {
        System.out.println("Before Test AB executed - 2");
    }


    @Test(groups = {"testA"})
    public void testA() {
        System.out.println("Test A executed");
    }


    @Test(groups = {"testB"})
    public void testB() {
        System.out.println("Test B executed");
    }


}

输出:

Before Test A executed - 1
Before Test AB executed - 1
Before Test AB executed - 2
Test A executed
Before Test AB executed - 1
Before Test AB executed - 2
Before Test B executed - 1
Test B executed

您可以通过“dependsOnMethod”属性或方法名称(按字母顺序)控制方法之前/之后的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.