首页 > 技术文章 > Jmeter----小技巧(3)

Z-Queen 2018-04-03 14:46 原文

1.关闭启动Jmeter时出现的面板

 说明:启动Jmeter的同时往往会打开一个下图所示的面板,经常不小心关掉后,导致Jmeter停止运行,偶尔写了好久的脚本没来得及保存就没了,烦恼不已

  

   怎样避免如上情况的发生呢?

   我们在使用Jmeter的时候,不再双击安装目录下的 jmeter.bat ,改为 双击 jmeterw.cmd ,即可完美解决

   

 

2.更换Jmeter工具的外观

  Jmeter工具中内置了工具不同的外观显示,小伙伴们可以根据自己的使用习惯(我用的第一个Metal),更换不同的皮肤,嘻嘻,具体步骤如下:

  

 

3.更改Jmeter工具的语言

  Jmeter工具中内置了工具的不同语言展示,小伙伴们可以根据自己的习惯(对于英语不好的人简直是福音啊),使用不同的语言,具体步骤如下:

  

 

Jmeter 设置默认语言为中文

 (1).在apache-jmeter-4.0\bin目录下,打开jmeter.properties;

 (2).将#language=en下一列添加language=zh_CN,保存;

  

 

 (3).重新启动jmeter即可。

 

 

4.Jmeter启动报错

   4.1 报错   Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

   jmeter能正常打开,但是看到报错,感觉有点不舒服(强迫症患者无法接受),就尝试着解决了一下

   解决方案思路如下:

 (1)查看命令行中的信息可知,启动 Jmeter 的时候,Jmeter 在写 windows 7 时无法成功写入,导致系统抛出了 RegCreateKeyEx 的异常

 (2)由警告信息可知,Jmeter 写入键值的位置:Softwar\JavaSoft\Prefs,打开注册表编辑器(命令行窗口输入 regedit,回车后允许即可),

         搜索发现存在项 HKEY_CURRENT_USER \Softwar\JavaSoft\ HKEY_LOCAL_MACHINE\Software\JavaSoft ,怀疑是不存在子项Prefs导致的/权限不够

         查看下面是否有子项Prefs,若无则添加子项(JavaSoft目录点击右键,选择新建->项(key),命名为Prefs),有则忽略;

         分别在2个JavaSoft上,单击右键,更改权限为完全控制并应用;

 (3)重新启动 Jmeter,无上述初始时的警信息,至此问题解决。

 

 

 

5.Jmeter中中文乱码

   5.1 请求消息中中文显示乱码

          产生原因: 这种情况在jmeter3.0的版本中才会产生。这不是乱码,而是由于3.0中优化body data后,使用默认的字体(Consolas)不支持汉字的显示。

        解决办法:打开 %JMeter_HOME%\bin\jmeter.properties文件,找到jsyntaxtextarea.font.family这个选项,取消前面的#号,使其使用Hack字体即可,当然,你也可以换成 宋体以及其他支持的字体集。      

       

 

 

   5.2 响应消息中中文显示乱码

    产生原因: Jmeter的结果处理编码与被测试对象的编码不一致。Jmeter的sampler请求结果的默认编码方式为:ISO-8859-1(不支持中文),Jmeter的sampler请求结果的默认编码方式为:ISO-8859-1(不支持中文)。

   

   解决办法一: 使用后置控制器”BeanShell PostProcessor”来动态修改结果处理编码,使之与被测对象保持一致; 

   优点:灵活,随时修改;  缺点:要根据不同的对象设置不同的编码; 

   适用范围:测试不同的公司项目,有些公司喜欢GBK,有些是UTF-8; 

   配置方法: 
 
(1)确定返回结果的编码(可跟开发人员确认,如果是web页面,可查看源文件得知); 
    

 (2)右键httpSampler,添加“BeanShell PostProcessor”元件; 

   

(3)设置“BeanShell PostProcessor”;在“Script”中增加“prev.setDataEncoding(“UTF-8”);” 

  

 (4)测试验证,OK,设置完毕。

 

   解决办法二: 修改Jmeter的默认编码方式; 

   优点:一次修改,长久使用; 缺点:如果要测试不同的公司项目,需要多次修改,较麻烦; 

  适用范围:测试本公司的项目,毕竟同一个公司的项目基本上都是使用同一个编码的; 

  配置方法: 打开 %JMeter_HOME%\bin\jmeter.properties文件,搜索“sampleresult”,找到sampler的编码设置代码;修改编码与被测系统同样的编码方式,如UTF-8,去掉“#”(注释符号),保存设置,并重启Jmeter验证即可。 

 

 解决办法三:使用 BeanShell 后置处理程序

   线程组---->添加---->后置处理器---->BeanShell 后置处理程序

   复制下面的内容,加入BeanShell 后置处理程序中即可

String s=new String(prev.getResponseData(),"UTF-8");
        char aChar;
        int len= s.length();
        StringBuffer outBuffer=new StringBuffer(len);
        for(int x =0; x <len;){
            aChar= s.charAt(x++);
            if(aChar=='\\'){
                aChar= s.charAt(x++);
                if(aChar=='u'){
                    int value =0;
                    for(int i=0;i<4;i++){
                        aChar= s.charAt(x++);
                        switch(aChar){
                            case'0':
                            case'1':
                            case'2':
                            case'3':
                            case'4':
                            case'5':
                            case'6':
                            case'7':
                            case'8':
                            case'9':
                                value=(value <<4)+aChar-'0';
                                break;
                            case'a':
                            case'b':
                            case'c':
                            case'd':
                            case'e':
                            case'f':
                                value=(value <<4)+10+aChar-'a';
                                break;
                            case'A':
                            case'B':
                            case'C':
                            case'D':
                            case'E':
                            case'F':
                                value=(value <<4)+10+aChar-'A';
                                break;
                            default:
                                throw new IllegalArgumentException(
                                        "Malformed   \\uxxxx  encoding.");}}
                    outBuffer.append((char) value);}else{
                    if(aChar=='t')
                        aChar='\t';
                    else if(aChar=='r')
                    aChar='\r';
                    else if(aChar=='n')
                    aChar='\n';
                    else if(aChar=='f')
                    aChar='\f';
                    outBuffer.append(aChar);}}else
                outBuffer.append(aChar);}
        prev.setResponseData(outBuffer.toString());

  

 

 

 

 

 

推荐阅读