Java自动化测试(数据库断言 18)
时间:2022-07-23
本文章向大家介绍Java自动化测试(数据库断言 18),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
数据库
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。 所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
JDBC 驱动程序
JDBC(java database connectivity)驱动程序是对 JDBC 规范完整的实现,它的存在在 Java 程序与数据库系统之间建立了一条通信的渠道。
DBUtils封装了JDBC的操作,核心功能如下:
1、QueryRunner中提供对sql语句操作的API.
2、ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
3、DbUtils类是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner核心类:
update(Connection conn, String sql, Object... params) ,执行insert update delete操作
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,执行 select操作
Maven中配置DBUtils
<!-- mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- 数据库连接工具包 -->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
数据库连接工具类
package com.zhongxin.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCUtils {
public static Connection getConnection() {
//定义数据库连接
String url = "jdbc:mysql://api.lemonban.com:3306/futureloan?useUnicode=true&characterEncoding=utf-8";
String user = "future";
String password = "123456";
//定义数据库连接对象
Connection conn = null;
try {
//你导入的数据库驱动包, mysql。
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
更新数据
public static void update() throws SQLException {
QueryRunner runner = new QueryRunner();
String sql = "UPDATE member SET leave_amount=100 WHERE id=2073699;";
Connection conn = JDBCUtils.getConnection();
int count = runner.update(conn, sql);
System.out.println(count);
JDBCUtils.close(conn);
}
插入数据
public static void insert() throws SQLException {
QueryRunner runner = new QueryRunner();
String sql = "INSERT INTO member VALUES(NULL,'zhong','123456','15168230600,1,100,NOW());";
Connection conn = JDBCUtils.getConnection();
int count = runner.update(conn, sql);
System.out.println(count);
JDBCUtils.close(conn);
}
从上可以看出,更新和插入的区别就在SQL
语句不同
查询数据
通过MapHandler查询
public static void main(String[] args) throws Exception {
QueryRunner runner = new QueryRunner();
String sql = "select * from member where id=2073699";
Connection conn = JDBCUtils.getConnection();
MapHandler handler = new MapHandler();
Map<String, Object> map = runner.query(conn, sql, handler);
System.out.println(map);
JDBCUtils.close(conn);
}
数据查询
定义一个数据对象
package com.zhongxin.pojo;
import java.math.BigDecimal;
import java.sql.Timestamp;
public class Member {
private int id;
private String reg_name;
private String pwd;
private String mobile_phone;
private int type;
private BigDecimal leave_amount;
private Timestamp reg_time;
@Override
public String toString() {
return "Member{" +
"id=" + id +
", reg_name='" + reg_name + ''' +
", pwd='" + pwd + ''' +
", mobile_phone='" + mobile_phone + ''' +
", type=" + type +
", leave_amount=" + leave_amount +
", reg_time=" + reg_time +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getReg_name() {
return reg_name;
}
public void setReg_name(String reg_name) {
this.reg_name = reg_name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getMobile_phone() {
return mobile_phone;
}
public void setMobile_phone(String mobile_phone) {
this.mobile_phone = mobile_phone;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public BigDecimal getLeave_amount() {
return leave_amount;
}
public void setLeave_amount(BigDecimal leave_amount) {
this.leave_amount = leave_amount;
}
public Timestamp getReg_time() {
return reg_time;
}
public void setReg_time(Timestamp reg_time) {
this.reg_time = reg_time;
}
}
通过BeanHandler获取
public static void beanHandler() throws SQLException {
QueryRunner runner = new QueryRunner();
String sql = "select * from member where id=2073699";
Connection conn = JDBCUtils.getConnection();
BeanHandler<Member> handler = new BeanHandler<>(Member.class);
Member m = runner.query(conn, sql, handler);
System.out.println(m);
JDBCUtils.close(conn);
}
查询结果
通过BeanListHandler查询
public static void main(String[] args) throws Exception {
QueryRunner runner = new QueryRunner();
String sql = "select * from member";
Connection conn = JDBCUtils.getConnection();
BeanListHandler<Member> handler = new BeanListHandler<>(Member.class);
List<Member> list = runner.query(conn, sql, handler);
for (Member member : list) {
System.out.println(member);
}
JDBCUtils.close(conn);
}
通过ScalarHandler查询
public static void scalarHandler() throws SQLException {
QueryRunner runner = new QueryRunner();
String sql = "select count(*) from member where id=2073699";
Connection conn = JDBCUtils.getConnection();
ScalarHandler<Long> handler = new ScalarHandler<>();
Long count = runner.query(conn, sql, handler);
System.out.println(count);
JDBCUtils.close(conn);
}
数据库断言
从excel中读取sql语句
public static Object getSingleResult(String sql) {
if (StringUtils.isBlank(sql)) {
return null;
}
// 1. 定义返回值
Object result = null;
try {
// 2. 创建DBUtils sql语句操作类
Connection conn = JDBCUtils.getConnection();
// 3. 获取数据库连接
QueryRunner runner = new QueryRunner();
// 4. 创建ScalarHandler,针对单行单列的数据
ScalarHandler handler = new ScalarHandler();
// 5. 执行sql语句
result = runner.query(conn, sql, handler);
// 6. 关闭数据库连接
JDBCUtils.close(conn);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
对注册进行数据库断言
@Test(dataProvider = "datas")
public void test(CaseInfo caseInfo) {
Long beforeSQLresult = (Long) SQLUtils.getSingleResult(caseInfo.getSql());
String responseBody = HttpUtils.call(caseInfo, UserData.DEFAULT_HEADERS);
responseAssert(caseInfo.getExpectedResult(), responseBody);
addWriteBackData(sheetIndex, caseInfo.getId(), 8, responseBody);
Long afterSQLresult = (Long) SQLUtils.getSingleResult(caseInfo.getSql());
if (StringUtils.isNoneBlank(caseInfo.getSql())) {
if (beforeSQLresult == 0 && afterSQLresult == 1) {
System.out.println("数据库断言成功");
} else {
System.out.println("数据库断言失败");
}
}
}
对充值进行数据库断言
@Test(dataProvider = "datas")
public void test(CaseInfo caseInfo) {
BigDecimal beforeSQLresult = (BigDecimal) SQLUtils.getSingleResult(caseInfo.getSql());
HashMap<String, String> headers = getAuthorizationHeader();
String responseBody = HttpUtils.call(caseInfo, headers);
responseAssert(caseInfo.getExpectedResult(), responseBody);
addWriteBackData(sheetIndex, caseInfo.getId(), 8, responseBody);
BigDecimal afterSQLresult = (BigDecimal) SQLUtils.getSingleResult(caseInfo.getSql());
if (StringUtils.isNotBlank(caseInfo.getSql())) {
String amountStr = JSONPath.read(caseInfo.getParams(), "$.amount").toString();
BigDecimal amout = new BigDecimal(amountStr);
BigDecimal subtractResult = afterSQLresult.subtract(beforeSQLresult);
// compareTo == 0 => 相等
if (subtractResult.compareTo(amout) == 0) {
System.out.println("数据库断言成功");
} else {
System.out.println("数据库断言失败");
}
}
}
- 工具推荐: 汽车CAN总线分析框架CANToolz
- Windows下jps, jconsole无法查看本地java进程问题解决
- DateFormat 线程不安全
- zip文件操作导致JVM crash
- 如何搭建你自己的“深度学习”机器?
- MySQL INSERT INTO...ON DUPLICATE KEY UPDATE的使用
- 通过Java代码来模拟乘法器
- INET_ATON()函数在MySQL5.6版本和5.7版本的差异
- Linux主机之间ssh免密登录配置
- 远控木马Posion Ivy开始肆虐缅甸和其它亚洲国家
- Slf4j+Logback配置文件变量使用小记
- Storm消息处理可靠性保证
- git+github创建分支&提交并贡献代码(linux环境)
- 使用Nginx代理restful实现SSL链路加密
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- MySQL information_schema详解 GLOBAL_STATUS和SESSION_STATUS
- Python 进阶(四):数据库操作之 MySQL
- Python 进阶(五):数据库操作之 SQLite
- Python 进阶(六): Excel 基本操作
- 基于Rust-vmm实现Kubernetes运行时
- 云开发如何为腾讯游戏年度发布会保驾护航?
- 跨端方案的三大困境
- Python 进阶(七): Word 基本操作
- Python 进阶(八):XML 基本操作
- Python 进阶(九):JSON 基本操作
- Kafka集群监控系统Kafka Eagle部署与体验
- MySQL information_schema详解 GLOBAL_VARIABLES和SESSION_VARIABLES
- 我爬取了知乎上大学相关话题中的热门高赞问答,其中是否有你大学生活的影子呢?
- MySQL information_schema详解 KEY_COLUMN_USAGE
- Python 实现黑客帝国代码雨效果