问题:企业级j2ee应用中,各系统对外提供的服务,常要在客户端通过Java程序方式调用,对此类接口进行性能测试时,一般使用Jmeter的Java Sampler进行。但各个接口调用时,所写的代码大同小异,如能写一个通用的接口调用框架,避免编码,只需要将远程接口的配置、方法、参数、校验表达式等作为参数传递给Java Sampler即可,那么将大大提升这类接口性能测试的效率。
主要技术:使用反射,接受参数中指定的类名、方法名等,有几个难点之前卡住了,周末花时间一一思考并实验了一下记录下来,初步想法是通过Jmeter中传递字符串的方式来告诉框架想调用的方法、参数以及对返回值的判断等,其余一切工作交给框架,主要难点有四个:
1.如何通过Jmeter所给的字符串描述找到要调用的方法对象
解决方案:Java获取Method对象时,除了方法名,还需要传入参数类型列表,而且参数类型列表是可变参数,不过可变参数可以接受直接传入数组,因此在Jmeter中传入几个参数类型的全路径(如java.lang.String),便可由此可获得准确方法!
2.需要传递的参数用字符串如何表示?如果涉及到Java的复杂对象时呢?
想使用json,但对于复杂对象显然不太好表示,而且接口可能会有许多自定义的对象,感觉不是很容易,想到另一个方案,即使用spring格式的xml片段,表示传入的参数,定义为bean或者list即可,使用XmlBeanFactory初始化,使用ByteArrayResource进行定位字符串(Xml片断从Jmeter获得,而不是文件)并解析,就可以获得需要的参数!以Spring的成熟程度,相信表示任何类型的Java对象都不成问题。
3.拿到方法后,如何对方法进行调用?因为invoke是个可变参数的方法。
invoke是可变参数方法,同理将spring从xml片断中解析到的参数列表作为一个Object数组传入method.invoke方法即可!
4.接口调用后的返回值类型,及断言如何处理?
可以固定考虑,比如ESB的接口返回值类型固定,是可以进行统一处理的!如果要支持其它返回值类型的接口,可以尝试使用Velocity语法的一个字符串表达式作为对返回结果的判断,由此来设置successful。
发现这个框架完全可行,感觉到自己的进步了~~~
只要对于Jmeter要求不是特别高的接口,相信都可以使用这个框架直接进行, 不需要任何Java代码,只需要配置xml片段和参数即可(接口对象的初始化也用xml片段)。
本文介绍了一种通用接口调用框架的设计思路,利用JMeter和Java反射技术,简化接口调用过程,提高性能测试效率。通过字符串描述方法,实现灵活配置接口、参数和返回结果验证,支持复杂对象表示与调用,同时解决反射方法的调用、参数传递和返回结果处理等问题。
1888

被折叠的 条评论
为什么被折叠?



