Java接口自动化测试之集成MyBatis和MySQL

Posted 捏不死的小蚂蚁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java接口自动化测试之集成MyBatis和MySQL 相关的知识,希望对你有一定的参考价值。

pom.xml新增dependency

 1 <dependency>
 2             <groupId>org.mybatis</groupId>
 3             <artifactId>mybatis</artifactId>
 4             <version>3.4.4</version>
 5         </dependency>
 6         <dependency>
 7             <groupId>mysql</groupId>
 8             <artifactId>mysql-connector-java</artifactId>
 9             <version>5.1.6</version>
10 </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中创建同样的表, 表字段也是根据被测接口的参数设计

 1 package com.testng.model;
 2 
 3 import lombok.Data;
 4 
 5 @Data
 6 public class DoGetCase {
 7     private int id;
 8     private String name;
 9     private String password;
10     private String expected;
11 }
 1 package com.testng.model;
 2 
 3 import lombok.Data;
 4 
 5 @Data
 6 public class DoPostCase {
 7     private int id;
 8     private String name;
 9     private String password;
10     private String expected;
11 }

公共类,连接数据用DatabaseUtil.java

 1 package com.testng.utils;
 2 
 3 import org.apache.ibatis.io.Resources;
 4 import org.apache.ibatis.session.SqlSession;
 5 import org.apache.ibatis.session.SqlSessionFactory;
 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 7 
 8 import java.io.IOException;
 9 import java.io.Reader;
10 
11 public class DatabaseUtil {
12     public static SqlSession getSqlSession() throws IOException {
13         // 获取配置的资源文件
14         Reader reader = Resources.getResourceAsReader("mybatis.xml");
15         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
16         // sqlSession能够执行配置文件中的SQL语句
17         SqlSession sqlSession = factory.openSession();
18         return sqlSession;
19     }
20 }

修改优化TestNG测试用例, 对于每个被测接口可以单独提取出来一个方法, 唯一的变量就是数据库用例的id编号, 这里就不演示了

 1 package com.testng.cases;
 2 
 3 import com.testng.model.DoGetCase;
 4 import com.testng.utils.DatabaseUtil;
 5 import com.testng.utils.HttpUtils;
 6 import com.testng.utils.ReadConfig;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.testng.Assert;
 9 import org.testng.Reporter;
10 import org.testng.annotations.Test;
11 
12 import java.io.IOException;
13 
14 public class DoGetTest {
15 
16     @Test(description = "成功的案例")
17     public void getTest() throws IOException {
18         SqlSession session = DatabaseUtil.getSqlSession();
19         DoGetCase doGetCase = session.selectOne("doGet", 1);
20         String uri = ReadConfig.URI + ReadConfig.GET_PATH1;
21         String param = "name=" + doGetCase.getName() + "&password=" + doGetCase.getPassword();
22         String url = uri + param;
23         Reporter.log("请求地址" + url);
24         String result = HttpUtils.doGet(url);
25         Reporter.log("请求结果" + result);
26         Assert.assertEquals(result, doGetCase.getExpected());
27     }
28 
29     @Test(description = "失败的案例")
30     public void getTest2() throws IOException {
31         SqlSession session = DatabaseUtil.getSqlSession();
32         DoGetCase doGetCase = session.selectOne("doGet", 2);
33         String uri = ReadConfig.URI + ReadConfig.GET_PATH2;
34         String param = "name=" + doGetCase.getName() + "&password=" + doGetCase.getPassword();
35         String url = uri + param;
36         Reporter.log("请求地址" + url);
37         String result = HttpUtils.doGet(url);
38         Reporter.log("请求结果" + result);
39         Assert.assertEquals(result, doGetCase.getExpected());
40     }
41 }
 1 package com.testng.cases;
 2 
 3 import com.alibaba.fastjson.JSONObject;
 4 import com.testng.model.DoPostCase;
 5 import com.testng.utils.DatabaseUtil;
 6 import com.testng.utils.HttpUtils;
 7 import com.testng.utils.ReadConfig;
 8 
 9 import org.apache.ibatis.session.SqlSession;
10 import org.testng.Assert;
11 import org.testng.Reporter;
12 import org.testng.annotations.Test;
13 
14 import java.io.IOException;
15 
16 public class DoPostTest {
17 
18     @Test
19     public void postTest() throws IOException {
20         SqlSession session = DatabaseUtil.getSqlSession();
21         DoPostCase doPostCase = session.selectOne("doPost", 1);
22         String url = ReadConfig.URI + ReadConfig.POST_PATH1;
23         Reporter.log("请求地址" + url);
24         JSONObject param = new JSONObject();
25         param.put("name", doPostCase.getName());
26         param.put("password", doPostCase.getPassword());
27         Reporter.log("请求体" + param.toString());
28         String result = HttpUtils.doPost(url, param.toString());
29         Reporter.log("请求结果" + result);
30         Assert.assertEquals(result, doPostCase.getExpected());
31     }
32 
33     @Test
34     public void postTest2() throws IOException {
35         SqlSession session = DatabaseUtil.getSqlSession();
36         DoPostCase doPostCase = session.selectOne("doPost", 2);
37         String url = ReadConfig.URI + ReadConfig.POST_PATH2;
38         Reporter.log("请求地址" + url);
39         JSONObject param = new JSONObject();
40         param.put("name", doPostCase.getName());
41         param.put("password", doPostCase.getPassword());
42         Reporter.log("请求体" + param.toString());
43         String result = HttpUtils.doPost(url, param.toString());
44         Reporter.log("请求结果" + result);
45         Assert.assertEquals(result, doPostCase.getExpected());
46     }
47 
48 }

再次执行testng.xml, 得到的结果跟之前的效果一样. 这样设计的好处是测试用例可以用MySQL数据库管理起来

 

以上是关于Java接口自动化测试之集成MyBatis和MySQL 的主要内容,如果未能解决你的问题,请参考以下文章

接口测试实战接口自动化之持续集成(postman+newman+jenkins)

WEB接口测试之Jmeter接口测试自动化 (持续构建)

接口自动化:HttpClient + TestNG + Java - 接口测试概述+自动化环境搭建

接口自动化:HttpClient + TestNG + Java - 接口测试概述+自动化环境搭建

推荐学java——Spring集成MyBatis

推荐学java——Spring集成MyBatis