如何用Loadrunner测试移动APP应用性能

文章目录[隐藏]

LoadRunner在PC端的应用,相信大家都比较了解,通常测试流程大致是:制定计划—>录制脚本—>增强脚本—>实施测试—>分析结果—>发布报告。而针对手机客户端的性能测试,我们平时做得很少,几乎没接触过,这次做XX的项目,趁机正好学习了一下。

在XX这个项目中,我们主要需要测试从手机客户端访问新闻资讯、查看商品、留言等几个场景,从这几点可以看出,其实主要测试的性能是手机客户端跟服务器交互的性能,不是客户端在手机上运行的性能(这个后续可以研究下,比如运行时间长了会不会出现内存泄露导致程序崩溃等问题)。理解了这一点后,其实就能明白,这跟在PC端测试是没有多大区别的,唯一的区别在于,loadrunner不能直接通过录制的方式生成脚本。跟开发沟通后得知,客户端是通过一个接口地址向服务器发请求获取返回数据的,比如获取资讯列表这是通过:http://app.XXX.net:2222/CW_APPInterfaceServer/newlist.do?param=eyJ2ZXIiOjAsImNyZWF0ZWQiOjAsImNpdHkiOjQ0MDMsImtleXZhbHVlIjoiZDNhNzA0N2I3NDY2OTVjZGU0YTVlOTA2MDE4OWRjZGMiLCJyZCI6IjY1OTM获取。
那么我们可以通过loadrunner模拟客户端请求,然后通过判断返回值是否正确来判定请求是否成功。就拿获取新闻资讯举例,我们可以在返回的结果中搜索特定的关键词,如果可以搜索到,说明请求成功,如果返回错误或是搜索不到特定的关键词,就判定请求失败。
这里就需要用到Loadrunner中的web_custom_request()函数,可以模拟这一过程。web_custom_request()的作用是自定义请求。
web_custom_request方法的原型是:

int web_custom_request (const char *RequestName, ,[EXTRARES, ,] LAST );

其中List of Attributes的主要项目是Method,URL和BODY等。对这个例子来说,我们可以很容易构造出我们需要的request的BODY内容。

web_custom_request("web_custom_request",
"URL= http://app.XXX.net:2222/CW_APPInterfaceServer/newlist.do", //请求地址
"Method=POST", //数据提交方式,post或get
"TargetFrame=",
"Resource=0",
"Referer=",
"Mode=HTML",
"Body= param=eyJ2ZXIiOjAsImNyZWF0ZWQiOjAsImNpdHkiOjQ0MDMsImtleXZhbHVlIjoiZDNhNzA0N2I3NDY2OTVjZGU0YTVlOTA2MDE4OWRjZGMiLCJyZCI6IjY1OTM", //请求传递的参数和值
LAST);

光发送请求还不够,我们还需要知道请求返回的值,是不是正确的。那么就需要设置文本检查点,在返回的结果中搜索是否包含我们设置的关键词来判断请求是否成功。

web_reg_find("SaveCount=isSuccess", //定义变量isSucces来存储计数,搜索到关键词+1
"Text=news", //定义需要搜索的关键词
LAST);

以上函数是插入一个文本检查点,web_reg_find()函数要放在web_custom_request()函数之前,较完整的测试代码如下:

Action()
{
lr_start_transaction("news"); //定义一个事务
web_reg_find("SaveCount=isSuccess",
"Text=news",
LAST);
//设置关联,将请求返回的结果存储在变量result中,存储以"{"开头,"}"结尾的内容
web_reg_save_param("result",
"LB={",
"RB=}",
LAST);
//自定义http请求
web_custom_request("web_custom_request",
"URL=http://app.XXX.net:2222/CW_APPInterfaceServer/newlist.do",
"Method=POST",
"TargetFrame=",
"Resource=1",
"Referer=",
"Mode=HTML",
"Body=param={param}", //将传递的参数值进行参数化
LAST);
lr_think_time(5);
if (atoi(lr_eval_string("{isSuccess}")) > 0){ //如果搜索到设置的关键词,事务通过
lr_end_transaction("news", LR_PASS);
}else{ //否则事务失败
lr_end_transaction("news", LR_FAIL);
lr_error_message(lr_eval_string("{result}")); //失败时,将返回的值作为一个error记录下来,方便在负载生成器中实时查看返回的错误
}
return 0;
}

手工编写脚本也要注意选择正确的协议,这里在新建脚本时,选择http协议即可。然后参数化传递的参数,执行一遍,没有问题就可以加载到负载生成器中进行测试了。其他场景的测试也类似,只是请求的地址和传递的参数不同,注意修改就行了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注