其实,是有很多种数据断言的使用。那么,我们在接口的测试中,到底应不应该加上数据库断言呢?我的观点是,视情况而定;某一些特殊的场景或者特殊的业务,那么我们就一定要加上数据库断言。
不是我们测试人员,不相信开发或者接口返回成功那么就一定会进入库。
比如:支付类、流水类、账户余额等相关和金额相关,最好是前期就加入这些断言进入。
那么我在实际工作中,也有遇到redis里面的数据也会进行断言。 下面也是我之前的疑问?
接口我们一般做断言,基本情况之下,我们只要判断关键字的接口响应即可,这样也没问题的,不需要再去对数据库层面再去判断了吧。可是在实际之中,也发现了一些开发的接口响应字段的结果和实际数据库存取的结果不同,原因是因为,
我的入参是弱密码,系统会强制修改为安全密码存入数据库,可实际接口确返回入参的弱密码,和实际库不同,这种应该如何处理,就是要断言也要查询数据库层面了,这样的话,工作量很大,接口断言,正确的断言方式,应该怎么具体做,有没有通用的方式呢?
还是看我们的测试目的。接口测试的对象是接口本身,所以主要是对接口响应进行断言。如果不判断响应直接去校验数据库,测试的其实是入库逻辑而不是接口,两者测试对象不一样。每个接口都去db再做一层校验一般不必要。单独有入库逻辑校验的case覆盖。
当然两层的校验都可以在同一套框架内处理。你这里强弱密码转换的问题其实还是暴露db层的问题。 那么,最后其实还是我们db层有问题,所以前期最好还是入库检查比较好。 另外一个就是用例的驱动实现方式问题;
Excel其实是实际中用得比较多的,正常设计用例case应该足够用了。当然如果是想用接口来灌数据,最好还是借助数据库。
package data;
import org.assertj.db.type.Request;
import org.assertj.db.type.Source;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//静态引入
import static org.assertj.db.api.Assertions.assertThat; /**
* @ClassName DataDemo02
* @Description 数据库断言系列三
* @Author 12457
* @Date 2019/2/2 13:58
* @Version 1.0
**/ public class DataDemo02 { /*
* 数据库配置基本信息
**/
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/course";
private static String username = "root";
private static String password = "abc-123";
private static Connection conn = null; @BeforeClass
public static void beforeClass(){
//数据库连接
try {
Class.forName(driver);
conn = (Connection) DriverManager.getConnection(url,username,password);
}catch (ClassNotFoundException ex){
ex.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}
} /*
* 还是按照系列一里面插入的3条数据为例,我们对age列中的数据进行断言查看
* 在实际应用中,此断言能起到什么作用,比如;我们去构造测试用例的时候,可以对用例入参的value值进行断言,
* 然后和实际的入库值进行比对
**/
@Test(description = "获取数据库当前列所有的value值")
public void get_cloumn_request_assertion_examples(){
Source source = new Source(url,username,password);
Request request = new Request(source,"SELECT * FROM students");
String name = request.getColumn(3).getName();
System.out.println("学生表第三列的value值是:" + name);
//对学生表的年龄列判断
assertThat(request).column("age")
.hasValues("11","22","33");
} } 实际运行结果如下:

[TestNG] Running:
C:\Users\Administrator\.IntelliJIdea2017.3\system\temp-testng-customsuite.xml
学生表第三列的value值是:AGE

@Test(description = "对表中的某一个具体的数据断言")
public void get_text_assertion_examples(){
Source source = new Source(url,username,password);
Request request = new Request(source,"SELECT * FROM students");
//断言数据库学生表中第一行的数据age字段的年龄判断
assertThat(request).row(0)
.value("age")
.isEqualTo("11")
.isNotEqualTo("12");
}
@Test(description = "数值断言")
public void get_num_assertion_examples(){
Source source = new Source(url,username,password);
Request request = new Request(source,"SELECT * FROM students");
//对具体的数据数值类型进行判断,比如说年龄大小11
assertThat(request).row(1)
.value("age").isNotZero()
.isGreaterThan(1).isGreaterThanOrEqualTo(11)
.isLessThan(22).isLessThanOrEqualTo(11); }
//列类型判断
@Test
public void type_request_assertion_examples() {
Source source = new Source(url,username,password);
Request request = new Request(source,"SELECT * FROM students"); assertThat(request)
.column().isNumber(false)
.column().isDate(false).isOfAnyTypeIn(ValueType.DATE, ValueType.NUMBER)
.column().isText(false)
.column().isNumber(false).isOfType(ValueType.NUMBER, false)
.column().isTime(false)
.column().isBoolean(true);
}

AssertJ断言系列-----------<数据库断言三>的更多相关文章

  1. AssertJ断言系列-----------<数据库断言二>

    那么,在实际的接口测试中,我们除了要断言响应的数据正确之外,可能有的还需要断言数据层是否数据真的有入库. assertj db是可以直接对数据库进行断言和操作的. 一.创建一个students表 CR ...

  2. AssertJ断言系列<一>

    1 - Get AssertJ Core assertions Maven的pom.xml加入如下配置: <dependency> <groupId>org.assertj&l ...

  3. ShoneSharp语言(S#)的设计和使用介绍系列(7)— 布尔Bool及对象Object

    ShoneSharp语言(S#)的设计和使用介绍 系列(7)— 布尔Bool及对象Object 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ ...

  4. Java单元測试工具JUnit 5新特性一览

    Java单元測试工具JUnit 5新特性一览 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs JUnit是最流行的开源 ...

  5. 流式断言器AssertJ介绍

    本文来自网易云社区 作者:范旭斐 大家在使用testng.junit做自动化测试的过程中,经常会用到testng.junit自带的断言器,有时候对一个字符串.日期.列表进行断言很麻烦,需要借助到jdk ...

  6. JUnit 单元测试断言推荐 AssertJ

    文章转自:http://sgq0085.iteye.com/blog/2030609 前言 由于JUnit的Assert是公认的烂API,所以不推荐使用,目前推荐使用的是AssertJ. Assert ...

  7. Pytest系列(2) - assert断言详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 与unittest不同,py ...

  8. Selenium3 + Python3自动化测试系列五——常用断言Assertion

    断言Assertion 验证应用程序的状态是否同所期望的一致. 常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选. selenium 提供了三种模式的断言:a ...

  9. $python正则表达式系列(5)——零宽断言

    本文主要总结了python正则零宽断言(zero-length-assertion)的一些常用用法. 1. 什么是零宽断言 有时候在使用正则表达式做匹配的时候,我们希望匹配一个字符串,这个字符串的前面 ...

随机推荐

  1. ICG游戏:证明,先手不是必胜就是必败。

    简介: ICG游戏:Impartial Combinatorial Games,公平的组合游戏. 以下是定义,来自网络,可能不够严谨: 1.两名选手:2.两名选手轮流行动,每一次行动可以在有限合法操作 ...

  2. Python深度学习之安装theano(windows)

    前方预警:windows的坑太多了,抛弃用linux吧 安装theano,提前清空自己的python环境吧,坑太多了,anaconda会自动安装path 一,首先安装python包管理anaconda ...

  3. cnblog博客管理

    http://www.cnblogs.com/wc1903036673/                                        12436109 https://www.cnb ...

  4. [Training Video - 6] [File Reading] [Groovy] Reading Properties file

    Reading Properties file : Properties prop = new Properties() def path = "D:\\SoapUIStudy\\appli ...

  5. [SQL]查询数据库中具有某个字段名的表

    SELECT t.name AS table_name, c.name AS column_name FROM XOIFundData.sys.tables AS t INNER JOIN XOIFu ...

  6. eclipse中maven install提示编码GBK的不可映射字符

    今天在eclipse中使用Maven编译项目源代码时,结果如下了如下的错误 在Java源码中没有提示任何报错,即便是改掉项目编码也是不行,如下图所示:

  7. StarUML 5.0问题解决:Failed to open the model file. Invalid file format.

    使用StarUML 5.0打开一个已有的文件时,如果遇到报"Failed to open the model file. Invalid file format."错误,则原因可能 ...

  8. 与table有关的布局

    当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:table.table-row和table-cell,它也是最后一款支持这些属性值的主流浏览器.它标志着复杂CSS ...

  9. 用Swift实现一款天气预报APP(三)

    这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 通过前面的学习,一个天气预报的APP已经基本可用了.至少 ...

  10. ZOJ 3702 Gibonacci number 2017-04-06 23:28 28人阅读 评论(0) 收藏

    Gibonacci number Time Limit: 2 Seconds      Memory Limit: 65536 KB In mathematical terms, the normal ...