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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!-- 注册对象的空间命名 -->
  6. <environments default="development">
  7. <environment id="development">
  8. <transactionManager type="JDBC"/>
  9. <dataSource type="POOLED">
  10. <property name="driver" value="com.mysql.jdbc.Driver"/>
  11. <property name="url" value="jdbc:mysql://localhost:3306/test"/>
  12. <property name="username" value="root"/>
  13. <property name="password" value="root"/>
  14. </dataSource>
  15. </environment>
  16. </environments>
  17. <!-- 注册映射文件:java对象与数据库之间的xml文件路径! -->
  18. <mappers>
  19. <mapper resource="mapper/SQLMapper.xml"/>
  20. </mappers>
  21. </configuration>

mapper文件SQLMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <!-- 命名空间mapper,如果有多个mapper文件,这个必须唯一 -->
  5. <mapper namespace="com.testng.model">
  6.  
  7. <select id="doGet" parameterType="Integer" resultType="com.testng.model.DoGetCase">
  8. select * from dogetcase where id = #{id};
  9. </select>
  10.  
  11. <select id="doPost" parameterType="Integer" resultType="com.testng.model.DoPostCase">
  12. select * from dopostcase where id = #{id};
  13. </select>
  14.  
  15. </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 (五)的更多相关文章

  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. 20165234 《Java程序设计》第六周学习总结

    第六周学习总结 教材学习内容总结 第八章 常用实用类 String类 Java专门提供了用来处理字符序列的 String 类.String类在java.lang包中,由于 java.lang 包中的类 ...

  2. graph slam BACK END 相关技术资料收集

    学习SLAM首推2个网站: 1. WIKI上的SLAM介绍与资源总结:http://en.wikipedia.org/wiki/Simultaneous_localization_and_mappin ...

  3. 【转】Python基础-封装与扩展、静态方法和类方法

    [转]Python基础-封装与扩展.静态方法和类方法 一.封装与扩展 封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者的代码:而外部使用者只知道一个接口(函数),只要接口(函数 ...

  4. Shell-匹配FTP文件名

    想弄个脚本,下载每日构建的版本,由于版本文件名中有构建时间(不是固定值),只能按日期确认文件名,例如:project_name_2019-01-04*.exe 搜索了下,可以用dir filename ...

  5. Linux只读账号配置【转】

    整个配置的命令如下(主要使用了:Linux bash受限的shell(RESTRICTED SHELL)) 步骤#1.创建只读shell(这步可以省略) ln -s /bin/bash /bin/rb ...

  6. Python运维开发基础07-文件基础【转】

    一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...

  7. Oracle服务器定位CPU使用率高的瓶颈(SQL)

    1.首先用TOP命令监控系统资源,如果是AIX系统,就用topas,进入TOP命令的滚动刷新数据时,发现userCPU高达98%!! 保持top的状态下,按shift+p,可以将所有进程按CPU使用率 ...

  8. canvas - 钟表

    Demo : Demo Demo截图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  9. css效果文字多了就...

    开发中经常会遇见这样的问题,一段文字或者一段标题过长了,就让超出长度的部分益...替换.具体怎么做的呢?直接上代码: <style> *{ margin: 0; padding: 0; } ...

  10. LA 6893 矩阵HASH (模板)

    #include<stdio.h> #include<string.h> typedef unsigned long long ULL; ; ; int test,n,m,x, ...