myDataProvider

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

 

 

你可能感兴趣的:(Provider)