上一篇我们介绍用如何用yaml结合testng做数据驱动,就又想来个数据库的参数化
备注:@DataProvider的返回值类型只能是Object[][]与Iterator<Object>[]
思路: 解析sql查询返回结果,然后把解析出来的list转换成Object[][]类型的数据,且结合在@DataProvider中。
然后把解析出来的list转换成Object[][]类型的数据,且结合在@DataProvider中。
DbDataHeleper.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 import org.testng.annotations.DataProvider; import java.sql.*; import java.util.*; /** * 数据库操作工具 * * @author longrong.lang */ public class DbDataHeleper { static Connection conn = null; public static String driverClassName = "com.mysql.jdbc.Driver"; public static String url = "jdbc:mysql://127.0.0.1:3306/demo"; public static String username = "root"; public static String password = "root"; /** * 执行sql * * @param jdbcUrl 数据库配置连接 * @param sql sql语句 * @return */ public static List<Map<String, String>> getDataList(String jdbcUrl, String sql) { List<Map<String, String>> paramList = new ArrayList<Map<String, String>>(); Map<String, String> param = new HashMap<>(); Statement stmt = null; try { // 注册 JDBC 驱动 Class.forName(driverClassName); // 打开链接 conn = DriverManager.getConnection(jdbcUrl, username, password); // 执行查询 stmt = conn.createStatement(); ResultSet rs = null; rs = stmt.executeQuery(sql); String columns[] = {"username", "passWord", "remark"}; // 展开结果集数据库 while (rs.next()) { Map<String, String> map = new LinkedHashMap<String, String>(); for (int i = 0; i < columns.length; i++) { String cellData = rs.getString(columns[i]); map.put(columns[i], cellData); } paramList.add(map); } // 完成后关闭 rs.close(); stmt.close(); conn.close(); } catch (SQLException se) { // 处理 JDBC 错误 System.out.println("处理 JDBC 错误!"); } catch (Exception e) { // 处理 Class.forName 错误 System.out.println("处理 Class.forName 错误"); } finally { // 关闭资源 try { if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } return paramList; } @DataProvider public Object[][] dbDataMethod() { String sql = "SELECT * FROM `account`;"; List<Map<String, String>> result = getDataList(url, sql); Object[][] files = new Object[result.size()][]; for (int i = 0; i < result.size(); i++) { files[i] = new Object[]{result.get(i)}; } return files; } }
再通过测试文件来测试一下:
TestDbData.java import org.testng.annotations.Test; import java.util.Map; public class TestDbData extends DbDataHeleper { @Test(dataProvider = "dbDataMethod") public void testmethod1(Map<?, ?> param) { System.out.println(param.get("username") + "\t" + param.get("passWord") + "\t" + param.get("remark")); } }
运行效果:
[TestNG] Running: C:\Users\Administrator\.IntelliJIdea2018.2\system\temp-testng-customsuite.xml rongrong 123456 3 xiaoqiang 123654 4 gates 112121 1 gates 112121 2 =============================================== Default Suite Total tests run: 4, Failures: 0, Skips: 0 =============================================== Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 Process finished with exit code 0
EOF
本文作者:久曲建的测试窝 本文链接:https://www.cnblogs.com/longronglang/p/9971740.html 关于博主:评论和私信会在第一时间回复。或者直接私信我。 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处! 声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力! 优秀不够,你是否无可替代
软件测试交流QQ群:721256703,期待你的加入!!
欢迎关注我的微信公众号:软件测试君
java结合testng,利用mysql数据库做数据源的数据驱动实例
标签:demo param 注册 return 实例 nts 替代 软件测试 arraylist
查看更多关于java结合testng,利用mysql数据库做数据源的数据驱动实例的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did118268