4.使用JMeter来进行现代化测试
我们要使用JMeter来测试hetty,由于hetty是一款基于hessian和netty的RPC产品,我们必须使用JMeter的JAVA请求功能来进行测试,Java请求是指JMeter对Java Class进行性能测试。首先我们需要编写测试用例:
1)新建JAVA工程。
2)引入ApacheJMeter_java.jar 、ApacheJMeter_core.jar以及测试所需要的jar(jar包在JMeter目录的lib/ext目录中)。
3)继承AbstractJavaSamplerClient类开始编写主业务。如下:
public class HettyTest extends AbstractJavaSamplerClient { private static String label = "hettyTest"; /** * 执行runTest()方法前会调用此方法,可放一些初始化代码 */ public void setupTest(JavaSamplerContext arg0) { } /** * JMeter测试用例入口 */ public SampleResult runTest(JavaSamplerContext arg0) { SampleResult sr = new SampleResult(); sr.setSampleLabel(label); try { // 这里调用我们要测试的java类,这里我调用的是一个Test类 Map<String,String> map = getDefaultParameters().getArgumentsAsMap(); sr.sampleStart(); // 记录程序执行时间,以及执行结果 Test.execute(map.get("ip"),map.get("port")); sr.sampleEnd(); sr.setSuccessful(true); } catch (Throwable e) { sr.setSamplerData(e.getMessage()); e.printStackTrace(); sr.setSuccessful(false); // 用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功 } return sr; } /** * JMeter界面中可手工输入参数,代码里面通过此方法获取 */ public Arguments getDefaultParameters() { Arguments args = new Arguments(); args.addArgument("ip", "localhost"); args.addArgument("port", "8081"); return args; } /** * 执行runTest()方法后会调用此方法. */ public void teardownTest(JavaSamplerContext arg0) { } } |
Test类是我测试逻辑,如下:
public class Test { public static void execute(String ip,String port) throws MalformedURLException { String url = "http://"+ip+":"+port+"/apis/hello"; HessianProxyFactory factory = new HessianProxyFactory(); factory.setUser("client1"); factory.setPassword("client1"); factory.setOverloadEnabled(true); final Hello basic = (Hello) factory.create(Hello.class, url); //System.out.println("SayHello:" + basic.hello("guolei")); } } |
代码中都有注释,按照注释实际操作去理解。 System.out等的输出会显示在启动JMeter时的命令窗口内,但过多的输出会影响性能的准确性。