Java&Selenium数据驱动【DataProvider+TestNG+Mysql】

  1. package testNGWithDataDriven;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.sql.*;
  7. import org.testng.Assert;
  8. import org.testng.annotations.DataProvider;
  9. import org.testng.annotations.Test;
  10. import org.testng.annotations.BeforeMethod;
  11. import org.testng.annotations.AfterMethod;
  12. import org.openqa.selenium.By;
  13. import org.openqa.selenium.WebDriver;
  14. import org.openqa.selenium.chrome.ChromeDriver;
  15.  
  16. public class TestNGDBDriven {
  17. public WebDriver driver;
  18. String baseUrl = "http://www.sogou.com";
  19. @DataProvider(name="testdata")
  20. public static Object[][] words() throws IOException{
  21. return getTestData("testdata");
  22. }
  23. @Test(dataProvider = "testdata")
  24. public void testSearch(String searchWord1, String searchWord2, String searchResult){
  25. driver.get(baseUrl + "/");
  26. driver.findElement(By.id("query")).sendKeys(searchWord1+" "+searchWord2);
  27. driver.findElement(By.id("stb")).click();
  28. Assert.assertTrue(driver.getPageSource().contains(searchResult));
  29. }
  30. @BeforeMethod
  31. public void beforeMethod(){
  32. driver = new ChromeDriver();
  33. }
  34. @AfterMethod
  35. private void afterMethod(){
  36. driver.quit();
  37. }
  38. public static Object[][] getTestData(String tablename) throws IOException{
  39. //声明Mysql数据库的驱动
  40. String dbDriver = "com.mysql.cj.jdbc.Driver";
  41. String url = "jdbc:mysql://127.0.0.1:3306/testng?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
  42. String user = "root";
  43. String password = "root";
  44. //声明存储测试数据的List对象
  45. List<Object[]> records = new ArrayList<Object[]>();
  46. try{
  47. //设定驱动
  48. Class.forName(dbDriver);
  49. Connection conn = DriverManager.getConnection(url,user,password);
  50. if (!conn.isClosed())
  51. System.out.println("连接数据库成功");
  52. //创建statement对象
  53. Statement statement = conn.createStatement();
  54. //拼接sql语句
  55. String sql = String.format("Select * from %s", tablename);
  56. //声明结果集对象rs,用于存储执行sql语句返回的数据结果集
  57. ResultSet rs = statement.executeQuery(sql);
  58. //声明一个ResultSetMetaData对象
  59. ResultSetMetaData rsMetaData = rs.getMetaData();
  60. //调用ResultSetMetaData对象的getColumnCount方法获取数据行的列数
  61. int cols = rsMetaData.getColumnCount();
  62. /**使用next方法遍历数据结果集中的所有数据行*/
  63. while (rs.next()){
  64. //声明一个字符串型数组,数组大小使用数据行的列个数进行声明
  65. String fields[] = new String[cols];
  66. int col = 0;
  67. //遍历所有数据行中的所有数据,并存储在字符串数组中
  68. for (int colIdx = 0; colIdx<cols; colIdx++){
  69. fields[col] = rs.getString(colIdx+1);
  70. col++;
  71. }
  72. //将每一行的数据存储到字符串数组后,存储到records中
  73. records.add(fields);
  74. //输出数据行中的前三列内容,用于验证数据库内容是否正确读取
  75. System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
  76. }
  77. //关闭数据结果集对象
  78. rs.close();
  79. //关闭数据库连接
  80. conn.close();
  81. }catch (ClassNotFoundException e){
  82. System.out.println("未能找到Mysql的驱动类");
  83. e.printStackTrace();
  84. } catch (Exception e){
  85. e.printStackTrace();
  86. }
  87. //定义函数返回值,即Object[][]
  88. //将存储测试数据的list转换为一个Object的二维数组
  89. Object[][] results = new Object[records.size()][];
  90. //设置二维数组每行的值,每行是一个Object对象
  91. for (int i = 0; i<records.size(); i++){
  92. results[i] = records.get(i);
  93. }
  94. return results;
  95. }
  96. }

Java&Selenium数据驱动【DataProvider+TestNG+Mysql】的更多相关文章

  1. Java&Selenium数据驱动【DataProvider+TestNG+Excel】

    Java&Selenium数据驱动[DataProvider+TestNG+Excel] package testNGWithDataDriven; import java.io.File; ...

  2. Java&Selenium数据驱动【DataProvider+TestNG+Array】

    Java&Selenium数据驱动[DataProvider+TestNG+Array] package testNGWithDataDriven; import java.util.conc ...

  3. Java&Selenium数据驱动【DataProvider+TestNG+Csv】

    Java&Selenium数据驱动[DataProvider+TestNG+Csv] package testNGWithDataDriven; import java.io.Buffered ...

  4. Java&Selenium自动化测试之数据驱动

    一.摘要 本片博文以四个方式展示自动化测试的数据驱动,数组.CSV.Excel.Mysql 二.TestNG&Csv&Driven package testNGWithDataDriv ...

  5. 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)

    1.简介 今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中. 2.测试场 ...

  6. Java&Selenium&TestNG&ZTestReport 自动化测试并生成HTML自动化测试报告

    一.摘要 本篇博文将介绍如何借助ZTestReport和HTML模版,生成HTML测试报告的ZTestReport 源码Clone地址为 https://github.com/zhangfei1984 ...

  7. 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)

    1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...

  8. Java+Selenium+Testng自动化测试学习(二)

    Java+Selenium+TestNG自动化测试框架整合 1.简化代码 封装一个定位元素的类,类型为ElementLocation package com.test; import org.open ...

  9. 《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)

    1.简介 上一篇文章中,从TestNg的特点我们知道支持变量,那么我们这一篇就通过变量参数来启动不同的浏览器进行自动化测试.那么如何实现同时启动不同的浏览器对脚本进行测试,且听宏哥娓娓道来. 2.项目 ...

随机推荐

  1. 慕课零基础学java语言翁恺老师——第一周编程题

    温度转换(5分) 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度. 程序的输入是一个整数,表示华氏温度.输出 ...

  2. MacOS这idea快捷键

    Control + Space 基本的代码补全(补全任何类.方法.变量) Control + Shift + Space 智能代码补全(过滤器方法列表和变量的预期类型) Command + Shift ...

  3. java模拟from表单提交,上传图片

    /** * java上传表单,有图片 * @param urlStr 上传地址 * @param textMap 表单参数 * @param fileMap 文件参数 key:文件名称 value:文 ...

  4. python第一个浏览器的自动执行程序

    1.目标:简单点,百度搜索“美丽的程序员” 2.操作方法: a.python已经安装完成 b.安装PIP:在windows的cmd窗口下输入easy_install pip      c.安装sele ...

  5. jquery 广告轮播图

    轮播图 /*轮播图基本功能: * 1图片切换 * 1.1图片在中间显示 * 1.2图片淡入淡出 * 2左右各有一个按钮 * 2.1点击左按钮,图片切换上一张 * 2.2点击右按钮,图片切换下一张 * ...

  6. WUSTOJ 1290: 01字串(Java)

    题目链接:

  7. 跟我一起学编程—《Scratch编程》第24课:幸运大转盘

    同学你好,欢迎来到<跟我一起学编程>,我是包老师.这是<Scratch3.0编程>课程的第24课,我这节课教你做一个抽奖游戏:幸运大转盘. 学习目标: 1. 能够熟练使用造型工 ...

  8. Redis的bind的误区(转)

    原文1:https://blog.csdn.net/cw_hello1/article/details/83444013 原文2:https://www.cnblogs.com/suiyueqiann ...

  9. (七)Redis之Keys的通用操作

    package myRedis01; import java.util.HashMap; import java.util.List; import java.util.Map; import jav ...

  10. jvm垃圾回收器介绍

    上篇文章中我们讨论了jvm的内存区域,这篇文章我们来讨论针对的内存区域的垃圾回收机制. 其实针对垃圾回收我们通常考虑三个问题:1.哪些内存需要回收?2.什么时候回收?3.如何回收?下面我们针对这三个问 ...