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

pom.xml新增dependency

 1 <dependency>
 2             <groupId>org.mybatisgroupId>
 3             <artifactId>mybatisartifactId>
 4             <version>3.4.4version>
 5         dependency>
 6         <dependency>
 7             <groupId>mysqlgroupId>
 8             <artifactId>mysql-connector-javaartifactId>
 9             <version>5.1.6version>
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>
    
    <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 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数据库管理起来

 

转载于:https://www.cnblogs.com/andrew209/p/9164112.html

你可能感兴趣的:(Java接口自动化测试之集成MyBatis和MySQL (五))