zoukankan      html  css  js  c++  java
  • 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;
        }

    测试结果:

    知道、想到、做到、得到
  • 相关阅读:
    uv纹理坐标设定与贴图规则
    数字人轻松学习Blender系列之八:建模-7
    数字人轻松学习Blender系列之八:建模-6
    数字人轻松学习Blender系列之八:建模-5
    数字人轻松学习Blender系列之八:建模-4
    数字人轻松学习Blender系列之八:建模-3
    数字人轻松学习Blender系列之八:建模-2
    数字人轻松学习Blender系列之八:建模-1
    【Blender】我的第一个3D模型--马克杯(附教程)
    Blender八仙桌建模教程
  • 原文地址:https://www.cnblogs.com/Durant0420/p/14788027.html
Copyright © 2011-2022 走看看