自动化测试过程中如何使用excel数据驱动(上)

无论是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;
	}

} 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;
	}

}

你可能感兴趣的:(自动化测试过程中如何使用excel数据驱动(上))