首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有更干净的方法来构造您的TestNG测试用例?

是否有更干净的方法来构造您的TestNG测试用例?
EN

Stack Overflow用户
提问于 2015-11-10 17:33:09
回答 2查看 1.1K关注 0票数 3

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

我能做到:

代码语言:javascript
复制
@Test(priority=0, name = login )
//some code

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

@Test(priority=3, name = accept )

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

代码语言:javascript
复制
@Test(priority=0, name = login )
//some code

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

@Test(priority=3, name = rejected )

在这两个流程中,两个测试是相同的,我重复登录和提交。唯一的变化就是每次提交后会发生什么变化,比如提交、拒绝、取消等等。我只知道一种方法,那就是重复写登录,每次提交。

的问题是,是否有更好/更简洁、更结构化的方式来编写这个,而不是每次我都重复登录的下面呢?

代码语言:javascript
复制
@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 ... 
EN

回答 2

Stack Overflow用户

发布于 2015-11-10 18:04:54

如果您的目标是删除测试的重复,那么如何通过在testng.xml文件中指定这些测试来创建更多的非虚拟化测试并多次运行它们?

例如,您可以:

代码语言:javascript
复制
<?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>

您的课程设置为:

代码语言:javascript
复制
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 )时,将生成:

代码语言:javascript
复制
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,我想您总是可以将它抛到一个基类中,并让您的测试用例扩展它:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-11-10 18:56:06

这个能行吗?

代码语言:javascript
复制
public class BeforeStuff {
@BeforeMethod()
}

public class Test1 {
    @Test
    @Test
}

public class Test2 {
    @Test
}

public class Test3 {
    @Test
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33636071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档