文章目录
背景
大多数人在使用Loadrunner做性能测试时,都喜欢使用其录制脚本的功能来开发性能测试脚本,虽然录制脚本简单且容易上手,但是脚本的复杂(容量)及繁重代码块就显得不那么友好(视觉&脚本管理),这里撇开url和html的不同录制模式不谈,录制得多了,再使用loadrunner时,就不再喜欢录制功能了,因为比较麻烦要考虑工具本身与操作系统的兼容性、录制浏览器的版本的因素,最后比较喜欢直接使用loadrunner提供的函数来完成脚本的开发,也可以添加C语言开发完善脚本。
话不多说直接切入主题:
1、loadrunner录制脚本结束后,会在view script模式中看到脚本代码,即loadrunner的相关函数:
web_add_cookie("")
web_url("")
web_custom_request("")
lr_think_time("")
web_reg_save_param("")
web_submit_data("")
2、对于上面的函数不多做解释,有些代码内容可以直接去掉;
第一:web_add_cookie("") lr_think_time("") web_url("") 几乎都是可以删掉;如果需要模拟真实的用户行为,思考时间是有必要留住的,当然还有关键的url,图片、样式等url除外,因为毕竟不是做前端性能测试;
第二:web_reg_save_param("")在没有和函数web_submit_data("")有关联性的情况下可以删除,怎样验证?就是先减掉关联函数,再回放脚本是否成功,如果成功则可以去掉,最后保存脚本即可;
第三:对于必要的函数块,例如web_url("",EXTRARES "Url=http://", LAST); 在EXTRARES, LAST语句间的Url可以删掉;
3、如此这般经过上面的步骤,就已经对脚本精简了很多,只留下必要的函数代码块。
4、接下来就是脚本优化部分中的参数化,关联函数也是参数化的一部分,上下两个请求间的数据关联,即动态参数的传递;
web_reg_save_param_ex("ParamName=shop_id",
"LB=shop_id\":\"",
"RB=\",\"watermark\":true",
"NotFound=warning",
SEARCH_FILTERS,
LAST);
lr_start_transaction("进入相册动态");
web_custom_request("owner",
"Url={requestUrl}/service/album/get_album_themes_list.jsp?act=owner&shop_id=&search_value=&search_img=&start_date=&end_date=&page_index=1&client_type=ios&token={userToken}&version=2302",
"Method=POST",
"Mode=HTTP",
lr_end_transaction("进入相册动态",LR_AUTO);
lr_start_transaction("进入编辑页");
web_custom_request("get_all_tag",
"URL={requestUrl}/service/album/album_group.jsp?act=get_all_tag&type=0&token={userToken}",
"Method=GET",
"Mode=HTTP",
web_custom_request("get_formats",
"URL={requestUrl}/service/album/album_theme_format_operation.jsp?act=get_formats&token={userToken}",
"Method=GET",
"Mode=HTTP",
web_custom_request("get_tags",
"URL={requestUrl}/service/album/album_theme_tag_operation.jsp?act=get_tags&goods_id=&token={userToken}",
"Method=GET",
"Mode=HTTP",
web_custom_request("get_tags_1",
"URL={requestUrl}/service/album/album_theme_tag_operation.jsp?act=get_tags&type=2&tagType=1&goods_id=&token={userToken}",
"Method=GET",
"Mode=HTTP",
LAST);
lr_end_transaction("进入编辑页",LR_PASS);
lr_start_transaction("新增商品成功");
lr_start_sub_transaction("发布商品","新增商品成功");
web_custom_request("save_theme",
"Url={requestUrl}/service/album/album_theme_operation.jsp?act=save_theme&tagId=&client_type=ios&goodsNum=ABC_{randomNum}&main_imgs={images}&title=Testing_{randomNum}&token={userToken}&version=2302&personal=0&platform=app&share_type=-1&source_type=0",
"Method=POST",
"Mode=HTTP",
lr_end_sub_transaction("发布商品",LR_AUTO);
lr_start_sub_transaction("返回动态","新增商品成功");
web_custom_request("owner_1",
"Url={requestUrl}/service/album/get_album_themes_list.jsp?act=owner&shop_id={shop_id}&search_value=&search_img=&start_date=&end_date=&page_index=1&slip_type=0&token={userToken}",
"Method=POST",
"Mode=HTTP",
lr_end_sub_transaction("返回动态",LR_AUTO);
lr_end_transaction("新增商品成功",LR_AUTO);
5、对上面的脚本进行解析,用户进入app首页即相册动态,点击+相机图标,添加自己的图片即发布商品;
web_reg_save_param_ex函数需要拿到用户自己的相册id(shop_id),获取用户自己的tag及format,发布商品成功;
用户的token、商品的图片地址、货号goods_num等进行参数化,以达到脚本的简单可读性;
6、这是通过fiddler/charles或chorme浏览器F12功能获取的接口url、method、param进行手动编写的性能测试脚本;
常用的函数有:
web_reg_save_param_ex()关联函数、
lr_think_time()思考时间、
lr_start_transaction(lr_end_transaction)事务函数、
lr_start_sub_transaction(lr_end_sub_transaction)子事务函数、及关键的请求函数
web_custom_request()【不受url或html模式影响】。
tips:web_reg_save_param_ex函数有一个Ordinal参数,不写就是默认取第一个,如果Ordinal=3,则代表取符合左右边界的第三个参数,如果Ordinal=ALL,则代表取符合左右边界的所有参数值,那么自定义的参数就不能直接引用{},而是需要带上角标,如:{xxx_01},还可以灵活使用lr_save_string(lr_paramarr_random(“xxx_list”), “xxx_random”);把关联参数list给随机化。见上一篇关联多个参数的使用方法!!!