专栏首页不想当开发的产品不是好测试#测试框架推荐# test4j,数据库测试

#测试框架推荐# 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. 断言结果友好,可以提示到哪个字段错误;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

    我们知道,maven的依赖关系是有传递性的。如:A-->B,B-->C。但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对A的依赖。在maven的依赖...

    千往
  • 认识map-reduce

    1)MapReduce从HDFS中分割读取Split文件,通过Inputformat交给Mapper来处理。Split是MapReduce中最小的计算单元,一个...

    千往
  • java项目 远程debug

    AVA项目无法像PHP那样可以随时修改文件内容进行调试,调试可以借助eclipse,本地代码的话很容易在本地debug,但如果代码已经打包部署在linux上呢?...

    千往
  • maven常用的jar

    剑行者
  • slf4j 搭配 log4j2 处理日志

    Log4j + Slf4j 的使用组合最为常见,但是我们知道 Log4j 目前已经停止更新了。Apache推出了新的 Log4j2 来代替 Log4j,Log4...

    海向
  • 性能工具之Jmeter压测Thrift RPC服务

    利用JMeter调用Java测试类去调用对应的后台服务,并记住每次调用并获取反馈值的RT,ERR%,只需要按照单线程的方式去实现测试业务,也无需添加各种埋点收集...

    高楼Zee
  • SpringMVC 跨服务器上传案例

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    多凡
  • 程序包org.junit不存在

    <dependency>             <groupId>junit</groupId>             <artifactId>junit<...

    ydymz
  • Jersey 2.x JDK 上的客户端应用 原

    如应用是运行在 JDK 上的话,你只需要使用 JAX-RS 中的客户端部分就可以了,这个根据你使用的客户端有所调整。

    HoneyMoose
  • maven中junit.runner.RunWith无法导入问题

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details...

    bear_fish

扫码关注云+社区

领取腾讯云代金券