# 背景
后端都是操作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. 断言结果友好,可以提示到哪个字段错误;
虽千万人,吾往矣!