前言
最近项目有个需求说要弄一下项目的性能测试,心血来潮就想到好久都没用过LR了,这次用LR进行性能测试,不出所料出现了很多问题,不禁感叹,收费工具想免费用真不容易啊!
问题1:LR lr_custom_request 进行json格式请求时报错
发现自己有一段时间没有写过lr的代码了,这次心血来潮想着写一遍,以防生疏,谁知道在进行一个新增用户POST请求时居然跑不通了,刚开始报415,一看错误提示就发现是不支持的请求格式,因为我这里是json格式请求,
所以在lr_custom_request方法下加上了
<"EncType=application/json"/>
本以为可以了,运行之后发现报400的错误,那就是语义有误,方法不能被服务器理解,百度了一下,说是要加个头部,那就写了一个头部放上去,
web_add_header("Content-Type", "application/json,charset=UTF-8");
运行之后仍然报错,既然这样我想我先去postman里面跑一下看看行不行,跑了一下通了,数据库里面也有新用户数据更新,证明json格式没问题,网上又查了挺多方法,都不行。后面干脆将body内容清空跑一下,可以跑通
那问题基本就定位出来了,json格式哪里出问题了,因为loadrunner中“”是需要进行转义的,而且这次的json数据又是多层嵌套的,所以知道问题所在也难修改,想了一下,那我可以把json数据参数化了,说干就干,这里有个小技巧,参数化的数据是不需要转义的,所以就将原始的json格式数据搞进去就可以了
参数化我这里就不多说了,网上一堆教程
参数化后运行没毛病了,然后引申出问题2,顺便也说一下,就是获取响应结果乱码的问题解决方法
问题2:输出响应结果乱码解决方法
首先使用
web_reg_save_param ("result","LB=","RB=",LAST);
去获取服务器返回的结果
方法1:
lr_output_message(lr_eval_string("{S_respond}"));
直接将返回的结果通过字符串的形式输出,但这个方法可能也会出现乱码的情况,那么就得用到下面的方法了
方法2:先将保存的结果进行转码
lr_convert_string_encoding ( lr_eval_string ("{result}"),LR_ENC_UTF8 ,NULL,"respond");
这里将result转码后的内容赋值到了respond字段上,然后将respond值输出就行了
lr_output_message ( "%s",lr_eval_string ("{respond}"));
再来看结果,完美解决
附上源码:
Action()
{
web_add_header("Content-Type",
"application/json,charset=UTF-8");
web_reg_save_param("result",
"LB=",
"RB=",
LAST);
web_custom_request("web_custom_request",
"URL=放入自己要测试的网址",
"Method=POST",
"TargetFrame=",
"Resource=0",
"Referer=",
"Mode=HTML",
"EncType=application/json",
"Body=参数化数据",
LAST);
lr_convert_string_encoding ( lr_eval_string ("{result}"),LR_ENC_UTF8 ,NULL,"respond");
lr_output_message ( "%s",lr_eval_string ("{respond}"));
return 0;
}