Jmeter 添加CSV Data set config 文件的相对路径及编码在Windows和Linux下的兼容性(转)
简介:
Jmeter实际上是不需要安装的,只需要有ApacheJMeter.jar、启动批处理文件(jmeter.bat或jmeter)、配置文件(jmeter.properties、user.properties、saveservice.properties等)、lib文件(一堆的jar包)就足够在Windws和Linux下运行了,纯绿色并且是轻量级的(总共不到50M就够用了)。另外Jmeter各个版本中,首先推荐的是Jmeter3.1版本,因为它足够新,而且同时兼容JDK1.7和1.8(但要注意的是,Server端和Client端还是应该保持统一版本的JDK),更高的版本就不再支持JDK1.7了。
既然Jmeter能同时在Windws和Linux下运行,那么我们还需要注意什么呢?有两点,一是路径关系及路径符号,二是字符集编码,解决了这两个问题,我们就能将Windows下调试通过的Jmeter包(包括jmx脚本)全部复制到Linux下并直接就可以用jmeter启动文件调用jmx脚本跑起来,甚至连输出jtl报告、CSV报告、html报告都能完全兼容。
一、路径问题
1、相对路径
Jmeter的相对路径是指脚本所对应的目录:
1.1 如同目录下java输入 ./test.cvs ,Jmeter直接输入文件名test.cvs,不必输入 ./

1.2 如子目录下 dataFiles\测试数据.csv

1.3 如上级目录下 ..\dataFiles\测试数据.csv

这个路径就表示,ID.csv文件对应的绝对路径是D:\testJmeter\dat\ID.csv。
同样如果Beanshell中引用了Java的相对路径如下:
那么就表示对应的绝对路径是D:\testJmeter\etlCount.java
2、以上举的例子是在Windows下的,到了Linux下就会报错,这是因为Linux识别路径的符号不是反斜杆"\",而是正斜杠"/",而且windows下兼容性是最好的,无论正反斜杠都能识别,所以我们filename应该改为dat/ID.csv,同样source引用java文件,也可以改成如下:
3、第三个问题,也就是jmx脚本文件到底应该放哪比较好,虽然以上的相对路径能够解决换电脑后不需要修改文件路径了,但还是不够可靠,这是因为jmeter执行文件是在bin目录下的,很多时候程序默认是以jmeter的bin目录为根路径的,如果参数文件或是java文件的相对路径不是以bin为开始目录,很可能在分布式测试时,就出现远程代理机所调用的文件路径与本地脚本不一致。
所以最好的方式是,将jmx脚本统一放在bin目录下,然后参数文件或是source文件再以脚本的相对路径进行匹配。比如参数文件的绝对路径为:D:\testJmeter\bin\dat\ID.csv,这样相对路径还会是dat/ID.csv,那么换任何一种环境,或是用任何一种方式调用(比如通过Ant调用)都能保证找到一致路径下的文件。
同时,还要确保所有被调用的jar放到lib/ext目录下(其实放到lib目录下也行),这样就不需要配置jar的路径了,程序会自动找到这个目录并调用jar包。
总结:相对路径只是为了方便代码或脚本的迁移,而将脚本放到bin目录下,只是方便默认路径的引用,否则就要通过配置环境变量(如export)或是在build.xml中配置好jmeter的执行目录、根目录才能保证路径的正确性。
4、另外我们在编码过程中,也有意识的多用一些相对路径(很多程序都具有这样的功能,这能为我们省掉一些麻烦),如下:
/**
* 获得excel文件的路径
* @return
* @throws IOException
*/
public String getPath(String fileName) throws IOException {
File directory = new File(".");
sourceFile = directory.getCanonicalPath() + "/DataSource/"
+ fileName + ".xls";
return sourceFile;
}
二、字符编码问题
只要是在我们的参数文件或是java文件中使用了中文,就避免不了编码兼容性的问题。我们经常会碰到在Windows下编辑好的文件,到了linux下就显示中文乱码,甚至通过Jmeter输出的日志、发送的请求都成了乱码。
解决这个问题的最好方式,是统一编码,一般我们都是统一采用UTF-8编码,或者在Linux环境中安装部署更多的中文支持包。
如果当我们的参数文件或是Java文件在Linux下读取时出现乱码,我们最简单的一种方式是用在Windows下用编辑器(如UltraEdit)另存为无BOM的UTF-8格式,记住是无BOM的,否则到了Linux环境就会出现编译错误(如果纯粹只写不读取的文件,是否带BOM头就无所谓了)。从这点来说,Windows对编码格式的处理要比Linux兼容性强(开源的东西,总是要处处踩着坑才能过去)。
关于Jmeter的编码问题,可以参照我的另一篇文章 http://blog.csdn.net/smooth00/article/details/70236638
需要说明的是jmeter响应数据默认编码格式是ISO-8859-1(向下兼容ASCII,自身不显示中文,依赖于平台的编码来显示中文),Windows默认保存的文件编码格式是ANSI/ASCII(但Windows默认以GBK来显示中文),而在Linux我们通常默认以UTF-8编码格式来显示中文。所以这三者如果能统一的话,就可以避免乱码显示。另外就是很多网站是以UTF-8或gb18030(GBK)编码来显示中文的,通过Jmeter来发送邮件时最好注意一下Web展示方面的问题。
jmeter的配置文件jmeter.properties中可以修改sampler响应数据的编码:
# The encoding to be used if none is provided (default ISO-8859-1)
#sampleresult.default.encoding=ISO-8859-1
也可以通过后置处理器BeanShell PostProcessor来修改显示的编码:
如果我们不想麻烦,就是说不愿意去花时间统一linux和windows的中文编码,那么除了上面提到的手动将文件(如etlCount.java)另存为UTF-8 -无BOM格式,再传到linux中运行的方法,也可以写个批处理,将从windows传过来的文件强制转为UTF-8格式,具体大家可以灵活应用:
iconv -f gbk -t utf-8 etlCount.java >etlCount.java.bak
mv -f etlCount.java.bak etlCount.java
最后再说一种情况:同样是utf-8格式,Linux下创建的文件是不带BOM头的,那么到Windows下用相关软件比如Excel打开就会显示乱码,实际上Excel支持utf-8的中文显示,只是因为没有BOM头,所以导致格式判断和识别错误。解决的办法就是在Java中生成csv之类文件的时候,强制加上BOM头((byte)0xEF, (byte)0xBB, (byte)0xBF):
File file = new File("output.csv");
OutputStream out = new FileOutputStream(file);
out.write(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF});
out.write("date,CountName,业务库,数据中心,国家库,result\r\n".getBytes());
out.close();
Jmeter 添加CSV Data set config 文件的相对路径及编码在Windows和Linux下的兼容性(转)的更多相关文章
- jmeter csv Data Set Config 文件中带引号的数据转换问题(自动添加双引号解决办法)
1.我们从csv中获取数据,在jmeter中使用这些数据,其中csv的数据如图,有的数据包含引号. 2.问题:我们获取的json数据,被自动添加了双引号 3.解决方式: 在CSV Data Set C ...
- Jmeter利用CSV Data Set Config 和 _CSVRead函数实现参数化
测试接口时,当请求参数不是固定的,每次请求对应的参数都是不同的,就需要对请求参数进行参数化.我们这里简单介绍一下5个用户与一个用户建立好友关系. 一.测试需求描述 1. 本次测试的接口为http服务端 ...
- Jmeter参数化-CSV Data Set Config
前言 一般来说,我们使用Jmeter来模拟HTTP请求时,比如模拟查询学生信息,我们通常把查询接口的入参(如学生姓名)写在HTTP请求中.当只需要查询1个学生的信息时,我们可以把这名学生的姓名准确的写 ...
- 第七篇 -- 添加CSV Data Set Config
参考链接:https://blog.csdn.net/vv19910825/article/details/82773220 先来看看我们开启的接口 @RequestMapping(value = & ...
- Jmeter—6 CSV Data Set Config 通过文件导入数据
线程组循环次数大于1的时候,请求里每次提交的数据都相同.有的系统限制了不能提交相同数据,我们通过 CSV Data Set Config 加载csv文件数据. 1 创建一个文本文件,输入参数值保存为. ...
- Jmeter使用CSV Data Set Config参数化数据不重复的多次循环执行(实现多用户多次抽奖功能)
Jmeter中使用CSV Data Set Config参数化不重复数据执行N遍 要求: 今天要测试上千条数据,且每条数据要求执行多次,(模拟多用户多次抽奖) 1.用户id有175个,且没有任何排序规 ...
- Jmeter之CSV Data Set Config
在很多情况下,需要针对测试数据做参数化操作,Jmeter提供了很好用的CSV Data Set Config插件. 一.界面显示 二.界面说明 1.名称:标识,建议设置为该组件是提供什么功能 2.注释 ...
- jmeter 通过csv data set config 设置参数化后,执行结果显示为<EOF>
通过csv data set config 设置参数化后,执行结果显示为<EOF>: 反复确认相应的参数的设置均没有问题,其中csv文件编码方式采用uft-8.在csv data set ...
- jmeter 通过CSV Data Set Config控件参数化
CSV Data Set Config控件配置如下: 被导入的.csv 文件内容如下 用excel打开如下 设置中url2对应:cn.toursforfun.com 和 www.163.com url ...
随机推荐
- Java 集合常用特点
1:集合:1) Collection(单列集合) --------------------------------------------------------------------- ...
- OpenCV-Python sift/surf特征匹配与显示
import cv2 import numpy as np def drawMatchesKnn_cv2(img1_gray,kp1,img2_gray,kp2,goodMatch): h1, w1 ...
- 设计模式 之 《建造者模式(Builder)》
#ifndef __BUILDER_MODEL__ #define __BUILDER_MODEL__ #include <string> #include <vector> ...
- 【leetcode刷题笔记】Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- C++ 播放音频流(PCM裸流)
直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应哦).当然我自己也用VS2008(VS2013好用太多,强烈推荐还是用V ...
- Statement
题目大意 给定一棵基环外向树,和若干组询问,对于每次独立的询问都指定一些起点和一些终点,你删去一些边,使得从任意起点出发都无法到达终点,并让删去的边的编号的最小值最大,求这个最大的最小值. 题解 不难 ...
- OSS阿里云文件上传 demo。
所需jar包: aliyun-openservices-1.2.3.jar jdom-1.1.jar commons-codec-1.4.jar commons-logging-1.1.1.jar g ...
- 关于VGG网络的介绍
本博客参考作者链接:https://zhuanlan.zhihu.com/p/41423739 前言: VGG是Oxford的Visual Geometry Group的组提出的(大家应该能看出VGG ...
- HDOJ1015(简单深搜)
Safecracker Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- C笔试题(二)
/* 现在有一个数组 我们可以定义数组的子数组 如 数组 1 3 4 2 5 8 7 它的子数组可以是 1 3 4 3 4 2 5 等等 请写一个算法 找一个子数组 这个子数组递增不减少 并且是满足递 ...