Java接口自动化测试之集成MyBatis和MySQL (五)
2024-08-27 08:34:54
pom.xml新增dependency
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 注册对象的空间命名 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 注册映射文件:java对象与数据库之间的xml文件路径! -->
<mappers>
<mapper resource="mapper/SQLMapper.xml"/>
</mappers>
</configuration>
mapper文件SQLMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 命名空间mapper,如果有多个mapper文件,这个必须唯一 -->
<mapper namespace="com.testng.model"> <select id="doGet" parameterType="Integer" resultType="com.testng.model.DoGetCase">
select * from dogetcase where id = #{id};
</select> <select id="doPost" parameterType="Integer" resultType="com.testng.model.DoPostCase">
select * from dopostcase where id = #{id};
</select> </mapper>
DoGetCase.java / DoPostCase.java 等JavaBean, 根据被测接口参数设计字段, 在MySQL中创建同样的表, 表字段也是根据被测接口的参数设计
package com.testng.model; import lombok.Data; @Data
public class DoGetCase {
private int id;
private String name;
private String password;
private String expected;
}
package com.testng.model; import lombok.Data; @Data
public class DoPostCase {
private int id;
private String name;
private String password;
private String expected;
}
公共类,连接数据用DatabaseUtil.java
package com.testng.utils; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException;
import java.io.Reader; public class DatabaseUtil {
public static SqlSession getSqlSession() throws IOException {
// 获取配置的资源文件
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
// sqlSession能够执行配置文件中的SQL语句
SqlSession sqlSession = factory.openSession();
return sqlSession;
}
}
修改优化TestNG测试用例, 对于每个被测接口可以单独提取出来一个方法, 唯一的变量就是数据库用例的id编号, 这里就不演示了
package com.testng.cases; import com.testng.model.DoGetCase;
import com.testng.utils.DatabaseUtil;
import com.testng.utils.HttpUtils;
import com.testng.utils.ReadConfig;
import org.apache.ibatis.session.SqlSession;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test; import java.io.IOException; public class DoGetTest { @Test(description = "成功的案例")
public void getTest() throws IOException {
SqlSession session = DatabaseUtil.getSqlSession();
DoGetCase doGetCase = session.selectOne("doGet", 1);
String uri = ReadConfig.URI + ReadConfig.GET_PATH1;
String param = "name=" + doGetCase.getName() + "&password=" + doGetCase.getPassword();
String url = uri + param;
Reporter.log("请求地址" + url);
String result = HttpUtils.doGet(url);
Reporter.log("请求结果" + result);
Assert.assertEquals(result, doGetCase.getExpected());
} @Test(description = "失败的案例")
public void getTest2() throws IOException {
SqlSession session = DatabaseUtil.getSqlSession();
DoGetCase doGetCase = session.selectOne("doGet", 2);
String uri = ReadConfig.URI + ReadConfig.GET_PATH2;
String param = "name=" + doGetCase.getName() + "&password=" + doGetCase.getPassword();
String url = uri + param;
Reporter.log("请求地址" + url);
String result = HttpUtils.doGet(url);
Reporter.log("请求结果" + result);
Assert.assertEquals(result, doGetCase.getExpected());
}
}
package com.testng.cases; import com.alibaba.fastjson.JSONObject;
import com.testng.model.DoPostCase;
import com.testng.utils.DatabaseUtil;
import com.testng.utils.HttpUtils;
import com.testng.utils.ReadConfig; import org.apache.ibatis.session.SqlSession;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test; import java.io.IOException; public class DoPostTest { @Test
public void postTest() throws IOException {
SqlSession session = DatabaseUtil.getSqlSession();
DoPostCase doPostCase = session.selectOne("doPost", 1);
String url = ReadConfig.URI + ReadConfig.POST_PATH1;
Reporter.log("请求地址" + url);
JSONObject param = new JSONObject();
param.put("name", doPostCase.getName());
param.put("password", doPostCase.getPassword());
Reporter.log("请求体" + param.toString());
String result = HttpUtils.doPost(url, param.toString());
Reporter.log("请求结果" + result);
Assert.assertEquals(result, doPostCase.getExpected());
} @Test
public void postTest2() throws IOException {
SqlSession session = DatabaseUtil.getSqlSession();
DoPostCase doPostCase = session.selectOne("doPost", 2);
String url = ReadConfig.URI + ReadConfig.POST_PATH2;
Reporter.log("请求地址" + url);
JSONObject param = new JSONObject();
param.put("name", doPostCase.getName());
param.put("password", doPostCase.getPassword());
Reporter.log("请求体" + param.toString());
String result = HttpUtils.doPost(url, param.toString());
Reporter.log("请求结果" + result);
Assert.assertEquals(result, doPostCase.getExpected());
} }
再次执行testng.xml, 得到的结果跟之前的效果一样. 这样设计的好处是测试用例可以用MySQL数据库管理起来
最新文章
- 高效的SQLSERVER分页查询的几种示例分析
- AOP 注入失败的问题
- 团队开发——冲刺1.c
- Amoeba搞定mysql主从读写分离
- 使用GDB调试Android NDK native(C/C++)程序
- 常见HTTP状态码大全
- IOS 监听通讯录是否改变
- js创建对象的方式 三种
- IOS数组排序等
- 平时作业五 Java
- mybatisplus打印sql语句
- HTML标签的绝对路径和相对路径
- 2019.02.11 bzoj3165: [Heoi2013]Segment(线段树)
- 12个HTML和CSS必须知道的重点难点问题
- B. Equations of Mathematical Magic
- tp5中ajax方式提交表单
- Python学习:18.Python异常处理
- artDialog基本使用
- skeleton
- pwm计时器
热门文章
- 阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
- Spring3.2+mybatis3.2+Struts2.3整合
- Selenium: Trying to log in with cookies and get the errorMessage - “Can only set cookies for current domain” or ";Unable to set Cookie";
- [转] 一文弄懂神经网络中的反向传播法——BackPropagation
- 【keepalived】CentOS7.0下安装教程
- Python运维开发基础04-语法基础【转】
- leetcode 307 Range Sum Query
- python3+requests库框架设计01-自动化测试框架需要什么?
- 【转】JVM内存结构 VS Java内存模型 VS Java对象模型
- NDK历史版本下载方法