GitHub - ly1012/groot: 一个通用、易用、易扩展的 Java 自动化测试工具

Tip

当前版本完整实现了核心功能,但生态还较弱。欢迎提交 Pull 请求、扩展组件或 Issues。

Groot 是一款基于 Java 生态构建的轻量级自动化测试工具,为测试人员和技术团队提供高效的自动化能力支撑。通过多种形式的用例支持与简洁的设计理念,帮助快速落地自动化测试、数据工厂构建、接口健康巡检、测试平台开发等核心质量保障场景。

项目提供了多个扩展点,可通过扩展实现功能增强,比如协议扩展、控制器扩展、认证与加解密扩展、断言扩展、报告扩展、函数扩展等等。

同时支持代码风格用例(Java/Groovy)和配置风格用例(Yaml/Json)。代码风格用例推荐 Groovy,配置风格用例推荐 Yaml。

下载与文档

本项目为标准 Java 项目,可通过 Maven/Gradle 下载依赖。

帮助文档:GitHub Pages 访问国内站点

使用示例:参考源码中的单元测试。

用例演示

Yaml 用例

name: MultiPart 测试用例
steps:
  - name: 上传多个文件
    http:
      url: /multipart/upload
      method: POST
      multipart:
        - file: data/降龙十八掌.txt
        - file: data/独孤九剑.txt
    validate:
      - statusCode: 200

Json 用例

{
  "name": "MultiPart 测试用例",
  "steps": [
    {
      "name": "上传多个文件",
      "http": {
        "url": "/multipart/upload",
        "method": "POST",
        "multipart": [
          {
            "file": "data/降龙十八掌.txt"
          },
          {
            "file": "data/独孤九剑.txt"
          }
        ]
      },
      "validate": [
        {
          "statusCode": 200
        }
      ]
    }
  ]
}

Java 用例

方法命名规范:

  • 方法名为关键字或变形关键字:不包含配置和前后置。比如直接发送请求,并在 then 回调中提取或断言响应内容。
  • 方法名为关键字或变形关键字 + With:包含配置和前后置。比如对请求进行额外的配置(比如设置代理)、增加提取操作和断言。

测试框架为 TestNG,依赖 groot-testng 模块。

public class PostTest extends GrootTestNGTestCase {

    @GrootSupport
    @Test(description = "MultiPart:上传多个文件")
    public void testPost() {
        http("上传多个文件1", request -> request
            .post("/multipart/upload")
            .multiPartFile("data/降龙十八掌.txt")
            .multiPartFile("data/独孤九剑.txt")
        ).then(r -> {
            Assertions.assertThat(r.getResponse().getStatus()).isEqualTo(200);
        });

        httpWith("上传多个文件2", action -> action
            .request(request -> request
                .post("/multipart/upload")
                .multiPartFile("data/降龙十八掌.txt")
                .multiPartFile("data/独孤九剑.txt"))
            .validate(validate -> validate
                .statusCode(200)));
    }

}

Groovy 用例

编码形式的用例推荐使用 Groovy 风格用例,易于书写和阅读。

class PostGroovyTest extends GrootTestNGTestCase {

    @GrootSupport
    @Test(description = "MultiPart:上传多个文件")
    void testMultiPart_MultiFile() {
        http("上传多个文件1") {
            post "/multipart/upload"
            multiPartFile "data/降龙十八掌.txt"
            multiPartFile "data/独孤九剑.txt"
        }.then {
            Assertions.assertThat(it.response.status).isEqualTo(200)
        }

        httpWith("上传多个文件2") {
            request {
                post "/multipart/upload"
                multiPartFile "data/降龙十八掌.txt"
                multiPartFile "data/独孤九剑.txt"
            }
            validate {
                statusCode 200
            }
        }
    }

}

二次开发

基于 Groot 进行定制化开发,通常不需要修改 Groot 项目源码。Groot 采用插拔式插件设计,我们可以新建一个插件(扩展)项目,并根据扩展点规范完成扩展组件开发,用户引入新的扩展组件依赖即可完成功能增强。

Groot 提供的是自动化基础能力,你可以基于此进行更高维度的封装。

详情见帮助文档中的 使用指南 - 扩展与开发