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

    测试结果:

    知道、想到、做到、得到
  • 相关阅读:
    「网易官方」极客战记(codecombat)攻略-沙漠-拦截-interception
    「网易官方」极客战记(codecombat)攻略-沙漠-十字路口-crossroads
    「网易官方」极客战记(codecombat)攻略-沙漠-Sarven 的距离-sarven-gaps
    jenkins添加节点
    jenkins document
    docker ssh连接登录
    docker 切换工作目录和用户
    普通用户su到root免密码
    设置linux服务或脚本开机启动
    python class 私有变量
  • 原文地址:https://www.cnblogs.com/Durant0420/p/14788027.html
Copyright © 2011-2022 走看看