测试步骤之脚本优化(Script)

看到这里,是不是疑惑录制好的脚本还需要优化吗,答案是肯定的。

优化概要

脚本优化包括插入注释(Comment),插入事务(Transaction),插入检查点(Check),插入集合点(Rendezvous),脚本参数化(Parameter),关联技术(Correlation)等等。

打开VuGen,相关设置如下

进入到脚本页(顶部的Script按钮),就能看到录制到action部分的脚本了,如下图所示

上面是我录制优化的登陆模块脚本,学过编程语言就大概能知道,LR脚本里都是些函数组成的,lr_output_message(日志中打印输出,类似C中printf函数),web_custom_request(请求函数,就是模拟用户点击按钮操作,点击一次就提交一次这种请求),web_reg_save_param_ex(注册函数,通俗点就是在服务器返回数据中查找并保存特定的数据)等。

不管怎样,录制成功后,首先得回放脚本一下,看看有没有问题,没问题就根据需求,真实环境进行脚本优化。

插入注释(Comment)

插入注释为了使脚本方便易懂,很简单,单行在前面加上//即可,多行注释用/* ....(此处是脚本).....*/。

插入事务(Transaction)

插入事务也很快,就是判断一段操作的时间,记住事务插入在集合点之后并且是成对出现的,如lr_start_transaction("登录")和lr_end_transaction("登录",LR_AUTO),事物名要相同,一般情况下结束事物的LR_AUTO为自动判断事物是否成功,没遇到报错的页面基本都是成功的,所以需要通过检查点加以判断。

插入集合点(Rendezvous)

插入集合点(lr_rendezvous),一般做并发测试是需要集合点的,如做并发登陆,插入后可在场景设计中设置,当设置的虚拟用户数全部运行至集合点后,再同时运行,脚本如下图:

插入检查点(Check)

上面说过事物需要检查点来加以判断,拿登录来说,一般登录成功就会在首页显示“欢迎你,XX用户”,是不是找到"欢迎你"三个字就说明登录成功了呢,于是检查点就这么来了。自动添加我就不说了,手动插入如下:

web_reg_find(

"Text=\"respCode\": \"0\"",

"SaveCount=Ok_Count",

LAST);

web_custom_request(

…………            //内容省略

LAST);

lr_output_message(lr_eval_string ("Ok_count查找respCode值并计数"));

if(atoi(lr_eval_string("{Ok_Count}"))>0)

lr_output_message("-----------------------------成功登录!-----------------------------",LR_PASS);

else

lr_output_message("-----------------------------登录失败!------------------------------",LR_FAIL);

检查点常用函数:web_reg_find,从服务器返回的数据查找,Text是查找的内容,SaveCount是计数变量名,此处判断SaveCount的值是否大于0,大于0就表示找到了返回值,执行LR_PASS,事物成功,即表示登录成功。

注:lr_eval_string("{Ok_Count}")获取返回参数Ok_Count的值,类型为char,atoi(lr_eval_string("{Ok_Count}"))把字符型转换成整型。

手动关联(Correlation)

在回放脚本总是不成功,查找原因,是登录验证码的问题,这个是服务器返回过来的,错了就不能登录了。不能自己输,开发又不能屏蔽,该怎么处理呢?对于服务器返回的动态数据,进行查找并保存在一个参数中,就叫关联技术。同样的自动关联就不说了,手动关联如下:

web_reg_save_param_ex(

"ParamName=CSRule_1",

"LB=\"code\":",

"RB=}}}",

"Ordinal=1",

"SaveOffset=1",

"SaveLen=6",

SEARCH_FILTERS,

LAST);

查看响应日志如下:"mobileRespHeader": {"respCode": "2000","respDesc": "鎴愬姛"},"mobileRespBody": {"data": {"code":"MKLJ39"}}}

查找的结果为CSRule_1= MKLJ39,后面就用CSRule_1代替验证码了。

常用关联函数:web_reg_save_param_ex,CSRule_1就是自定义的参数名,LB,RB为左边界和右边界,用于定位查找的那个数据,Ordinal指第几次内容出现的位置,SaveOffset指从找到的字符串中第几个开始截取,SaveLen指取多少长度的值,其他就算固定的格式了,注意!!!冒号 ” 前需要加反斜杠“\”

脚本参数化(Parameter)

此处是对登录账号进行的参数化,直接在账号处点右键—Replace with a parameter 输入名称即可,类型可以参照资料,一般是File。

参数化的数据可以手动输入,也可以导入dat文件,还可以从数据库导入。

对账号参数化后,点击右键—Parameter Properties… 进入参数化设置界面,具体参数参考资料,要注意图中标注的取值顺序和策略设置,组合起来共有9种方式。

只要记住Select next row行是针对场景运行的虚拟用户设置的,VuGen回放不起作用,选择Sequential,每个用户都从第一行参数开始顺序去;Update Value on行是针对脚本的参数设置的,选择Each iteration,单个用户的参数在同一次迭代中取值是相同的,不管你有相同的几个参数。

以上就是脚本优化的大概流程,写的不算仔细,可供参考,最后保存前不要忘记再回放一下脚本哦!

loadrunner11的移动端性能测试之脚本优化的更多相关文章

  1. loadrunner11的移动端性能测试之脚本录制

    以前使用LR11录制过一个app的登录操作,这里记录一下 测试准备 硬件要求 1,  负载测试机一台(内存8G以上,cpu 1.5GHZ以上,存储空间20G以上)或两台以上(控制机和多个负载机). 2 ...

  2. loadrunner11的移动端性能测试之结果分析

    测试步骤之结果分析器(Analysis) 进入Analysis 当场景停止运行后,可从Controller中进入.点击[Results]—[Analysis Results]见下图: 若想打开一个已保 ...

  3. loadrunner11的移动端性能测试之场景设计

    测试步骤之场景设计(Controller) 进入手工场景 准备好脚本后就可以进行场景设计和执行场景了,从VuGen中进入,见下图: 进入后第一个为目标场景,选择第二个更灵活的手工场景,我的目标人数20 ...

  4. 性能测试之Tomcat优化

    1.Tomcat最大连接数等配置   Tomcat的server.xml中Context元素的以下参数都是什么意思? <Connector port="8080"maxThr ...

  5. web移动端性能调优及16ms优化

    本文只是一个索引,收集了网络上大部分关于调试及优化方面的文章,从中挑选了一些比较好的文章分享给大家. 移动端性能不及桌面浏览器性能的10分之1,特别是在android设备良莠不齐的情况下,性能显得尤为 ...

  6. H5移动端性能优化

    概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点,首屏加载3秒完成或使用Loading 4. 基于联通3G网络平均338KB/s ...

  7. Shell脚本 | 性能测试之启动流量

    安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣.(见文末参考链接) 今天我要分享的是通过脚本一键获取应用的启动流量 ...

  8. Java服务端性能优化

    <Java程序性能优化>说性能优化包含五个层次:设计调优.代码调优.JVM调优.数据库调优.操作系统调优. 常用的几个代码优化方案: 使用单例 对于IO处理.数据库连接.配置文件解析加载等 ...

  9. 5种kafka消费端性能优化方法

    摘要:带你了解基于FusionInsight HD&MRS的5种kafka消费端性能优化方法. 本文分享自华为云社区<FusionInsight HD&MRSkafka消费端性能 ...

随机推荐

  1. linux中,查看某个命令是来自哪个RPM包或者是通过哪个RPM包安装的

    需求描述: 今天在测试ssh命令到底是哪个RPM包,安装之后生成的,找了一些文档 在这里进行记录下,主要是rpm -qf命令的使用,查询文件在哪个包里. 操作过程: 1.通过whereis 定位ssh ...

  2. Quartz是一个完全由java编写的开源作业调度框架

    http://www.quartz-scheduler.org/ 找个时间研究一下

  3. mysql的引擎myisam和innodb的区别

    1. MYISAM和INNODB的不同?答:主要有以下几点区别:   a)构造上的区别     MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义:.MYD (MYData)为数据文件:. ...

  4. C#导出Excel按照指定格式设置单元格属性值

    最近项目中一直在写XML.Table.Excel之间的转化.之前一直都是不考虑格式的导出,今天给出一个格式,让按照格式导出,还真把我这新手为难了一翻,网上给出的资料基本一样.为了一个单元格文字变色纠结 ...

  5. 利用Sharepoint 创建轻量型应用之基本功能配置!

    博客同步课程.假设你想跟着视频学习,请跟着例如以下视频: http://edu.csdn.net/course/detail/2097 1.   点击安装程序,出现的界面先期安装完毕准备工具,准备工具 ...

  6. Java集合----概述、Collection接口、Iterator接口

    Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中. Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java 集合可分为 Set.Li ...

  7. Swift-基础语法之变量&常量&元组

    使用 let来声明一个常量,用 var来声明一个变量.常量的值在编译时并不要求已知,但是你必须为其赋值一次.这意味着你可以使用常量来给一个值命名,然后一次定义多次使用 myVariable = let ...

  8. Python 解压缩Zip和Rar文件到指定目录

    #__author__ = 'Joker'# -*- coding:utf-8 -*-import urllibimport osimport os.pathimport zipfilefrom zi ...

  9. Android储存

    Android储存一共5种方法 一: 手机内置,外部储存 1.获取本地存储 (Android的读写文件及权限设置) getFilesDir()   data/data/包名/File getCache ...

  10. PyQt4布局管理——绝对定位方式

    PyQt4中的布局管理器 布局管理器是编程中重要的一部分.所谓布局管理器是指我们在窗口中安排部件位置的方法.布局管理器有两种工作方式:绝对定位方式(absolute positioning)和布局类别 ...