测试是相当重复的工作,不仅因为我们要一次又一次运行相同的测试。 例如,我们可能运行同一个测试需要有不同的输入或者测试条件,然后验证相应出的输出结果 。每一个测试 都有相同的步骤,仅是测试数据不而已。本例中使用jdbc来连接MySQL数据库,在项目中导入mysql-connector-java-5.1.26-bin.jar。MySQL图形界面数据如下图:
如何实现:
package com.shareku.util;
import static org.junit.Assert.assertEquals;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
@RunWith(value = Parameterized.class)
public class MySqlData2 {
private WebDriver driver;
private String height;
private String weight;
private String bmi;
//数据库地址
private static String dbUrl="jdbc:mysql://localhost:3306/db_bmi";
//用户名
private static String dbUserName="root";
//密码
private static String dbPassword="123456";
//驱动名称
private static String jdbcName="com.mysql.jdbc.Driver";
//参数化
@Parameters
public static Collection<String[]> testData() throws SQLException {
List<String[]> records =new ArrayList<String[]>();
//连接数据库
try {
Class.forName(jdbcName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con = DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select height,weight,bmi from t_bmi2");//sql
//取得结果集结构
ResultSetMetaData rsMetaData = rs.getMetaData();
int cols = rsMetaData.getColumnCount();//取得列数
while(rs.next()){
String fields[] = new String[cols];
int col = 0;
for(int colIdx=1;colIdx<=cols;colIdx++) {
fields[col] = rs.getString(colIdx);
col++;
}
records.add(fields);
}
rs.close();
st.close();
con.close();
return records;
}
//构造函数赋值
public MySqlData2(String height,String weight,String bmi) {
this.height = height;
this.weight = weight;
this.bmi = bmi;
}
@Before
public void setUp() {
driver = new FirefoxDriver();
driver.get("http://cn.onlinebmicalculator.com/");
driver.manage().window().maximize();
}
@Test
public void testBMICalcultaor() throws Exception {
//输入身高
WebElement heightField =driver.findElement(By.name("f_height"));
heightField.clear();
heightField.sendKeys(height);
//输入体重
WebElement weightField =driver.findElement(By.name("f_weight"));
weightField.clear();
weightField.sendKeys(weight);
//点击计算
WebElement calculateButton =driver.findElement(By.name("f_submit"));
calculateButton.click();
//等待页面加载
Thread.sleep(3000);
//验证计算后的BMI值
WebElement bmiLabel=driver.findElement(By.xpath("//span[starts-with(@class,'bmi_val')]"));
assertEquals(bmi, bmiLabel.getText());
}
@After
public void tearDown() {
driver.close();
}
}