其实,是有很多种数据断言的使用。那么,我们在接口的测试中,到底应不应该加上数据库断言呢?我的观点是,视情况而定;某一些特殊的场景或者特殊的业务,那么我们就一定要加上数据库断言。
不是我们测试人员,不相信开发或者接口返回成功那么就一定会进入库。
比如:支付类、流水类、账户余额等相关和金额相关,最好是前期就加入这些断言进入。
那么我在实际工作中,也有遇到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. 使用net Manager工具配置远程连接oracle

    一,在服务端配置oracle端口在命令行中输入netca命令,打开相关配置默认端口号为1521 二,配置端口后使用Telnet工具调试端口是否联通 在命令行输入telnet 服务器ip 端口号 三,找 ...

  2. a=a++问题引发的思考

    使用javap命令解析出来的a=a++过程的字节码(int a=1; a=a++): 0: iconst_1  将数值1压入栈顶 1: istore_1  栈顶值1存入局部变量表的第一个slot中 2 ...

  3. ESXi系统命令行下启动虚拟机

    从命令行启动虚拟机: 用命令列出虚拟机的ID:vim-cmd vmsvc/getallvms |grep <vm name>注意: 第一列输出是vmid. 用命令查看虚拟机启动状态:vim ...

  4. Android系统编译与测试

    1.Android系统分析 2.下载Android源代码(不包括Linux内核部分) 下载好了的Android_5.01.tar.gz,通过samba复制到ubuntu里,再解压之. 可以看到Andr ...

  5. Text Relatives II

    [Text Relatives II] When your app determines that the user has requested the edit menu—which could b ...

  6. 在PowerDesigner中设计物理模型1——表和主外键(转)

    出处:http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html 在PD中建立物理模型由以下几种办法: 直接新建物理模型. 设计好概念 ...

  7. Javascript 知识遗漏点梳理。

    先说一下我之前学习Javascript的学习经历,然后就是最近几天学到以前没有注意的知识遗漏点. 1.之前的学习经历和方法: 最开始是看了Javascript DOM编程与艺术这本书,把慕课网上的&l ...

  8. Windows下安装Redis及php的redis拓展教程

    一.安装前必读 Windows 64位操作系统 Redis 安装包(版本3.0.5,截止2017-05-29最新redis版本为3.2.9) 注意事项: 1.在window下如果你还需安装php的re ...

  9. swift学习之UITabelView ----UITableViewCell

    // //  OneViewController.swift //  tab // //  Created by su on 15/12/7. //  Copyright © 2015年 tian. ...

  10. (一)JQuery动态加载js的三种方法

    Jquery动态加载js的三种方法如下: 第一种: $.getscript("test.js"); 例如: <script type="text/javascrip ...