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. 使用jQuery重置(reset)表单的方法

    由于JQuery中,提交表单是像下面这样的: 代码如下: $('#yigeform').submit() 所以,想当然的认为,重置表单,当然就是像下面这样子喽: 代码如下: $('#yigeform' ...

  2. Nginx系列6:对称加密与非对称加密各自的应用场景

    强推:推荐一篇通俗易懂的对称加密和非对称加密的文章:https://segmentfault.com/a/1190000004461428 推荐一篇文章:对称加密算法与非对称加密算法的优缺点:http ...

  3. android 组建添加透明度

    给TextView添加透明度,起初用的方法是android:alpha = "0.3"  添加后,文字显示也有点透明发虚,后来改成设置background,然后 backgroun ...

  4. python 字典不区分大小写工具类

    # -*- coding: utf-8 -*- # @Time : 2018/12/20 4:28 PM # @Author : cxa # @File : DictHelper.py # @Soft ...

  5. html5 file 上传文件

    <body> <header> <h2>Pure HTML5 file upload</h2> </header> <div clas ...

  6. Liunx系统命令sed的使用

    作者:邓聪聪 Liunx命令中sed的使用历程 sed [-nefr] [动作]选项与参数:-n  :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出 ...

  7. linux系统的三种网络连接模式

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

  8. 在Centos7 上安装SVN

    https://blog.csdn.net/crossangles_2017/article/details/78553266 1.安装 使用yum安装非常简单: yum install subver ...

  9. HDU 5297

    用x ^ (1 / n) 来求个数,容斥原理 , Num会向后移动, 迭代到不再变化,退出循环 #include<iostream> #include<cstdio> #inc ...

  10. Linux系统下安装pycharm

    在 linux下打开浏览器,搜索pycharm,点击download. 下载好的文件的名称可能是 ‘pycharm-professional-2018.3.5.tar.gz’. 打开终端界面,输入命令 ...