# 背景

后端都是操作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. 断言结果友好,可以提示到哪个字段错误;

#测试框架推荐# test4j,数据库测试的更多相关文章

  1. 消灭Bug!十款免费移动应用测试框架推荐

      对于移动应用开发者而言,Bug往往是最让人头疼的一大问题.不同于时时刻刻可以修补的Web App,移动App中的Bug往往隐藏得很深,甚至有时候等到用户使用才显现出来,这么一来开发者搞不好就会赔了 ...

  2. 高效测试框架推荐之Ginkgo

    自2015年开始,七牛工效团队一直使用Go语言+Ginkgo的组合来编写自动化测试用例,积累了大约5000+的数量.在使用和维护过程中,我们觉得Ginkgo的很多设计理念和功能非常赞,因此特分享给大家 ...

  3. 基于Java Junit测试框架 + jmeter 做压力测试

    1.JUnit 用户指南请查阅: https://junit.org/junit5/docs/current/user-guide/ 以一下代码为例:add接口 代码测试正常后,导出包: 下一步: j ...

  4. 使用 Spring 2.5 TestContext 测试框架

    Spring 2.5 TestContext 测试框架用于测试基于 Spring 的程序,TestContext 测试框架和低版本 Spring 测试框架没有任何关系,是一个全新的基于注解的测试框架, ...

  5. Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架

    一.软件测试 1.软件测试的概念及分类 软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.它是帮助识别开发完成(中间或最终 ...

  6. PHP自动测试框架Top 10

    对于很多PHP开发新手来说,测试自己编写的代码是一个非常棘手的问题.如果出现问题,他们将不知道下一步该怎么做.花费很长的时间调试PHP代码是一个非常不明智的选择,最好的方法就是在编写应用程序代码之前就 ...

  7. [转] ScalaTest测试框架

    [From] https://blog.csdn.net/hany3000/article/details/51033610 ScalaTest测试框架 2016年04月01日 02:49:35 阅读 ...

  8. Jest测试框架入门

    近年来,随着前端工程化的发展,前端发生了翻天覆地的变化.jQuery已经慢慢淡出了我们的视野,React.Vue和anglur三驾马车急速驶来.从此,前端进入了数据驱动的时代,也有了清晰的模块化开发的 ...

  9. [技术博客]基于动态继承类、WebDriver的浏览器兼容性测试框架搭建

    问题背景 观察使用selenium进行自动化测试的过程,我们可以将它概述为: 启动测试进程,在该进程中构建WebDriver 启动浏览器进程,将它与WebDriver建立连接 使用WebDriver向 ...

随机推荐

  1. Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划

    V$SQL_PLAN视图提供了一种方法,可用于检查仍位于库高速缓存的游标的执行计划.此视图中的信息与 PLAN_TABLE 视图中的信息非常类似.但是,EXPLAIN PLAN 显示的是执行相应语句时 ...

  2. hive 创建/删除/截断 表(翻译自Hive wiki)

    这里罗列常用操作,更多参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL- ...

  3. 版本控制器svn详细

    2 svn介绍 2.1 项目管理中的版本控制问题 通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: 备份多个版本,占用磁盘空间大 解决代码冲突困难 容易 ...

  4. C# 子窗体关闭父窗体的简单方法

    当在一个窗体中调用另一个窗体时,涉及到子窗体关闭的同时,父窗体同时关闭. 例如: 在窗体1中,单击按钮调用窗体2,通过this传递 private void button1_Click(object ...

  5. 搜索框请输入关键字 onfocus 和 onblur

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JavaScript中call,apply,bind方法

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...

  7. 生产者消费者模式做一个golang的定时器

    在主程序启动的时候开一个goroutine作为消费者,用管道连接生产者和消费者,消费者处于无限循环,从管道中获取channel传过来定时event 注意:channel在消费者创建的时候就连通生产者和 ...

  8. 25- 解决'python -m pip install --upgrade pip' 报错问题

    转载于:https://blog.csdn.net/cxs123678/article/details/80659273 再安装包的时候提示 You are using pip version 9.0 ...

  9. ant的hello world很好的官方文档[z]

    http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html

  10. spring定时任务执行两次的原因与解决方法

    spring定时任务,本地执行一次,放到服务器上后,每次执行时会执行两次,原因及解决办法. http://blog.csdn.net/yaobengen/article/details/7031266 ...