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

    from: 如何把MyEclipse中的web项目导入到Eclipse中运行 2016年09月12日 20:57:51 dancheren 阅读数:35329 标签: eclipse 更多 个人分类: ...

  2. ie11的仿真模式

    1>在ie11的仿真模式中,所有版本的按钮都失效,解决方法:再ie的配置中,选项-高级-重置,然后重启ie11 程序员的基础教程:菜鸟程序员

  3. 如何让多个android listview同时使用一个滚动条

    如何让多个android listview同时使用一个滚动条 重新设置ListView的高度 /** * 设置listview高度,注意listview子项必须为LinearLayout才能调用该方法 ...

  4. centos7下载自定义仓库的镜像设置方法

    1.vim /usr/lib/systemd/system/docker.service Description=Docker Application Container Engine Documen ...

  5. 从《数据挖掘概念与技术》到《Web数据挖掘》

    从<数据挖掘概念与技术>到<Web数据挖掘> 认真读过<数据挖掘概念与技术>的第一章后,对数据挖掘有了更加深刻的了解.数据挖掘是知识发展过程的一个步骤.知识发展的过 ...

  6. 网格去噪 Mesh Denoising Guided by Patch Normal Co-filtering via Kernel Low-rank Recovery

    http://staff.ustc.edu.cn/~lgliu/ 网格去噪 https://blog.csdn.net/lafengxiaoyu/article/details/73656060

  7. ZOJ3770Ranking System 2017-04-14 12:42 52人阅读 评论(0) 收藏

    Ranking System Time Limit: 2 Seconds      Memory Limit: 65536 KB Few weeks ago, a famous software co ...

  8. UVA 11235 Frequent values 线段树/RMQ

    vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释**************** ...

  9. Java反射API研究(4)——Class中的重要对象

    一.Constructor与Method的父类:Executable Executable表示一个可执行类,构造方法与普通方法都是Executable AnnotatedType[] getAnnot ...

  10. [翻译]Writing Custom DB Engines 编写定制的DB引擎

    Writing Custom DB Engines  编写定制的DB引擎   FastReport can build reports not only with data sourced from ...