junit5数据驱动

一、数据来源

  CSV、yaml、xml、db、excel、json

二、本质

  读取数据源返回数组,然后利用参数化进行数据与变量的对应

  • 基于schema:List<Class>
  • 纯数据:Array<Array<String,Object>>

三、数据格式

  

  优点 缺点
Excel 生成数据方便 二进制文件不利于版本管理
CSV 可使用Excel编辑 表达多层级多类型数据有困难
YAML 格式完备,可读性好 格式简单
XML 格式完备 冗长复杂
JSON 格式完备,可读性一般 不能编写注释,格式死板

四、数据驱动逻辑

  1、结构化数据驱动

  • 根据表格数据解释执行,Excel、YAML、XML
  • 将行为也数据化

  

  2、高层抽象

  • ATDD:验收测试驱动开发,借助于数据与DSL(Domain Specific Language)实现用例描述,代表作是RbotFramwork
  • BDD:行为驱动开发,基于自然语言描述用例,实现仍然是基于传统的编程方式,代表作是Cucumber

  3、牺牲灵活性,无法大规模应用,维护成本高

 五、案例演示

  1、利用MethodSource注解参数化测试

    @ParameterizedTest
    @MethodSource
    public void testddt(String raw) {
        assertTrue(raw.length() > 3);

    }

    static Stream<String> testddt() {
        return Stream.of("1", "12", "123", "1234");
    }

测试结果:

 说明:使用java8的新特性Stream.of方法创建字符流,传递给testddt测试方法,循环遍历字符串长度是否大于3.

  2、使用yaml数据驱动

  定义User Bean,提供给后面解析使用

public class User {
    public String name;
}

项目工程目录结构:

  user.yaml文件内容

- name: seveniruby
- name: apple
- name: sj

代码示例:

    @ParameterizedTest()
    @MethodSource
    public void testDDTFromYaml(User user) {
        assertTrue(user.name.length() > 3);

    }

    static List<User> testDDTFromYaml() throws IOException {
        ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
        TypeReference typeReference = new TypeReference<List<User>>() {
        };
        List<User> users = mapper.readValue(
                TestYaml.class.getResourceAsStream("/user.yaml"),
                typeReference
        );
        return users;
    }

测试结果:

  3、使用json数据驱动

  user.json文件内容

[
  {
    "name": "seveniruby"
  },
  {
    "name": "sj"
  },
  {
    "name": "apple"
  }
]

示例代码:

    @ParameterizedTest()
    @MethodSource
    public void testDDTFromJson(User user) {
        assertTrue(user.name.length() > 3);

    }

    static List<User> testDDTFromJson() throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        TypeReference typeReference = new TypeReference<List<User>>() {
        };
        List<User> users = mapper.readValue(
                TestYaml.class.getResourceAsStream("/user.json"),
                typeReference
        );
        return users;
    }

测试结果:

知道、想到、做到、得到
原文地址:https://www.cnblogs.com/Durant0420/p/14788027.html