• 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;
        }

    测试结果:

    知道、想到、做到、得到
  • 相关阅读:
    C++顺序性容器、关联性容器与容器适配器
    Groovy与Java集成常见的坑--转
    selenium打开chrome浏览器代码
    分组密码的工作模式--wiki
    linux下C语言多线程编程实例
    C语言多线程pthread库相关函数说明
    C语言使用pthread多线程编程(windows系统)二
    C语言使用pthread多线程编程(windows系统)一
    使用_beginThreadex创建多线程(C语言版多线程)
    浅谈C语言中的联合体
  • 原文地址:https://www.cnblogs.com/Durant0420/p/14788027.html
Copyright © 2020-2023  润新知