上一篇有提过可以通过DataProvider做数据驱动,通过@Test(dataProvider = "abc"),@DataProvider(name = "abc")来获取指定的测试数据,在缺点是测试数据需要保存在代码中,如果想从外部获取参数,需要一个通用的数据驱动。
DataProvider 提供了一个方法,DataProvider(Method m),通过入参传入的方法,可以知晓该方法要调用哪个数据,从外部获取到数据后,转为二维数组返回即可。直接上代码~~
首先我们创建一个通用数据驱动类ExtentTestNGDataProvider,当脚本调用@DataProvider(name = "createData")时,将该方法名传入,获取方法名称,在数据库查到该方法对应的数据,最终返回Object [ ][ ] 格式的结果。
public class ExtentTestNGDataProvider {
@DataProvider(name = "createData")
public static Object[][] createData(Method m) throws Exception {
String casename = m.getName();
String sql = "select data_json from tb_data where status = 1 and casename = '"+casename+"'";
List<Map<String, Object>> list = MysqlUtils.exeSqlApi("auto_test", sql);
Parameter[] parameter= m.getParameters();
List<Map<String,Object>> listnew = new ArrayList<>();
for(Map&