zoukankan      html  css  js  c++  java
  • #测试框架推荐# test4j,数据库测试

    # 背景

    后端都是操作DB的,这块的自动化测试校验的话,是需要数据库操作的,当然可以直接封装方法来操作数据,那么有没有开源框架支持数据操作,让我们关注写sql语句?或者帮我们做mysql的断言呢?

    # 介绍

    test4j,github地址:https://github.com/test4j,看名字感觉还是公司的大神维护了一段时间的,膜拜大神,Orz

    Test4J原名叫jTester,本来是发布在google上的一个开源项目,后来迁移到github,并且由于域名的缘故,更名为[Test4J]

    Test4J是一个单元测试和业务流程测试框架,其基本功能包括如下:

    单元测试功能

    • Fluent方式的断言,内置了大部分常用的断言语法,特别是对象反射断言功能尤其强大。
    • Junit和testNg语法扩展,使用@DataFrom方式扩展junit的数据驱动测试功能;@Group语法让junit支持分组测试;模块嵌入的方式让junit和testng支持功能扩展。
    • 集成jMockit框架,让mock更自由自在。
    • 对象自动填充功能,反射工具。

    集成测试工具包

    • 支持Spring集成测试,spring容器可以mock对象,自定义对象无缝集成。
    • 数据库测试支持,使用DataMap对象,Json数据准备数据,或者验证数据,同时支持数据库数据的Fluent断言。

    业务驱动测试工具包

    • 支持编写可读的用例,并在用例中嵌入测试用数据,框架自动转换为可执行代码。
    • 支持用例步骤的重复利用,简化用例编写难度。

    # 重点

    重点讲的是数据库测试这块

    1. 引入maven依赖

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring</artifactId>
      <version>2.5.6.SEC02</version>
    </dependency>

    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>

    <dependency>
      <groupId>org.test4j</groupId>
      <artifactId>test4j.testng</artifactId>
      <version>2.0.6</version>
    </dependency>
    <dependency>
      <groupId>org.test4j</groupId>
      <artifactId>test4j.integrated</artifactId>
      <version>2.0.6</version>
    </dependency>

    2. 配置test4j.properties文件

    在resources目录新增test4j.properties文件

    database.type=mysql
    database.url=jdbc:mysql://localhost/presentationtdd?characterEncoding=UTF8
    database.userName=root
    database.password=password
    database.schemaNames=presentationtdd
    database.driverClassName=com.mysql.jdbc.Driver

    3 . demo代码

    package com.jwen.test;
    
    import org.test4j.testng.Test4J;
    import org.testng.annotations.Test;
    
    import java.util.Date;
    
    public class DataMapDemo extends Test4J {
    
    
        @Test
        public void datamaptest() {
    
            db.table("demo").clean().insert(1, new DataMap() {
                {
                    this.put("name", "jwen");
                }
            }).commit();
        }
    
        @Test
        public void testEqMap() {
            db.table("demo").query().propertyEqMap(new DataMap() {
                {
                    this.put("id", 4);
                    this.put("name", "jwen1");
                }
            });
        }
    
        @Test
        public void insertMutiDate() {
            db.table("demo").clean().insert(5, new DataMap() {
                {
                    this.put("id", DataGenerator.increase(100, 1));
                    this.put("name", DataGenerator.random(String.class));
                    this.put("email", new DataGenerator() {
                        @Override
                        public Object generate(int i) {
                            return value("name") + "@163.com";
                        }
                    });
                    this.put("day", new Object[]{new Date(), "2018-03-03"});
                }
            }).commit();
        }
    
    
        //{"id":1,"name":"jwen","email":"jwen@163.com","day":"2018-8-08"}
        @Test
        public void insertDataByJsonString() {
            db.table("demo").clean().insert("{"id":1,"name":"jwen","email":"jwen@163.com","day":"2018-8-08"}").commit();
        }
    
        @Test
        public void testExecute(){
    
        }
    }

     当然这都是一些基本操作

    # 特点

    1. 使用过java的mybatis,python的SQLAlchemy,目前test4j的数据库这块更加简洁易懂

    2. 支持断言,这个是很难得,我之前的测试思路把查询出来的结果变成json串,然后通过JsonAssert去断言;

    3. 断言结果友好,可以提示到哪个字段错误;

  • 相关阅读:
    【MyEcplise SVN】myEcplise上安装SVN的多种方式
    【微信Java开发 --番外篇】错误解析
    【MyEcplise 插件】反编译插件jad
    maven打包自动配置数据库链接信息
    window.location下的属性说明
    JavaEETest
    java正则过虑字符
    微信小程序开发之大坑记之post请求
    jQuery 获取文件后缀的方法
    java通过解析文件获取apk版本等信息
  • 原文地址:https://www.cnblogs.com/jwentest/p/8511295.html
Copyright © 2011-2022 走看看