无论是Selenium Appium这样的UI自动化测试,还是单元测试、接口测试这样的非UI自动化测试,都逃不开数据参数化的步骤,一般都会采用TestNg测试框架中的@DataProvider来实现。
今天我们分享下,如何使用excel来实现数据驱动,即测试数据存放在excel中的时候怎么达到循环驱动测试案例的效果。
本文采用最简单的csv的数据文件格式来结合TestNg框架演示,大家只需要讲案例代码整合到自己的测试代码中就可以了。
package test; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** * @author testfan.cn * */ public class TestCsvWithDataProvider { // 定义数据驱动 @DataProvider(name = "getData") public static Object[][] getData() throws IOException { return getTestData("c:\\test\\testData.csv"); } // 测试案例绑定DataProvider后自动循环执行 @Test(dataProvider = "getData") public void testSearch(String p1, String p2) { System.out.println(p1 + " " + p2); } // 读取CSV文件的静态方法,使用CSV文件的绝对文件路径作为函数参数 public static Object[][] getTestData(String fileName) throws IOException { List records = new ArrayList(); String record; // 设定UTF-8字符集,使用带缓冲区的字符输入流BufferedReader读取文件内容 BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8")); // file.readLine(); //跳过表头所在的行 // 遍历数据行并存储在名为records的ArrayList中,每一行records中存储的对象为一个String数组 while ((record = file.readLine()) != null) { String fields[] = record.split(","); records.add(fields); } // 关闭文件 file.close(); // 将存储测试数据的List转换为一个Object的二维数组 Object[][] results = new Object[records.size()][]; // 设置二位数组每行的值,每行是一个Object对象 for (int i = 0; i < records.size(); i++) { results[i] = records.get(i); // System.out.println(results[i]); } return results; } }
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!