jmeter随笔(13)--jmeter3.0 post body乱码问题

时间:2022-11-08 20:27:02

故事背景

今天飞测群里有同学问,我用jmeter,在http请求的 Body Data 中写的中文,为什么都是乱码—都是方框中间有个问号。乱码现象如下图:
jmeter随笔(13)--jmeter3.0 post body乱码问题

解决思路

1、检查jmeter.properties文件。发现如下配置:

#JSyntaxTextArea configuration
#jsyntaxtextarea.wrapstyleword=true
#jsyntaxtextarea.linewrap=true
#jsyntaxtextarea.codefolding=true
# Set 0 to disable undo feature in JSyntaxTextArea
#jsyntaxtextarea.maxundos=50
# Change the font on the (JSyntax) Text Areas. (Useful for HiDPI screens)
#jsyntaxtextarea.font.family=Hack
#jsyntaxtextarea.font.size=14

2、百度 JSyntaxTextArea + jmeter。搜索结果:

RSyntaxTextArea 是一个支持语法着色的Java 可视化编辑器控件,支持超过20种编程语言。

再回头检查这段配置,“改变字体的文本区域(jsyntax)。(用于HIDPI屏幕)”,顺便有查了下“Hack”是个什么意思—-“Hack字体设计让标准大小的代码能清晰易读,它的特征包括大字高、宽孔径和低对比。”,还有一个我比较感兴趣的解释—“Hack调整了一些容易引起混淆的字符形状,如字母o和数字0,字母l和数字1。”

解决方法

尝试把上面配置项的注释,全部取消。重启jmeter,加载脚本。如下图:
jmeter随笔(13)--jmeter3.0 post body乱码问题

1、中文字符显示正常了。(大概是 JSyntaxTextArea的设置强制转换吧)
2、0和O确实有比较明显的区别。(心理作用?)

发散一下

jmeter2.13没有这个问题,于是,看了下官网jmeter3.0更新的内容,发现编号为Bug 58933 的bug。这个bug的修复中,提到了

jmeter/trunk/src/core/org/apache/jmeter/gui/util/JSyntaxTextArea.java

于是,看了下这个文件的源码

private static final boolean WRAP_STYLE_WORD = JMeterUtils.getPropDefault("jsyntaxtextarea.wrapstyleword", true);
private static final boolean LINE_WRAP = JMeterUtils.getPropDefault("jsyntaxtextarea.linewrap", true);
private static final boolean CODE_FOLDING = JMeterUtils.getPropDefault("jsyntaxtextarea.codefolding", true);
private static final int MAX_UNDOS = JMeterUtils.getPropDefault("jsyntaxtextarea.maxundos", 50);
private static final String USER_FONT_FAMILY = JMeterUtils.getPropDefault("jsyntaxtextarea.font.family", JSyntaxTextArea.getDefaultFont().getName());
private static final int USER_FONT_SIZE = JMeterUtils.getPropDefault("jsyntaxtextarea.font.size", JSyntaxTextArea.getDefaultFont().getSize());

font.family获取的是本地默认样式。大概是默认样式,jmeter本身不支持吧。这个地方,把“JSyntaxTextArea.getDefaultFont().getName()” 换成“Hack”,应该就不需要再配置jmeter的参数了。