接口测试中对于数据库的交互是很重要的,主要体现在用例的前置条件、数据处理、断言校验等。
使用JDBCTemplate实现一个简单的数据库交互小工具。
1.pom包的引入:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.9</version>
</dependency>
2.在common(可自定义)文件下新建一个sql请求的类,首先讲你的账号、密码、地址设置为全局变量:
public class SqlConnection {
public static String ADD_test = "jdbc:mysql://11.111.1111.111:3306/payment?useSSL=false";
public static String PW_test = "QWERTyuiop";
public static String UN_test = "test";
}
(1)add为数据库地址, MySQL在高版本需要指明是否进行SSL连接,所以后面需要带useSSL = false,不用设置ssl。
(2)pw为密码
(3)UN为账号
(4)后缀均带有test是为了区分不同环境或者不同名称的数据库,便于后续使用连接。
3.在这个类中新建一个方法来实现jdbctempalte的配置:
public JdbcTemplate JdbcSql(String address,String password,String username){
//配置datasource数据源
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(address);
dataSource.setUsername(username);
dataSource.setPassword(password);
// 将数据源配置给jdbcTemplate
JdbcTemplate jdbcTemplatesql = new JdbcTemplate(dataSource);
return jdbcTemplatesql;
}
(1)这个方法只是返回了一个配置完成的JdbcTempalte对象,并没有实现请求方法
(2)可以通过配置不同的地址、账号、密码来实现不同mysql库的连接。
4.实际应用一下,新建一个case文件,配置好对应的sql:
//需要引入的包
// 刚刚写好的sql请求方法
import common.SqlConnection;
// 需要用到jdbc的请求方法
import org.springframework.jdbc.core.JdbcTemplate;
// sql请求类中的所有变量
import static common.SqlConnection.*;
public class dataPushTest {
//获取数据库配置
SqlConnection sqlConnection = new SqlConnection();
// 配置账号密码和地址,生成一个mysql库的连接。
JdbcTemplate jdbcSql = sqlConnection.JdbcSql(ADD_test,PW_test,UN_test);
}
(1)可以生成多了 数据库的连接,只需要 给这个方法 传入不同的账号密码即可。
5.新建一个测试方法,使用数据库进行断言:
@Test(=)
public void BVT_listTest() throws IOException {
Map<String,Object> sqlresults = jdbcSql.queryForMap("SELECT* from FundBalanceDaily where organizationCode =? and reconDate = ? and deleted = ?","2021120999532972","2022-06-22",0);
Assert.assertEquals(sqlresults.get("fundId").toString(),"30312","数据库获取到的id正确");
}
(1)queryForMap查询出的数据类型为Map,还可以使用queryForList查询数据list,数据类型为List<Map<String,Object> >
ps:一般list方法可用于返回数据数量的对比
(2)还可以使用 update() 方法实现delete、update、instert 的sql语句。