最近项目中需要用到JMeter进行性能测试,在测试过程中需要创建一些测试数据,但是在我们项目中的接口参数类型大多数都是些对象类型的,而从JMeter的控制面板是不能直接传入对象类型的参数,只能传入字符类型的参数,然后我们在后台得到参数内容根据实际需要进行提取,我们一般都是通过JMeter提供的CSV Data Set Config读取写入到文件中的测试数据,进行处理后再构造成对象,这样处理起来是相当的麻烦,所以想通过反射技术来设置JavaBean属性,这样可能方便不少。
有段时间没有用到Java反射了,都忘了一些东西,先写个小例子测试一下,
public class TestReflect {
/**
* 。
* @author 刘尧兴
* @param args
*/
public static void main(String[] args) {
String[] fields = { "id", "name" };
String[] values = { "123456", "liuyaoxing" };
Student student = new Student();
for(int i=0;i<fields.length;i++) {
setValue(student, fields[i], values[i]);
}
System.out.println("ID: "+student.id+" "+"Name: "+student.name);
}
public static Object setValue(Object obj,String fieldName, String fieldValue) {
Class clazz = obj.getClass();
Field field;
try {
field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(obj, fieldValue);
}catch (Exception e) {
e.printStackTrace();
}
return obj;
}
public static class Student {
private String id;
public String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}
这个例子通过反射赋值给指定的字段,而且Id字段的访问类型为私有的,我们可以通过field.setAccessible(true);这段代码跳过访问权限的验证,打印的结果为:
ID: 123456 Name: liuyaoxing