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数据库管理起来

Java接口自动化测试之集成MyBatis和MySQL (五)的更多相关文章

  1. Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)

    pom.xml导入包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  2. java 接口自动化测试之数据请求的简单封装

    我们自己用java写接口自动化测试框架或者做个接口自动化测试平台的话,是需要自己进行相关的请求的,因此我们需要简单的封装下httpclient,我新建了一个http工具类,将get方法和post方法进 ...

  3. 【转】JAVA接口自动化测试之一个测试方法对应多条测试数据的实现方式

    一.痛点:一条测试数据对应一个测试方法 前面的章节中我们已经写代码实现了登录接口的处理调用,但是一个接口往往是需要多条测试用例才能完整的覆盖到每一种情况. 针对于单接口多条测试用例需要执行的情况,该如 ...

  4. Java接口自动化测试之HTTPClient学习(四)

    pom.xml  文件中dependency <dependencies> <dependency> <groupId>org.testng</groupId ...

  5. Java接口自动化测试之TestNG学习(二)

    在maven项目的pom.xml文件中导入TestNG <?xml version="1.0" encoding="UTF-8"?> <pro ...

  6. Java接口自动化测试之Maven项目的创建(一)

    这里使用Idea创建Maven项目, 过程非常简单, 装好JDK和Idea 1. 安装完后,打开Idea, 选择File→New→Project, 如图 2. 选择maven, 点击Next, 如图 ...

  7. Jmeter(二十八)_Docker+Jmeter+Gitlab+Jenkins+Ant(容器化的接口自动化持续集成平台)

    这套接口自动化持续集成环境已经部署差不多了,现在说说我的设计思路 1:利用Docker容器化Gitlab,Jenkins,Jmeter,Ant,链接如下 Docker_容器化gitlab Docker ...

  8. SpringBoot 集成Mybatis 连接Mysql数据库

    记录SpringBoot 集成Mybatis 连接数据库 防止后面忘记 1.添加Mybatis和Mysql依赖 <dependency> <groupId>org.mybati ...

  9. Spring Boot(六)集成 MyBatis 操作 MySQL 8

    一.简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集. ...

随机推荐

  1. C/C++ 内存对齐原则及作用

    struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储 ...

  2. RabbitMQ简单应用の主题模式(topic)

    Topic exchange(主题转发器) 发送给主题转发器的消息不能是任意设置的选择键,必须是用小数点隔开的一系列的标识符.这些标识符可以是随意,但是通常跟消息的某些特性相关联.一些合法的路由选择键 ...

  3. json文件解析

    场景 读取json文件,读取子域名扫描结果 实现 >>> import json >>> with open("C:\\Users\\Windows32\ ...

  4. Euclideanloss_layer层解析

    这里说一下euclidean_loss_layer.cpp关于该欧式loss层的解析,代码如下: #include <vector> #include "caffe/layers ...

  5. axios请求接口的踩坑之路

    1.跨域问题除了前端安装插件还需要后端php设置,设置如下 Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, ...

  6. Python3学习笔记04-运算符

    算术运算符 +     加两个对象相加 -      减得到负数或是一个数减去另一个数 *     乘两个数相乘或是返回一个被重复若干次的字符串 /     除x 除以 y %    取模返回除法的余 ...

  7. Java文件复制

    主要是工作代码,无解释. /** * 将文件或文件夹source复制到dest * <br>目标文件检测: * <br> a.当文件不存在时:需要创建文件 * <br&g ...

  8. mysql5.7 参数记录 (持续更新)

    sync_binlog 控制数据库的binlog刷到磁盘 默认sync_binlog=1,表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置. sync_binlog ...

  9. python字符串str和字节数组bytes相互转化

    1 引言 后续待补充 2 代码 b = b"Hello, world!" # bytes s = "Hello, world!" # string print( ...

  10. f11 全屏

    function fullScreen() { var el = document.documentElement; var rfs = el.requestFullScreen || el.webk ...