是否有更简洁的方法来构建TestNG测试用例?

时间:2015-11-10 17:33:10

标签: java eclipse selenium testing testng

我的问题更多地与结构/清洁有关。我在TestNG中有一个测试脚本,我希望添加测试用例以进行扩展。我想知道是否有一种简洁的方法来重复测试用例。示例:

我能做到:

@Test(priority=0, name = login )
//some code

@Test(priority=2, name = submit )
//some code

@Test(priority=3, name = accept )

这只是一个测试场景。现在我想对不同的流做同样的事情,但测试用例重复......例如:

@Test(priority=0, name = login )
//some code

@Test(priority=2, name = submit )
//some code

@Test(priority=3, name = rejected )

在两个流程中,2个测试与我重复登录和提交的情况相同。流量的唯一变化就是每次提交后发生的事情,例如提交,拒绝,取消等等。我只知道一种方式,那就是重复写入登录并每次提交。

问题是,是否有更好/更清晰的更有条理的方式来写这个而不是下面我每次都重复登录?

@Test(priority=0, name = login )
//some code

@Test(priority=2, name = submit )
//some code

@Test(priority=3, name = accept )
//Some code

@Test(priority=4, name = login )
//some code

@Test(priority=5, name = submit )
//some code

@Test(priority=6, name = rejected )
//some code
.
.
.
@Test(priority=n ... 

2 个答案:

答案 0 :(得分:1)

如果您的目标是删除重复的测试,那么如何在testng.xml file中指定,那么如何创建更多的生成的测试并多次运行它们?

例如,你可以这样做:

<?xml version="1.0" encoding="UTF-8"?>

<suite name="Test Suite 1">
    <test name="Test Set 1">
        <classes>
            <class name="test.mytest.Test1" />
            <class name="test.mytest.Test2" />
        </classes>
    </test>
    <test name="Test Set 2">
        <classes>
            <class name="test.mytest.Test1" />
            <class name="test.mytest.Test3" />
        </classes>
    </test>
</suite>

将您的课程设置为:

public class Test1 {

    @BeforeMethod
    public void before(){
        System.out.println("==Before method==");
    }

    @Test
    public void testLogin(){
        System.out.println("test login");
    }

    @Test
    public void testSubmit(){
        System.out.println("test submit");
    }

}

public class Test2 {

    @Test
    public void testAccept(){
        System.out.println("test accept");
    }

}

public class Test3 {

    @Test
    public void testReject(){
        System.out.println("test reject");
    }

}

运行时(我在我的例子中使用了Maven),将产生:

Running TestSuite
==Before method==
test login
==Before method==
test submit
test accept
==Before method==
test login
==Before method==
test submit
test reject
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.253 sec - in TestSuite

对于这个例子,我按类组织它们,但你可以按组,方法等组织。

修改 根据您的评论,我添加了一个使用@BeforeMethod和生成的输出的示例。

如果您希望专门重用@BeforeMethod,我想您可以随时将其放入基类并让测试用例扩展它:

public class TestBase {

    @BeforeMethod
    public void before(){
        System.out.println("==Before method==");
    }
}

public class Test1 extends TestBase{

    @Test
    public void testLogin(){
        System.out.println("test login");
    }

    @Test
    public void testSubmit(){
        System.out.println("test submit");
    }

}

我从来不需要做那样的事情,所以我不能在最佳实践方面谈论它,但它会起作用。

答案 1 :(得分:0)

这会有用吗?

public class BeforeStuff {
@BeforeMethod()
}

public class Test1 {
    @Test
    @Test
}

public class Test2 {
    @Test
}

public class Test3 {
    @Test
    }
}