jmeter正则表达式提取结果乱码问题解决方法

  这周在工作要测到一个上文档的功能,有2个参数,一个是文档的 OSS地址、一个文档名字,OSS地址有效期是1个小时,由于要经常用,所以打算写个脚本,自动获取OSS地址与文档名,然后写入文件中。这个需求很简单的,先调接口查询应用下面有多少文档,这个接口返回的只有文档名、文档大小等信息,没有OSS地址,所以,我要循环调用文档地址查询接口,这里就需要把第一个接口中的文档名提取出来,然后传递到第二个接口中。

  我使用jmeter做压测、调试脚本,所以,直接就在压测机上面的jmeter进行编写脚本。先写查应用接口,调试的时候发现响应内容有乱码,这个不难,我把jmeter配置文件的响应内容编码改成 UTF-8,再次调用,显示正常。接着,写正则表达式提取文件名,然后传递到OSS查询接口,此时,响应报错,我看了一下请求内容,文件名有乱码,然后,我设置了一下请求编码,改成UTF-8,再次请求,成功返回请求,URL地址中的文件名也没有乱码。

  到此,一切还算顺利,准备把文件名与OSS地址写到文件中,添加一个 BeanShell,写几行代码,将提取到的名字、OSS地址拼接到一起,写入txt文件中。想法很好,可偏偏就出了问题,等你打开文档,中文都是乱码,好办,我用notepadd++打开然后转成UTF-8,我以为这下应该问题,结果还是乱码,改成 gbk、gb2312,依然是乱码。难道提取出来的文档名是乱码?不应该的,响应内容就是正常的,怎么可能有乱码,抱着求证态度,我决定debug一下jmeter,然而意想不到的事情出现了,正则表达式提取的内容都是乱码。我百思不得其解,明明响应内容没有乱码,为什么正则表达式会有乱码?一时无解,就病急乱投医,先是添加一个后置处理器,然后设置响应内容编码方式:prev.setsetDataEncoding(“UTF-8”),然后并没有什么用,提取内容依然是乱码,写入txt也是乱码。为了排除响应体的问题,我在benshell中将响应体都打印出来:prev.getResponseDataAsString(),发现没有乱码,这下证实响应体一定没问题。这下又回到正则表达式上面来,我之前用 json 提取器,然后换成 jmeter 自带的正则提取器,我觉得这种可能很小,果然跟正则表达式没有一点关系。没办法了,求助群友,七嘴八舌,然而没有任何改善。

  此时,陷入了僵局,难不成要手动去获取数据?天无绝人之路,在解决问题的过程中,我一直在思考一个问题,这个正则表达式提取的内容,在没使用之前,保存在哪里?那就是计算机内存,既如此,会不会受当前操作系统的编码影响?我先是cmd查询一下当前操作系统的默认编码:chcp,返回 437;这是什么玩意,我也不知道,百度了一下,这个cp437是英语字符集(欧美使用的),里面没有中文,所以解析中文都是乱码。那就修改编码方式,改成 UTF-8:chcp 65001,这是临时的一种方法,也可以永久修改,具体方法这里不展示。但遗憾的是,压测机修改不了,最后,我将脚本拖到本地电脑,再次执行,完美解决正则表达式提取内容乱码问题,写入文件中的内容转成UTF-8编码后也没有乱码,这就验证我了当时怀疑的地方。

  需要注意的是,压测机系如比较老,window server 2016,一般人的电脑都是win10、win7,不会出现此类情况,如果真的遇到这么罕见的问题,又没有其他解决方式,可以尝试一下这个方法。最后,内容有不对的地方,或者大家有什么其他方法,欢迎指正交流!

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值