AssertJ断言系列-----------<数据库断言三>
其实,是有很多种数据断言的使用。那么,我们在接口的测试中,到底应不应该加上数据库断言呢?我的观点是,视情况而定;某一些特殊的场景或者特殊的业务,那么我们就一定要加上数据库断言。
不是我们测试人员,不相信开发或者接口返回成功那么就一定会进入库。
比如:支付类、流水类、账户余额等相关和金额相关,最好是前期就加入这些断言进入。
那么我在实际工作中,也有遇到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断言系列-----------<数据库断言三>的更多相关文章
- AssertJ断言系列-----------<数据库断言二>
那么,在实际的接口测试中,我们除了要断言响应的数据正确之外,可能有的还需要断言数据层是否数据真的有入库. assertj db是可以直接对数据库进行断言和操作的. 一.创建一个students表 CR ...
- AssertJ断言系列<一>
1 - Get AssertJ Core assertions Maven的pom.xml加入如下配置: <dependency> <groupId>org.assertj&l ...
- ShoneSharp语言(S#)的设计和使用介绍系列(7)— 布尔Bool及对象Object
ShoneSharp语言(S#)的设计和使用介绍 系列(7)— 布尔Bool及对象Object 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ ...
- Java单元測试工具JUnit 5新特性一览
Java单元測试工具JUnit 5新特性一览 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs JUnit是最流行的开源 ...
- 流式断言器AssertJ介绍
本文来自网易云社区 作者:范旭斐 大家在使用testng.junit做自动化测试的过程中,经常会用到testng.junit自带的断言器,有时候对一个字符串.日期.列表进行断言很麻烦,需要借助到jdk ...
- JUnit 单元测试断言推荐 AssertJ
文章转自:http://sgq0085.iteye.com/blog/2030609 前言 由于JUnit的Assert是公认的烂API,所以不推荐使用,目前推荐使用的是AssertJ. Assert ...
- Pytest系列(2) - assert断言详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 与unittest不同,py ...
- Selenium3 + Python3自动化测试系列五——常用断言Assertion
断言Assertion 验证应用程序的状态是否同所期望的一致. 常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选. selenium 提供了三种模式的断言:a ...
- $python正则表达式系列(5)——零宽断言
本文主要总结了python正则零宽断言(zero-length-assertion)的一些常用用法. 1. 什么是零宽断言 有时候在使用正则表达式做匹配的时候,我们希望匹配一个字符串,这个字符串的前面 ...
随机推荐
- 8-matlab-gui-显示图片有坐标刻度问题
在图片上显示图片时,总是有图片,一遍做法是使得刻度为空就可了: 在你的每一个axes的CreateFcn函数中添加一下代码即可:set(hObject,'xTick',[]);set(hObject, ...
- Python 中的POST/GET包构建以及随机字符串的生成-乾颐堂
现在,我们来用Python,创建GET包和POST包. 至于有什么用处,大家慢慢体会. Python 中包含了大量的库,作为一门新兴的语言,Python 对HTTP有足够强大的支持. 现在,我们引入新 ...
- USB相关注册表
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{ SYSTEM\\CurrentControlSet\\Control\\ ...
- nvidia 驱动下载地址
http://www.nvidia.com/Download/index.aspx?lang=en-us
- [SoapUI]怎样保存response到本地文件夹
def myOutFile = "D:/AUS/Aspect Huntley feed URLs/Automation Save Responses/ahresearch.xml" ...
- Java 设计模式系列(十五)迭代器模式(Iterator)
Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...
- velocity在html中换行符转换
<td colspan="3" class="tdContent2">$!obj.getDealInfo().replaceAll("\r ...
- 马婕 2014MBA专硕考试 报刊选读 6(转)
http://blog.sina.com.cn/s/blog_3e66af4601016udh.html Protecting the weakest保护最弱势群体The recession may ...
- BZOJ 2002 Bounce 弹飞绵羊 (分块或动态树)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 13768 Solved: 6989[Subm ...
- RocketMQ服务器监控误区
请不要监控10912端口 case: result: 监控10912端口会导致HAService异常,新起线程,吃掉内存,无限次监控虚拟机将宕机! 时间上是直接因果关系. 监控10911 和 9876 ...