package data;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import org.testng.AssertJUnit;
import org.testng.annotations.DataProvider;
import com.bj58.qa.atf.data.BaseINIData;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* 数据驱动类范例
*/
public class MyDataProvider extends BaseINIData{
public static final String DeletePatten="*del*";
//从文本文件中获得数据
@DataProvider(name="json")
public static Object[][] jsonData(Method m)
{
// System.out.println(getDataFileName(m)+" "+m.getName());
Object[][] dataBlock =new BaseINIData().readBlockFromDataFile(getDataFileName(m),m.getName(), true);
if(dataBlock==null){
return null;
}
String jsonString = (String)dataBlock[0][0];
JSONObject jsonObject=null;
JSONArray jsonArray=null;
try {
//System.out.println(jsonString);
jsonObject = new JSONObject(jsonString);
} catch (JSONException e) {
// e.printStackTrace();
try {
jsonArray = new JSONArray(jsonString);
} catch (JSONException e1) {
e1.printStackTrace();
AssertJUnit.fail("传入数据错误!"+jsonString);
}
}
//传入一组数据
if(jsonObject!=null){
Object[][] result = new Object[1][1];
String[] fields=JSONObject.getNames(jsonObject);
Map<String,String>paramMap= new HashMap<String,String>();
for(String field:fields){
String value="";
try {
value=jsonObject.getString(field);
} catch (JSONException e) {
e.printStackTrace();
AssertJUnit.fail("传入数据错误!"+field);
}
paramMap.put(field, value);
}
result[0][0]=paramMap;
return result;
}
//传入多组数据
if(jsonArray!=null){
int length= jsonArray.length();
Object[][] result = new Object[length][1];
Map<String,String> paramMap= new HashMap<String,String>();
for(int i=0;i<length;i++){
JSONObject jo=null;
Map<String,String> tempParamMap= copyMap(paramMap);
try {
jo = (JSONObject) jsonArray.get(i);
} catch (JSONException e) {
e.printStackTrace();
AssertJUnit.fail("传入数据错误!"+jsonArray.toString());
}
String[] fields=JSONObject.getNames(jo);
for(String field:fields){
String value="";
try {
value=jo.getString(field);
} catch (JSONException e) {
e.printStackTrace();
AssertJUnit.fail("传入数据错误!"+field);
}
if(DeletePatten.equals(value)){
tempParamMap.remove(field);
}else{
tempParamMap.put(field, value);
}
}
result[i][0]=tempParamMap;
paramMap = copyMap(tempParamMap);
}
return result;
}
return new Object[1][1];
}
private static String getDataFileName(Method m){
String className = m.getDeclaringClass().getName();
int lastDotPosition = className.lastIndexOf('.');
className = className.substring(lastDotPosition+1);
String fileName = className.replace("Test", "Data");
fileName+=".json";
return fileName;
}
private static Map<String,String> copyMap(Map<String,String> sourceMap){
Map<String,String> tempMap = new HashMap<String,String>();
for(String key:sourceMap.keySet()){
tempMap.put(key, sourceMap.get(key));
}
return tempMap;
}
}