java接口自动化系列(07):解析并执行初始化sql
本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/15867903.html
实现目标
先将常用变量占位符替换为实际值,然后解析并执行初始化sql,保证用例中的数据可用,这样不用每次执行测试前修改测试数据。
添加pom依赖
连接操作数据库
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency>
解析初始化sql(json数组)
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency>
添加配置文件
数据库连接配置jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.117.180:3309/gift?useUnicode=true&characterEncoding=utf-8&useSSL=true jdbc.username=root jdbc.password=test
添加实体类
sql
package com.qzcsbj.autotest.entity; /** * @公众号 : 全栈测试笔记 * @博客 : www.cnblogs.com/uncleyong * @微信 : ren168632201 * @描述 : <> */ public class Sql { private String sqlNo; private String sql; public String getSqlNo() { return sqlNo; } public void setSqlNo(String sqlNo) { this.sqlNo = sqlNo; } public String getSql() { return sql; } public void setSql(String sql) { this.sql = sql; } @Override public String toString() { return "Sql{" + "sqlNo='" + sqlNo + '\'' + ", sql='" + sql + '\'' + '}'; } }
添加工具类
添加JDBCUtil.java
package com.qzcsbj.autotest.utils; import org.apache.log4j.Logger; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.HashMap; import java.util.Properties; /** * @公众号 : 全栈测试笔记 * @博客 : www.cnblogs.com/uncleyong * @微信 : ren168632201 * @描述 : <> */ public class JDBCUtil { public static Logger logger = Logger.getLogger(JDBCUtil.class); public static Properties properties = new Properties(); static { // 解析jdbc.properties获取数据库配置信息 try { InputStream in = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"); properties.load(in); } catch (IOException e) { logger.info("解析发生异常。"); e.printStackTrace(); } } public static void query(String sql){ HashMap<String, Object> stringObjectHashMap = null; try { // 1、调用方法,获取连接 Connection connection = getConnection(); // 2、获取PreparedStatement Statement statement = connection.createStatement(); // 3、调用查询方法,执行查询,返回结果集(ResultSet) ResultSet resultSet = statement.executeQuery(sql); // 获取查询相关的信息 ResultSetMetaData metaData = resultSet.getMetaData(); // 获取sql中有多少个查询字段 int columnCount = metaData.getColumnCount(); // System.out.println("查询字段数为:" + columnCount); stringObjectHashMap = new HashMap<String, Object>(); // 从结果集获取查询数据:循环取出每个查询字段 while (resultSet.next()){ for (int i = 1; i <= columnCount; i++) { String columnLabel = metaData.getColumnLabel(i); String columnValue = resultSet.getObject(columnLabel).toString(); stringObjectHashMap.put(columnLabel, columnValue); } } logger.info("查询结果:" + stringObjectHashMap); } catch (Exception e) { e.printStackTrace(); } } public static void nonQuery(String sql){ try { // 1、调用方法,获取连接 Connection connection = getConnection(); // 2、获取statement Statement statement = connection.createStatement(); // 3、调用查询方法,执行查询,返回结果集(ResultSet) int n = statement.executeUpdate(sql); if (n>0){ logger.info("操作成功数据条数:【" + n + "】"); } else { logger.info("操作成功数据条数:【0】"); } } catch (Exception e) { e.printStackTrace(); } } // 获取数据库连接 public static Connection getConnection() throws SQLException { String url = properties.getProperty("jdbc.url"); String username = properties.getProperty("jdbc.username"); String password = properties.getProperty("jdbc.password"); Connection connection = DriverManager.getConnection(url, username, password); return connection; } }
添加InitSqlUtil.java
package com.qzcsbj.autotest.utils; import com.alibaba.fastjson.JSONObject; import com.qzcsbj.autotest.entity.Sql; import org.apache.log4j.Logger; import java.util.List; /** * @公众号 : 全栈测试笔记 * @博客 : www.cnblogs.com/uncleyong * @微信 : ren168632201 * @描述 : <> */ public class InitSqlUtil { public static Logger logger = Logger.getLogger(InitSqlUtil.class); public static void doInitSql(String initSql) { // 初始化sql解析为对象 List<Sql> sqls = JSONObject.parseArray(initSql, Sql.class); // 遍历获取sql,并执行 for (Sql sql_ : sqls) { String sqlNo = sql_.getSqlNo(); String sql = sql_.getSql().trim(); // logger.info("获取到的sql:sqlNo="+sqlNo+", sql=" + sql); String prefix = sql.split(" ")[0].trim().toLowerCase(); if (prefix.startsWith("select")){ logger.info("=====执行select语句:" + sql_); // 执行查询sql,获取执行结果 JDBCUtil.query(sql); } else if (prefix.startsWith("delete")){ logger.info("=====执行delete语句:" + sql_); JDBCUtil.nonQuery(sql); } else if (prefix.startsWith("update")){ logger.info("=====执行update语句:" + sql_); JDBCUtil.nonQuery(sql); } else if (prefix.startsWith("insert")){ logger.info("=====执行insert语句:" + sql_); JDBCUtil.nonQuery(sql); } else { logger.info("=====sql语句【"+ sql_ +"】不符合规范"); } } } }
测试方法中执行初始化sql
// 执行初始化sql if (initSql!=null && initSql.trim().length()>0){ // 替换sql中的参数 initSql = VariableUtil.variableSubstitution(initSql); // 调用方法 InitSqlUtil.doInitSql(initSql); }
结果
运行testng.xml文件,可以看到操作数据库成功
__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!