Skip to content

当前配置风格用例和代码风格用例均依赖 TestNG/Junit 等测试框架进行用例发现和执行,所以用例的参数化功能通过 TestNG/Junit 的参数化特性来实现。

你可以自行开发命令行工具或测试平台,自主决定如何发现和执行用例,并对用例进行参数化测试。

截止当前版本,Groot 已完成和 TestNG 的集成,只需继承基类和添加注解即可开始用例编写。JUnit 暂未完成适配,你需要自己实现适合你项目的基类或 JUnit 扩展实现。

TestNG

GrootTestNGTestCase 是测试用例基类,全局使用同一个 Groot 实例。如果有其他需求,可以继承 AbstractGrootTestNGTestCase 实现自定义的测试基类。

@GrootDataSource 注解是一个组合注解,功能上等价于 @GrootSupport + @DataSource + @DataFilter,其中 value 属性表示文件数据源的位置,slice 和 expr 属性用于过滤行,只有匹配的行才会执行测试。

java
public class GrootDataSourceTest extends GrootTestNGTestCase {

    // Yaml 用例
    @GrootDataSource(
        value = "data/test.csv",
        slice = "[1..-1]", expr = "username == 'admin' && password == '654321'")
    @Test(description = "测试 @GrootDataSource")
    public void testGrootDataSourceByYaml(Map<String, Object> arg) {
        getSession().run("testcases/groot_datasource_test.yml");
    }

    // Java 用例
    @GrootDataSource(
        value = "data/test.csv",
        slice = "[1..-1]", expr = "username == 'admin' && password == '654321'")
    @Test(description = "测试 @GrootDataSource")
    public void testGrootDataSource(Map<String, Object> arg) {
        // 直接访问 arg 参数,注意下面的是 arg 方法,不是 arg.get("username")
        assert arg("username") == "admin";

        // 通过 Groot 变量机制使用 arg 参数,arg 参数中的数据会自动被转为 Session 级别变量
        noopWith("test parameters", action -> action
            .validate(validate -> validate
                .equalTo("${username}", "admin")
                .equalTo("${password}", "654321")));
    }

}
public class GrootDataSourceTest extends GrootTestNGTestCase {

    // Yaml 用例
    @GrootDataSource(
        value = "data/test.csv",
        slice = "[1..-1]", expr = "username == 'admin' && password == '654321'")
    @Test(description = "测试 @GrootDataSource")
    public void testGrootDataSourceByYaml(Map<String, Object> arg) {
        getSession().run("testcases/groot_datasource_test.yml");
    }

    // Java 用例
    @GrootDataSource(
        value = "data/test.csv",
        slice = "[1..-1]", expr = "username == 'admin' && password == '654321'")
    @Test(description = "测试 @GrootDataSource")
    public void testGrootDataSource(Map<String, Object> arg) {
        // 直接访问 arg 参数,注意下面的是 arg 方法,不是 arg.get("username")
        assert arg("username") == "admin";

        // 通过 Groot 变量机制使用 arg 参数,arg 参数中的数据会自动被转为 Session 级别变量
        noopWith("test parameters", action -> action
            .validate(validate -> validate
                .equalTo("${username}", "admin")
                .equalTo("${password}", "654321")));
    }

}

参数化文件 data/test.csv 内容:

csv
username,password
admin,123456
admin,654321
user,555555
username,password
admin,123456
admin,654321
user,555555

更多示例见 与 TestNG 集成