- 浏览: 121766 次
- 性别:
- 来自: 杭州
文章分类
最新评论
编写获取本地和远程图片流的Jmeter自定义函数
代码如下:
将生成的jar包放置到Jmeter的lib\ext目录下。重启Jmeter后再运行--函数助手模块能够看到自定义的两个函数。
使用时可以用如下方式引用:
${__ImageRemoteBase64(${photoPath},)
其中${photoPath}通过CSV Data Set Config参数化得到的远端图片路径。
心得:
1、httpclient 可以自动对URL字符串中的中文编码进行转码,减少了URL包含中文导致的图片获取不到问题。
2、Jmeter自定义函数的包名必须要包含“functions”,否则Jmeter发现不了该自定义函数。建议包名:package org.apache.functions
代码如下:
package org.apache.functions; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Collection; import java.util.LinkedList; import java.util.List; import org.apache.jmeter.engine.util.CompoundVariable; import org.apache.jmeter.functions.AbstractFunction; import org.apache.jmeter.functions.InvalidVariableException; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.samplers.Sampler; import org.apache.commons.codec.binary.Base64; public class ImageLocalBase64 extends AbstractFunction { // 显示的参数名字 private static final List<String> desc = new LinkedList(); // 显示的函数名字 private static final String KEY = "__ImageLocalBase64"; // 参数值 private Object[] values; static { desc.add("local path for image"); desc.add("Name of variable in which to store the result (optional)"); } public String execute(SampleResult paramSampleResult, Sampler paramSampler) throws InvalidVariableException { String s = null; try { String url = ((CompoundVariable) this.values[0]).execute(); url = new String(url.getBytes("UTF-8"), "UTF-8"); InputStream inStream = new FileInputStream(url); byte[] b = ImageUtil.readInputStream(inStream); byte[] bs = Base64.encodeBase64(b); s = new String(bs); return s; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return s; } // 获取参数值 public synchronized void setParameters(Collection<CompoundVariable> paramCollection) throws InvalidVariableException { // 检查参数,我也搞不懂是毛线意思,NND checkMinParameterCount(paramCollection, 1); this.values = paramCollection.toArray(); } // 返回函数名字 public String getReferenceKey() { return KEY; } // 返回参数名字 public List<String> getArgumentDesc() { return desc; } }
package org.apache.functions; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Collection; import java.util.LinkedList; import java.util.List; import org.apache.jmeter.engine.util.CompoundVariable; import org.apache.jmeter.functions.AbstractFunction; import org.apache.jmeter.functions.InvalidVariableException; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.samplers.Sampler; import org.apache.commons.codec.binary.Base64; public class ImageRemoteBase64 extends AbstractFunction { //显示的参数名字 private static final List<String> desc = new LinkedList(); //显示的函数名字 private static final String KEY = "__ImageRemoteBase64"; //参数值 private Object[] values; static { desc.add("URL for remote Image"); desc.add("Name of variable in which to store the result (optional)"); } public String execute(SampleResult paramSampleResult, Sampler paramSampler) throws InvalidVariableException { String s = null; try { String url = ((CompoundVariable)this.values[0]).execute(); s = ImageUtil.getImageFromNetByURL1(url); return s; } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return s; } //获取参数值 public synchronized void setParameters(Collection<CompoundVariable> paramCollection) throws InvalidVariableException { //检查参数,我也搞不懂是毛线意思,NND checkMinParameterCount(paramCollection, 1); this.values = paramCollection.toArray(); } //返回函数名字 public String getReferenceKey() { return KEY; } //返回参数名字 public List<String> getArgumentDesc() { return desc; } /** * 从输入流中获取数据 * * @param inStream * 输入流 * @return * @throws Exception */ public static byte[] readInputStream(InputStream inStream) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[inStream.available()]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, len); } inStream.close(); return outStream.toByteArray(); } }
package org.apache.functions; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class ImageUtil { /** * 根据地址获得数据的字节流 * * @param strUrl * 网络连接地址 * @return */ public static String getImageFromNetByURL1(String strUrl) { HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(strUrl); HttpResponse response; String s = null; try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); byte[] b = readInputStream(instream); byte[] bs = Base64.encodeBase64(b); s = new String(bs); return s; } } catch (ClientProtocolException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return s; } /** * 根据地址获得数据的字节流 * * @param strUrl * 本地连接地址 * @return */ public static byte[] getImageFromLocalByUrl(String strUrl) { try { File imageFile = new File(strUrl); InputStream inStream = new FileInputStream(imageFile); byte[] btImg = readInputStream(inStream);// 得到图片的二进制数据 return btImg; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 从输入流中获取数据 * * @param inStream * 输入流 * @return * @throws Exception */ public static byte[] readInputStream(InputStream inStream) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[inStream.available()]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, len); } inStream.close(); return outStream.toByteArray(); } /** * 将图片写入到磁盘 * * @param img * 图片数据流 * @param fileName * 文件保存时的名称 */ public static void writeImageToDisk(byte[] img, String zipImageUrl) { try { File file = new File(zipImageUrl); FileOutputStream fops = new FileOutputStream(file); fops.write(img); fops.flush(); fops.close(); System.out.println("图片已经写入" + zipImageUrl); } catch (Exception e) { e.printStackTrace(); } } }
将生成的jar包放置到Jmeter的lib\ext目录下。重启Jmeter后再运行--函数助手模块能够看到自定义的两个函数。
使用时可以用如下方式引用:
${__ImageRemoteBase64(${photoPath},)
其中${photoPath}通过CSV Data Set Config参数化得到的远端图片路径。
心得:
1、httpclient 可以自动对URL字符串中的中文编码进行转码,减少了URL包含中文导致的图片获取不到问题。
2、Jmeter自定义函数的包名必须要包含“functions”,否则Jmeter发现不了该自定义函数。建议包名:package org.apache.functions
发表评论
-
软件测试好帖子整理
2014-06-06 22:28 0junit 4 使用 http://www.ibm.com ... -
软件测试分类
2014-06-05 11:06 7781、按是否查看程序内部结构分为: (1)黑盒测试(black ... -
NetPerf中Netserver在windows7windows2008下启动失败
2014-03-13 15:53 991netperf 工具的netserver在win7和win ... -
ubuntu离线安装包制作
2013-11-28 20:20 0当重装系统或者安装虚拟机时没有必要重新在网上下载,可以按以下 ... -
Eclipse+Junit4+ant构建单元测试框架
2013-11-26 15:25 3415目录: Junit4 使用 Ant结合Junit4 ... -
【转】场景法设计测试用例
2013-11-20 22:02 5712在面向对象的软件开 ... -
HTTP常见错误(转)
2011-03-18 08:58 753HTTP 400 - 请求无效 HTTP 401 - 未被授权 ... -
QTP英文问答
2011-03-08 19:43 875第一部分:QTP 1. What are the Featu ... -
Netstat命令详解
2011-02-28 11:15 1144Netstat用于显示与IP、TCP、UDP和ICM ... -
Linux常用命令大全
2011-02-24 22:40 806Linux常用命令大全 系统信息 arc ... -
测试常用教程整理
2011-02-24 13:55 8061、SQL教程: http://www.w3school.c ... -
使用QTP对报表中的webtable内容进行正确性验证
2011-02-12 13:41 1052网络转载:http://developer.51cto.com ... -
QTP之excel操作函数整理
2010-12-02 09:09 4581******************************* ... -
32Windows 上Oracle突破1.7G内存限制(一)
2010-11-11 18:12 3506系统环境:Windows 2003 32位CPU 8核内存 ... -
性能测试概述
2009-10-12 19:26 0性能测试51Testing软件测 ... -
菜鸟进阶--QTP 10破解笔记
2009-09-13 22:01 7225破解步骤: 1.安装qtp, ... -
windows系统中设置进程为开机启动
2009-07-30 10:58 1218windows系统中设置进程为开机启动 可以通过控制面 ... -
使用计划任务 备份Mysql数据库脚本
2009-07-30 10:49 2298使用计划任务 备份Mysql数据库脚本 ...
相关推荐
今天,我们将介绍如何使用 Jmeter 自定义函数实现 base64 加密,并将其应用于实际的测试场景中。 首先,需要创建一个继承自 AbstractFunction 的类,并重写四个方法:execute、setParameters、getReferenceKey 和 ...
JMeter的强大之处在于其可扩展性和自定义性,允许开发者进行二次开发以满足特定需求。本项目“Jmeter 二次开发 函数助手 AES加解密”正是这样一种定制化实践,它旨在增强JMeter的功能,特别是关于数据安全方面的处理...
总的来说,这个知识点展示了如何通过自定义JMeter的源码来扩展其功能,以及如何解决特定使用场景下的不便。对于想要深入理解JMeter工作原理和进行定制开发的用户来说,这是一个非常有价值的实践案例。同时,它也提醒...
jar包放在jmeter-lib-ext目录下,打开jmeter在函数助手中可以看到。CarId.jar为车牌号生成,需要输入(省会简称(京津冀),市级代码(ABCD));
**JMeter基本使用方法** Apache JMeter是一款强大的性能测试工具,广泛应用于Web应用的压力测试、负载测试和功能测试。这份资料“JMeter基本使用方法”将带你深入理解JMeter的基础操作,助你在性能测试领域得心应手...
3. **测试方法**:对于自定义Sample的测试,通常会采用单元测试、集成测试和系统测试等方法。单元测试主要针对单个函数或模块,集成测试关注多个组件间的交互,系统测试则验证整个系统的功能和性能。可以使用JUnit、...
在Bean Shell中,可以使用Java语法创建自定义函数。例如,可以在Test Plan中定义一个变量 "hello = kitty",然后在BeanShell Sampler中编写脚本来处理这个变量,改变其值并使用Debug Sampler进行验证。 **4. 引用...
jmeter参数化5种方式脚本:用户自定义、函数、csv、数据库、正则提取。还包含post请求,get请求
四、如何使用JMeter进行MongoDB和Elasticsearch测试 1. **创建测试计划**:首先,需要在JMeter中创建一个测试计划,设置好虚拟用户数量和循环次数。 2. **添加MongoDB服务器配置**:在测试计划中添加MongoDB配置元件...
此外,JMeter的脚本语言BeanShell允许你在测试计划中插入自定义逻辑,尽管对于复杂的需求,推荐使用Java插件。 **文件结构分析** 从文件名称“maven_webapp”来看,这个项目可能是一个Maven构建的Web应用程序。...
在性能测试领域,Apache JMeter 是一款广泛应用的开源工具,用于模拟用户负载并评估服务器、网络或...通过引入自定义函数,获取并解析上一次请求的响应,以及动态构建参数,我们可以有效地模拟实际应用中的各种场景。
### JMeter测试入门指导 #### 一、安装JMeter与设定 JMeter是一款开源的压力测试工具,主要用于对静态和动态资源进行性能...以上介绍了JMeter的基本使用方法和进阶技巧,希望对大家在进行Web应用性能测试时有所帮助。
11. **自定义函数和变量**:JMeter支持自定义函数和变量,可以实现复杂的逻辑和动态数据生成。 12. **测试计划**:一个测试计划是由多个组件组成的结构,它定义了整个测试场景,包括用户行为、测试逻辑、数据源等。...
### jmeter中文使用手册知识点概览 #### 一、引言 **Apache JMeter**是一款完全基于Java的开源工具,专为压力测试和性能测试而设计。它不仅可以用于测试客户端/服务器架构的应用程序,还可以用来测试多种类型的资源...
通过使用JMeter的函数助手(ctrl + F打开),你可以生成函数调用来创建动态SQL,避免数据库对相同SQL语句的缓存影响测试结果。 3. **配置JDBC连接**: - 添加 -> 配置元件 -> JDBC Connection Configuration。在...
5. **函数与变量**:JMeter提供了丰富的内置函数和变量,如__Random、__threadNum等,这些可以帮助用户动态生成数据,进行参数化测试,提高测试的灵活性和复用性。 6. **性能测试**:JMeter能够生成大量并发请求,...
JMeter支持使用内置函数和用户自定义函数来增加测试脚本的灵活性。 - **内置函数**:这些函数以`__`开头,用于避免与用户自定义函数命名冲突。内置函数可以用于非控制器组件的任何字段中,例如:`__regexFunction`...
10. **可定制性**:JMeter提供了丰富的API和自定义函数,允许开发者根据需求编写自定义代码来扩展其功能。 在使用JMeter 5.1.1时,首先需要解压`apache-jmeter-5.1.1.zip`,然后运行`bin`目录下的`jmeter.bat`...
4. **可扩展性**:通过插件机制,JMeter可以扩展以支持更多的测试需求,例如图形报告、自定义采样器、监听器和断言。 5. **非图形化测试**:JMeter提供命令行模式,使得脚本化的性能测试自动化成为可能,这对于持续...