jmeter 测试java协议经验总结
对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协议经验总结的更多相关文章
- jmeter测试java代码
有时候总是要写代码的,不得不说你也得会,这不往下看 java请求了,就的写代码,那么先来实现一个类, package com.company.jemeters; public class Hello ...
- Jmeter测试SOAP协议(Jmeter 3.3)
公司协议都是SOAP协议的,最初在网上看到Jmeter测试soap协议需要插件,但是Jmeter3.2开始就不在支持该插件,后来又查了些资料,找到了解决办法,Jmeter提供专门创建针对soap协议的 ...
- 测试必备:jmeter测试http协议接口的各种传参方式
测试接口,postman和jmeter是用得最频繁的工具,特别是jmeter,支持很多种协议,且除了测功能,还能做自动化测试和性能测试.下面主要介绍jmeter测试http协议接口的用法,包含get, ...
- JMeter学习(十七)JMeter测试Java
目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Java Request Sampler 一.核心步骤 1.创建一个Java工程: ...
- JMeter学习(十八)JMeter测试Java(二)
实例: 服务为:将输入的两个参数通过IO存入文件: 1.打开MyEclipse,编写Java代码 服务: package test; import java.io.File; import java. ...
- Jmeter测试webocket协议
Jmeter本身不支持websocket协议的,所以需要安装第三方的插件还有6个依赖包. 首先,我们需要准备Jmeter的WebSocket协议的支持插件: JMeterWebSocketSample ...
- JMeter学习(十六)JMeter测试Java(二)(转载)
转载自 http://www.cnblogs.com/yangxia-test 实例: 服务为:将输入的两个参数通过IO存入文件: 1.打开MyEclipse,编写Java代码 服务: package ...
- JMeter学习(十五)JMeter测试Java(转载)
转载自 http://www.cnblogs.com/yangxia-test 目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Ja ...
- jmeter(二十二)jmeter测试Java请求
目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Java Request Sampler 一.核心步骤 1.创建一个Java工程: ...
随机推荐
- KSImageNamed-Xcode插件在xcode 6.4/6.3或其他版本中不能使用解决方案
大家都知道这个插件很强大,但是现在这个插件最新版貌似只支持xcode7 ,需要修改KSImageNamed-xcode中的一个配置文件,添加uuid才能使他支持xcode6.3或6.4 进入下载的插件 ...
- 第一个MapReduce程序
计算文件中每个单词的频数 wordcount 程序调用 wordmap 和 wordreduce 程序. import org.apache.hadoop.conf.Configuration; im ...
- 一些常用sqlite语句
1,如果表不存在就新建一个 CComBSTR bstrCreatBat(L”CREATE TABLE IF NOT EXISTS tb_Name (\ rowIdIndex INTEGER PRIM ...
- MFC中快速应用OpenCV(转)
转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV 简介和缘 ...
- 文件存储之-内存文件系统tmpfs
前言 我们都知道,对于单台服务器来说,除了 CPU ,内存就是我们存储数据最快的设备.如果可以把数据直接存储在内存中,对于性能的提升就不言而喻了.那么我们先来讲讲如何使用内存来存储文件. 首先,我们先 ...
- Java多线程(六) 线程系列总结
多线程系列终于终结得差不多,本人对该系列所做的总结大致如下: 线程锁模块耗费了大量的时间,底层的AQS实现比较复杂.仍然没有时间总结源码部分,能够坚持写下这么几个篇幅的内容真心佩服自己....希望继续 ...
- 隐藏win7盘符
1.隐藏盘符: //新建注册表,隐藏X盘符 int regeditme() { HKEY hkey; DWORD dwLastError= ;//隐藏X盘2^25 J:2^9=512 X:盘符与挂载的 ...
- 第三章 用SDK编译出第一个在Linux下的软件界面
第三章 用SDK编译出第一个在Linux下的软件界面 先创建一个工程目录“mkdir project1”,进入目录,创建main.cpp文件,编写代码如下: 代码内容暂时可以先不理解,先让程序跑起来再 ...
- php parallel
http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/ http://stackoverflow.com/question ...
- php array_walk 和 array_reduce函数
1.array_walk:将数组中的元素(键+值)依次取出传给处理的函数,函数处理完就完了,没有返回值. $arr1=array( 'name'=>'zhangsan', 'age'=>3 ...