对java协议的良好支持,是jmeter比loadrunner优秀的地方,但是坑也不少,本文将相关点都整理下来备忘

一. 依赖的jar包

使用IDE开发jemter java协议脚本时,需要导入以下几个包,否则会报找不到Class或者其他诡异问题,以下的包在jmeter\lib或者jmeter\lib\ext下找得到: 

   avalon-framework.jar、
  jorphan.jar、
  commons-logging.jar、
  ApacheJMeter_core.jar、
  ApacheJMeter_java.jar、
logkit-2.0.jar

需要注意的是: jmeter的jorphan.jar非常古怪,如果我们开发的脚本也用到类似的jar,请务必保证jmeter\lib下该jar不会被替换且不能存在多个版本,否则启动jmeter报错:

     Uncaught Exception java.lang.NoSuchMethodError: org.apache.jorphan.gui.GuiUtils.makeScrollableMenu(Ljavax/swing/JMenu;)V. See log file for details.

二. 编码示范

使用jmeter开发java测试脚本的常规格式如下:  

/**
*
*/
package test; import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult; /**
*
*
*/
public class PerformanceTest extends AbstractJavaSamplerClient { /**
* 每个线程初始化时会调用且仅调用一次,可放一些初始化代码
*/
public void setupTest(JavaSamplerContext arg0) { // 开始时间
start = System.currentTimeMillis();
} /**
* 每个线程销毁时 会调用一次runTest()方法后会调用此方法.
*/
public void teardownTest(JavaSamplerContext arg0) { // 结束时间
end = System.currentTimeMillis();
// 总体耗时
System.err.println("cost time:" + (end - start) / 1000);
} /**
* JMeter界面中可手工输入参数,代码里面通过此方法获取
*/
public Arguments getDefaultParameters() { Arguments args = new Arguments();
return args;
} /**
* JMeter测试用例入口
*/
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
        SampleResult result = new SampleResult();
        boolean isSuccessful = false;
        try {
          String strategy = arg0.getParameter("strategy");
          String pin = arg0.getParameter("pin");
          /*

  * 其他构造参数代码

  */
 result.sampleStart();

 /*

  执行测试代码

 */

 if(xxx==xxx){

  isSuccessful = true;
 } else {
  isSuccessful = false;

  //打印失败信息
  //logger.error("接口调用失败,结果信息");
 }
} catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
} finally {
  result.sampleEnd();
  result.setSuccessful(isSuccessful);
}
return result;

}

}

 三. 路径的一些说明

开发java协议脚本时候常常需要读取一些配置文件的内容,这里又主要分两种情况,spring容器配置文件和普通文本类

1. spring容器类配置

读取 spring容器配置文件的读取建议使用 ClassPathXmlApplicationContext类而非FileSystemXmlApplicationContext,因为后者是要写死路径的,不利于后面的打包并部署到jmeter环  境里,示范代码:

  ApplicationContext applicationContext = null;  

public void setupTest(JavaSamplerContext context) {
try {
applicationContext = new ClassPathXmlApplicationContext("jsf-consumer.xml");
} catch (Exception e) { e.printStackTrace();
}
}

非Spring容器的配置文件,则需要使用如下代码读取:

 InputStream is = null;
try {
  String str = null;
  PropertiesTest pt = new PropertiesTest();
  Properties pro = new Properties();
  is = pt.getClass().getResourceAsStream("/ptest.properties");
  pro.load(is);
  System.out.println("PAGESIZE-->" + pro.get("PAGESIZE"));
System.out.println("CURRENT_PAGE-->" + pro.get("CURRENT_PAGE"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(is!=null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}

为了能让代码取到xml文件需要按照约定来配置:

(1) 非maven项目,需要放在项目的src目录下,如下图

(2) maven项目,除了src目录外还可以放在src/main/resource目录下

  四. 打包和部署

      测试代码打包步骤如下:

1. 右键--->export

2. 选择Runnable JAR file

3. 进行配置信息和保存路径的设置

注意,如果launch configuration找不到目标类,则可以执行一次这个类的Main函数

4.单击"Finish",即可得到一个jar和一个对应名字的目录,比如abcTest.jar和abcTest_lib 目录

5. 将上面的文件和目录直接拷贝到jmeter/lib/ext目录下即可

通常情况下,以上步骤不会有任何问题,如果非常不幸遇到诡异问题,请参照以下文章:http://www.cnblogs.com/onmyway20xx/p/4260216.html

将生成的abcTest.jar放在lib/ext目录,将abcTest_lib目录下文件去除jmeter本身自带的几个jar、剩余的jar拷贝到lib目录下!

   

jmeter 测试java协议经验总结的更多相关文章

  1. jmeter测试java代码

    有时候总是要写代码的,不得不说你也得会,这不往下看 java请求了,就的写代码,那么先来实现一个类, package com.company.jemeters; public class Hello ...

  2. Jmeter测试SOAP协议(Jmeter 3.3)

    公司协议都是SOAP协议的,最初在网上看到Jmeter测试soap协议需要插件,但是Jmeter3.2开始就不在支持该插件,后来又查了些资料,找到了解决办法,Jmeter提供专门创建针对soap协议的 ...

  3. 测试必备:jmeter测试http协议接口的各种传参方式

    测试接口,postman和jmeter是用得最频繁的工具,特别是jmeter,支持很多种协议,且除了测功能,还能做自动化测试和性能测试.下面主要介绍jmeter测试http协议接口的用法,包含get, ...

  4. JMeter学习(十七)JMeter测试Java

    目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Java Request Sampler 一.核心步骤 1.创建一个Java工程: ...

  5. JMeter学习(十八)JMeter测试Java(二)

    实例: 服务为:将输入的两个参数通过IO存入文件: 1.打开MyEclipse,编写Java代码 服务: package test; import java.io.File; import java. ...

  6. Jmeter测试webocket协议

    Jmeter本身不支持websocket协议的,所以需要安装第三方的插件还有6个依赖包. 首先,我们需要准备Jmeter的WebSocket协议的支持插件: JMeterWebSocketSample ...

  7. JMeter学习(十六)JMeter测试Java(二)(转载)

    转载自 http://www.cnblogs.com/yangxia-test 实例: 服务为:将输入的两个参数通过IO存入文件: 1.打开MyEclipse,编写Java代码 服务: package ...

  8. JMeter学习(十五)JMeter测试Java(转载)

    转载自 http://www.cnblogs.com/yangxia-test 目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Ja ...

  9. jmeter(二十二)jmeter测试Java请求

    目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Java Request Sampler 一.核心步骤 1.创建一个Java工程: ...

随机推荐

  1. 转:ASP.NET中的SESSION实现与操作方法

    在ASP.NET中,状态的保持方法大致有:ApplicationState,SessionState,Cookie,配置文件,缓存. ApplicationState 的典型应用如存储全局数据. Se ...

  2. C#消息模拟

    C#中消息的工作流程: C#中的消息被Application类从应用程序消息队列中取出,然后分发到消息对应的窗体,窗体对象的第一个响应函数是对象中的protected override void Wn ...

  3. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  4. Map的三种遍历方式

    对于Map的三种方式遍历 1.keySet() 2.values() 3.entrySet()三种方式得到Set之后,都可以使用 foreach或者iterator, 不能使用for,因为数据结构决定 ...

  5. 创建featureclass,为它赋别名,并移动到数据集下

    if (pOutFtrClass == null) { //continue; //创建featureclass //得到规范的字段集 IFields pFields = pFeatureClass. ...

  6. Codevs 5126 推销员 2015年NOIP全国联赛普及组

    5126 推销员 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死 ...

  7. linux端口与进程命令

    1 lsof命令 lsof -i:portNum 查出来与该端口相关的所有程序 2 netstat命令: netstat -lnp

  8. zabbix短信网关调用问题总结

    在写调用短信网关的shell脚本的时候,发现了一个百思不得其解的问题,用浏览器访问短信接口地址是可以成功接收到短信的.但在shell 里面调用就报错了!!!在反复测试当中发现,在shell 中对特殊字 ...

  9. JS传参出现乱码(转载)

    问题说明:在进行网站开发时,将表单的提交功能交给JS来传递,但是在传递中文的过程中出现类似于繁体字的乱码. 解决方案:为了解决这个问题,首先从底层的C#代码审查,重新设置页面传值进行模拟,但是几经测试 ...

  10. [ Windows] [ OS ] [ Remote Desktop ] 開啟同一個帳號同時2的連線RDP的方式

    感謝同事 Allen 的Support :) 執行>gpedit.msc 電腦設定>Windows元件>遠端桌面服務>遠端桌面工作階段主機>連線>限制遠端桌面服務的 ...