近在测试过程中使用LoadRunner录制Socket协议脚本,在data.ws中,中文参数显示为乱码,直接影响到参数化等操作,导致压力测试无法继续下去。本文对录制脚本的乱码问题进行了相关调研。

  使用LoadRunner录制的脚本如下:

  通过在网上搜索资源,查询到几种解决方案如下:

  ■ 方法一:通过字符串编码转换的函数修改脚本中的乱码;

  通过一个字符串编码转换的函数lr_convert_string_encoding

  在LoadRunner中,为我们提供了一个字符串编码转换的函数lr_convert_string_encoding,它可以把字符编码转换为UTF-8格式。

  测试组人员通过对比发现,这个函数是在录制的脚本中出现乱码时使用的,例如:web_custom_request("CALL-H001I",
"EncType=text/xml; charset=UTF-8",
"BodyBinary=CALLH001I1040浣??01
????风?1
11000000
1000000.00A110102641122043#1??景榫"
"""x99"
"10001???100

  但本次遇到的问题是在录制结束后,data.ws文件的中文参数显示为乱码。问题仍然得不到解决。

  ■ 方法二:录制选项中的Support charset选中UTF-8再重新录制

  这种方法是在录制前,将录制选项的Support charset选中UTF-8后进行录制,这种方法主要适用于WEB页面录制时的场景。在录制使用Socket协议时,录制选项中没有Support charset,导致问题也不能解决。

  ■ 方法三:更改服务器操作系统的语言

  将操作系统语言修改为英语,重启机器后,重新录制脚本,乱码问题即可解决。

  但实际情况是,将操作系统语言改为英语后,重启机器,重新录制脚本,乱码只是变换了一种形式而已(且文件名称或目录中有中文时会显示成“??”),问题仍然无法解决。

  ■ 终解决方法

  网上也有资料说这个问题无法解决(汗!!!),因为录制Socket协议是LoadRunner直接监控TCP这一层的数据流,任何数据,虽然在顶层应用层时是可见数据,但是一旦到了TCP层,均被封包成二进制。

  所以呢,看来要用LoadRunner来测试Socket,还是得通过手写脚本的方式来实现。