• 性能测试03


    本篇博客

    1.参数化其他类型
    • 1.1 参数和变量区别
    • 1.2 参数化中的参数的四种类型
    2.从数据库中取值作为参数值
    • 2.1 安装ODBC(数据源)
    • 2.2 mysql开启远程访问
    • 2.3 读取数据库的数据
    3.关联
    3.1 手动
    •  基础---获取一个动态数据
    •  高级---获取多个动态数据(在3.3里讲的)
    3.2 自动
    • 边录边关联
    • 录后关联

    1.参数化其他类型

    1.1  参数和变量区别

    1)定义

    参数:lr_save_string("xxx","name");     位置随意

    变量:int i;         位置必须放在脚本的首行

    2)作用域

    参数:全局脚本可用,任意一个action均可

    变量:只限当前定义action 的脚本中使用

    3)参数和变量的区别

    在Action里面有一个参数,都可以在Action2,Action3里面用。

    变量int i ,在Action里定义的,只能在Action里面用,不能在Action2,Action3里面用。

    例:可以点击这个图标加 Action。

    在Action里面有一个参数,都可以在Action2,Action3里面用。

    变量int i ,在Action里定义的,只能在Action里面用,不能在Action2,Action3里面用。

     1.2  参数化中的参数的几种类型

    file类型:文件类型,之前的博客都是file类型。用的比较多。

    Date/Time类型:日期类型

    RandomNumber类型:随机数

    Unique Number类型:唯一数

    Date/Time:日期类型

    1 更新值:选择每次迭代。

    1)新打开一个脚本

    2)点击取消。

    3)写好函数,点击P图标,打开参数化列表。

    4)点击New新建。注意这里的两个名字要一样才行。

    5)执行下面操作,点击Close

    1. Parameter type:Date/Time
    2. 选择一种时间格式
    3. 更新值:选择每次迭代。

    其中每次跟新值,还是以前的三种:

    每次现,每次迭代,一旦。

    6)为了更清楚,关闭日志。vuser---run Timesettins 选择Log,把Enable logiing勾去掉。

    7)点击运行,输出当前的时间日期来了。(这里是1次迭代。)

    8)打印两遍,1次迭代。时间一样,因为是每次迭代才更新。

    9)迭代两次

    10)设置毫秒

    11)点击运行,查看结果,每次迭代的时候才发生变化。

    2 更新值:选择每次出现。 

    1)更新值,设置每次出现。

    2)迭代次数1次

    3)点击行,查看结果:时间不一样,毫秒不同。

    3 更新值:Once,一旦取到值,不再发生变化。

    1)改成Once(一旦),迭代1次。打印两遍。

     2)查看结果,值是一样。无论迭代多少次,输出多少次,取出来的结果就一样

    RandomNumber类型:随机数

    1  更新值:每次迭代的时候,发生值的更新。

    1)写好函数,点击p图标

    2)点击New,参数名randomnumber(要和函数里的参数名一样。)。执行下面操作,点击close。

    1. Parameter type(参数类型):Random Number
    2. Random(Min,max参数的取值范围):这里1000-10000
    3. Number:%lu    上面Sample是这个格式的示例。
    4. Update value:Each iteration(更行值选择每次迭代)

    3)设置迭代次数:1次

    4)查看结果,8796(是1000-10000的随机值)

     5)打印两遍,其余都一样。两个值是一样的,因为只有1次迭代。

     6)设置迭代次数为两次

    7)运行,查看结果。前两次一样,后两次一样。因为发生了两次迭代。

    2 更新值:每次出现的时候,发生值的更新。

    1)设置每次出现,跟新值

    2)1次迭代

    3)运行,查看结果,两个值不一样。和迭代没有关系,只要出现就取一个随机值。试一下迭代2次。

    3 更新值:Once,一旦取到值,就不再发生变化。

    1)选择:Once

     2)1次迭代,运行,查看结果。一样

    3)来个10次迭代

    4)查看结果全都是一样。只要选择一次,就永远就是它了。

    Unique Number :唯一值

    Unique Number每一个虚拟用户,取到的值都是唯一的。

    当超过的时候,有三种操作:

    放弃,继续循环,取最后一个值。

    1  当超过值:放弃

    1)写好函数,点击p图标

    2)执行图中的操作。

    1. Parameter type:Unique Number
    2. start1 :数值起点,这里选10000
    3. Block size per :块的大小,这里选1000
    4. 更新值:每次迭代出现
    5. 当超过值:放弃

    理解:10000和1000在这里什么意思?

    假如有5个用户并发,起始值是10000,块的大小设置1000。

    第一个用户取值:10000-11000

    第二个用户取值:10000-12000

    第五个用户取值:14000-15000

    3)设置迭代次数:10次

    4)查看结果:10000--10009

    在Controller看其他用户的取值范围

    1)先File-save保存脚本

     2)打开Controller。Tools----Create Controller Scenario

    3)手工场景:设置虚拟用户为5个。

    4)如果出现“切换到”,可以不动,也可以起起来。或者点击“切换到”。执行下面操作。

    5)如果出现的是10个用户,可以改下面,改成5个用户就可以了。

    6)选择Basic schedule

    • Initialize :初始化,读的是vuser init文件
    • Start Vusers:执行的是Action
    • Duration:Action要去运行多长时间,这里是只要运行完,就结束掉。

    7)设置迭代次数为1次

    8)点击三角形运行

    9)查看结果:选中5----右键------Show Vuser Log

    10)出现5个窗口,结果为:第一个用户:10000,第二个用户 :11000。等。第五个用户:14000。

    11)迭代次数:100次

    12)运行,选择5,右键----show vuser log。出现5个窗口,查看结果为:

    第一个用户:10000-10099,第二个用户 :11000---11099。等。第五个用户:14000---14099。

    13)迭代设置:999次

    14)运行,选择5,右键----show vuser log。出现5个窗口,查看结果为:

    第一个用户:10000-10998,第二个用户 :11000---11998。等。第五个用户:14000---14998。

    15)设置迭代:1001

    16)运行,选择Failed:5,右键----show vuser log。出现5个窗口,查看结果为:

    第一个用户:10000-10999,第二个用户 :11000---11999。等。第五个用户:14000---14999

    每一个后面都有一个报错信息,因为每一个值都不够。

    Once:一旦选中,就不再变化。(补一下文字)

    2 从数据库中取值作为参数值

    连接mysql需要注意的!

    2.1 安装ODBC(数据源) 

    双击,一路点下一步。大概10秒完成。

    安装完成,可在开始---所有程序---数据源关键字搜索到。也可以发送到桌面快捷方式。

    2.2 mysql开启远程访问

    mysql默认不允许远程访问,需要先开启远程访问。

    MySQL 客户端配置

    • 确认 Navicat for MySQL 的安装
    • 给 root 开启远程访问权限
    • 在 Windows 通过 Navicat 连接到 MySQL 数据库

    1. 确认 Navicat for MySQL 的安装

    Navicat for MySQL 是一款强大的 MySQL 数据库管理和开发工具,为 专业开发者 提供了一套强大的足够尖端的工具,对于 新手 同样易于学习和上手!

    1)确认 Windows 电脑已经安装了 Navicat for MySQL

    2)如果没有安装,可以从 百度软件中心 或其他位置下载并安装

    3)安装过程中 无需额外设置,一路下一步即可

    2. 给 root 开启远程访问权限

    MySQL 是一个 关系型数据库管理系统,属于 Oracle 旗下产品。为了保证数据安全,在默认情况下,MySQL 是不允许 root 远程访问的!

    但是,在实际工作中,在 Windows 上通过 Navicat 客户端 访问 测试服务器 中的数据库还是非常普遍的。

    要 实现这个目标 就需要首先在 数据库服务器 中,为 root 开启远程访问权限

    具体操作如下:

    第 1 步 设置 root 密码

    在 CentOS 打开终端,输入以下命令连接本地的 MySQL(默认只允许本地连接)

    $ mysql

     切换到 mysql 数据库

    mysql> use mysql

     修改 root 密码

    mysql> UPDATE user SET password=PASSWORD('123456') WHERE user='root';

    提示:为了避免忘记密码,在设置密码时,最好使用 123456 这类好记忆的密码

    确认密码修改成功

    mysql> SELECT host, user, password FROM user;

    更新权限

    mysql> FLUSH PRIVILEGES;

    退出本地 Mysql 连接

    mysql> exit

    第 2 步 开启远程访问权限

    在终端输入以下命令连接本地的 MySQL(默认只允许本地连接)

    $ mysql -u root -p

    提示:设置了 root 密码之后,再次登录就必须使用刚刚设置的密码,才能连接到本地的 MySQL

    切换到 mysql 数据库

    mysql> use mysql

    启用 root 的远程访问权限

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

    提示:此命令不需要记忆,保存好讲义,在需要时复制粘贴即可

    • % 表示允许任意 ip 地址通过远程访问,如果要限制访问的计算机,可以指定固定的 ip 地址,例如 192.168.0.1
    • 123456 是第一步给 root 设置的密码

    更新权限

    mysql> FLUSH PRIVILEGES;

    退出本地 Mysql 连接

    mysql> exit

    3. 在 Windows 通过 Navicat 连接到 MySQL 数据库

    在 Windows 中打开 Navicat for MySQL

    点击左上角的 连接 按钮,然后选择 MySQL

    在弹出的窗口中,输入连接信息,如下图所示:

     

    2.3  读取数据库的数据

    1)写好函数,点击图标p

    2)点击Date Wizard从数据库读取内容。

    3)选择Specify SQL statement manu,Maximum number of row 取消掉,点击下一步。

    Specify SQL statement manu :表示用SQL语句读取数据

    Maximum number of row :读取最大的行。如果有1000行数据,写了100就只读到100行数据。(勾取消,就全部都读。)

     4)点击create创建

    5)点击机器数据源,再点击新建

    6)选择系统数据源,点击下一步。

    用户数据源:针对的是当前登陆这台虚拟机的用户,只有它才可以使用到这个数据源。

    系统数据源:Windows可以添加多个用户登陆这个虚拟机,这多个用户都可以读取到系统数据源的数据。

     

    7)选择Mysql ODBC 3.51 Driver(这是刚才安装的ODBC程序),点击下一步。

    8)点击完成

     9)开启XAMPP数据库,双击。(xampp软件在软件管家直接搜安装)

    10)点击前两个start。数据库服务器就起起来了。再点击右上角叉关闭。

    11)按以下填入参数。点击Test,如果出现右边的Success,就说明连接数据库成功。

    1. Date Source Name(数据库名称,可以随便起。):iweb
    2. Server(数据库的ip):因为是本机的,这里直接写localhost
    3. User(数据库里的用户名):root 
    4. Password(数据库里的密码):mysql
    5. Datebase(数据库):test2(图片是老师的)

    上面Datebase(数据库):test2

    其实就是XAMPP的数据库名称,如果不知道起了什么名字,可以cmd去xamppmysqlin目录下,连接mysql数据库客户端。

    我自己实验的时候是:开启windows自带的mysql

    cd C:Program FilesMySQLMySQL Server 5.7in

    mysql -uroot -pmysql

    show databases ,这里就是bookinfo

     

    Server如果不想写localhost (或者连接别人的)。Server就可以写ip,windows里查看ip方式:ipconfig

    12)填写完成后,点击ok

    注意:

    自己的Password:mysql

    自己的Database:test2

    13)刚才创建的数据源iweb就有了,选中数据源iweb,点击确定。

    14)第一次确定后,如果出现卡住,非常慢的请款下。可以在任务管理器关闭ODBC程序(箭头所指),重新开一下,因为数据源已经创建好了。

    15)有可能会把Loadrunner也同时关闭。没关系,按照上面的步骤,重新来到下面这一步。选中数据源,点击确定。

    可以借助navicat软件,看数据库表的名称,和字段写SQL语句。写sql查询语句。

    16)Connection里的内容是自动生成的。SQL:自己写sql语句。点击Finsh

    我的:select btitle from bookinfo;

     17)数据就有了, 点击close。识别中文识别不出来。这样以后就没必要写数据,直接去数据库读。

     18)设置迭代10次,点击运行

    19)查看结果,就打印出来了。

    小练习:写飞机定票登陆(不是录的)

    打开Loadrunner自带的飞机定票系统

    如果出现端口被占的请款

    找到红色X,点击Properties

    点击Reset---Start---Terminate

    1)新建脚本区

    2)直接点击取消

    3)写这个网站的登陆

    用抓包工具查看url

    1.开启Filter抓包工具。为了数据干净,再加个过滤即加上面的url。点击Run Filtersetnow保存一下。

    2.点击roemove  清除当前的url

    3.选择浏览器,谷歌

    4.在浏览器输入相应的url地址,打开网页。Filter抓包工具就抓到了。

    5.第一个就是打开网站的地址。右键---copy-----Just url

    4)把上面的地址复制到url中。这是第一步,打开网站的。

    6.继续写用户名,密码。登陆

    7.抓包工具就抓到了,登陆的url,和发送的数据。选中url-------Inspectors------WebForms-----(Body就是数据)。拷贝url

    5)执行下面的操作,Insert插入函数。

    6)选择General,执行下面操作。

    7)选择Data,点击Add,把左边的名称和值添加进去。点击ok。

    8)左边的一个个值全部添加进去。(一个都不能省略)。点击确定按钮。

    9)点击运行,这里还没有运行完。但肯定是没有成功。因为userSession是实时的。

    10)查看结果。View-----Test Results

     11)结果为:这个usersession你没有给它。

    12)可以把代码保存一下。file-save as

    3 关联

    输入用户名和密码进行登录,需要实时的获取上一个请求的响应数据中的userSession对应的值,放到登录请求数据中即可。

    如果知道如何取值那么就可以实现登录成功,那么如何获取?

    答:实时获取值的方式:关联      

    关联作用:从服务器响应数据获取动态数据,依赖目标对象的左右边界

    关联分类:手动和自动

    1.手动

    • 基础:获取一个动态数据
    • 高级:获取多个动态数据

    2.自动

    • 边录边关联
    • 录后关联

    关联步骤

    1、确定关联函数的位置(可用抓包工具抓取是哪个请求返回的动态数据)放在该请求的前面

    注意:关联函数和请求函数之间不能存在其他函数

    2、插入关联函数(Insert--new step),搜索:web_reg_save_param()函数,并输入参数名和动态数据的左右边界(用抓包工具查看)

    3、用保存的参数替换提交给服务器的动态数据

    注意:{参数名}

    关联函数:

    1.为了获取上一个请求的响应数据中的userSession值,函数名为:

    web_reg_save_param();

    该关联函数:带有reg字样,凡是带有reg字样的函数我们都称为注册型函数

    注册型函数的特点:哪个请求的响应数据有我们需要的数据,那么该就放在请求的前面,也就是说该函数需要放在web_url()请求函数的前面。

    注意:中间不能有任何函数。

    例:下面这样就是错误的示范。web_reg_save_param()和web_url()中间有别的函数,不能有任何带代码。

    关联有两种方式:手动和自动

    3.1 手动关联

    1)Insert----New Step(web_reg_save_param()这个函数可以通过插入的方式。)

    2)搜索,找到,点击ok

    在filter 找一下边界,

    1. ctrl+f  搜:usersession 

    2.有两个url请求里面都有。第二个是我们登陆,post请求带去的参数。找到了userSession,我们看第一个url里面。这行除了值,分为左右两边的值就是它左右的边界。

    3.左边的边界。(尽可能长的,要保证唯一)

     

    3)执行下面操作

    1. Parameter Name(参数名称,为你取到的值放在这个参数里面):session
    2. Left Boundary,Right  Boundary(左右边界。):这个从filter上面找的userSession的边界拷贝过来。
    3. Instace(如果你匹配的值有多个,1 ,就是取到第一个。2,就是取到第二匹配的值):1

    4)这样关联行数就行程了。

    5)userSession中的value值写成:{session}

    6)点击运行,完成后没有红色的报错信息。我们查看结果,View-----Test Results。登陆成功。

    小练习:写通过手动关联的方式,在飞机定票系统中。(登陆,选择出发地目的地,选择第其中一个,填写身份证信息,完成)

    1)在filter的浏览器中继续访问,登陆。

    2)实现下面操作,只改出发地和目的地。点击continue

    关联的边界:filter上飞机定票url中多了一些参数,拷贝到txt文件中。

    可以看到文件内容和浏览器页面的关系是一一对应的

    把不要的删除,代码更清楚。这就是后面作关联需要选择其中的一个,拷贝作边界用。

    2) 选择最后一个,然后点击continue

    3)把数据补全(填写身份证信息),点击continue

    4)到这就定完票了

    filter中哪个是点击flight的url?

    1. 删除之前的

    2. 重新登陆下

    3.右边的编号出现到4,再点击Flight

    4.点完Flight就出现6,那第6个就是点击Flight。是Get请求。把地址拷贝一下:copy----Just url 。

    一般:操作完成后,第一个出现的url。就是操作的url。记前面编号比较清晰。

    去完成练习题

    1)先写函数,web_url()

    2)执行下面操作。之前的在8这个编号这里。

    3)编号47就是这个请求。可以看到他的参数。点击Inspectors----WebForms-----Body就是参数

    4)插入web_submit_data:insert-----New Step

    5) 执行下面操作

    6)通过add,把左边的参数一个个都添加到右边去。不要少掉。

    7)所有数据都拿到了,点击确定

    8)选择出发定,目的地的continue函数已经完成。

    9)选择第三个,点击continue

    10)编号99就是这个url。post请求,有参数。

    11)插入web_submit_data():insert-----New Step

    12 )执行下面操作

    13)通过add,把左边的参数一个个都添加到右边去。不要少掉。

    14)所有都完成,点击确定。选择航班信息点击continue的函数就完成了。其中的value要后面用关联代替。

    15) 输入数字,点击contiune

    16)编号124就是要的url,也是post请求

    17)按照前面的,insert---new step把函数插入进来。输入个人信息,点击coniune的代码就完成了。

    18)选择航班信息用关联来实现,选择第三个数值进行点击操作。

    前面也提到了,编号47url里的响应数据,有我们要的参数

    之前已近把编号47响应数据拷贝到txt文件中。选择第三个数值,进行点击操作

    19)编号47有我们想要的参数,所以关联函数放在编号47函数代码的前面

    20)插入关联函数

     左边边界:如下。右边边界:>

     21)因为这样取出来的值有4个,我们要第三个。Instance:3。点击ok

    22)出现关联函数了。Ord=3,说明我们选的是第三个,如果想选第二个,改成2就可以了。

    23)改value={fight_data}

     24)点击运行,完成后没有红色的报错信息。我们查看结果,View-----Test Results。登陆成功。第三个的票价信息是320.

    25)这里的票价信息是320,说明选择第三个成功

    3.2 自动关联(都不推荐)

    自动关联分为两种:边录边关联,录后关联

    1 边录边关联

    Recording setting---correlation---Enable correlation during recording

    • 1.new application
    • 2.new rule
    • 3.填写左右边界
    • 4.ok
    • 5.录制,查看

    例:飞机定票系统,(边录边关联,登陆。获取usersession值)

    1)新建编辑区

    2)点击option设置

    3)Correlation-----Enable correlation during recording(勾勾上)--------点击New Application----aaa(可以改名字,也可以不改)----选中aaa---点击New Rule

    在filter中找边界值,先remove 清除别的,再打开webTours页面。

    这里是第三个url。左边的边界值:name=userSession value=    右边的边界值:>

    4)Action选择Search for parameter in all of the bofy text,设置左右边界值,点击ok

     5)点击ok按钮

     6)填写好,点击登陆,完成,点击Stop

     7 )看下结果,没有拿到

    要想看到,再设置一个东西。

    8)按照如下操作

    9)选择第二种,模拟自己写的,点击ok,再点击ok

    第一种:录的

    第二种:自己写的

    10)点击start record 可以查看option规则是否起着,起着点击ok。

    Enable correlation during recording (勾还在),aaa还在用着,说明规则还起着。点击ok

    11)重新再录一遍,点击stop。

    12)看录得内容,有了关联函数,起了名字:WCSParm2

    13)放到下面这个函数里面来的value={WCSParm2}

    录得这种方式,虽然可以达到关联目的,但是比较乱,比较复杂。不推荐。还是自己写的比较好,比较清晰。写多了,会发现也不难。录得时候,跑性能测试容易出错

    14)点击运行,看一下结果

    15)打开网站和登陆的都没有问题。(可以把脚本file save保存起来。方便以后可以看看)

    总结:在录制过程中进行关联,前提是在录制前先开启关联,并设置好值的左右边界。

    2 录后关联(更不建议用)

    scan script for correlation

    先运行一次,然后再扫描

    1)新建脚本区

    2)先到option里关闭关联。点击option

    把勾取消掉,就是取消关联。再点击ok

    3)点击ok按钮

    4)输入用户名,密码,登陆。完成,点击stop

    5)代码 长这样,并没有关联。这样直接运行,肯定会失败,要做一次关联才行。

    6)但是先还是要运行一次脚本,产生一些数据。可以通过Tree查看请求响应数据,类似filter抓包工具

    7)扫描脚本,扫描也相当于一次运行。

    8)扫描会把扫描和上次运行不同的给取出来,黄色部分就是不同的。

     9)创建关联:选中-----create Corelation

    点击:是

    10)有新的关联函数了,点击运行。

     把登陆的函数中的值替换了

    11)查看结果:登陆完成,没有问题了。

    有的时候扫不出来,就不能关联了,所以不推荐使用。

    注意:必须先运行一次。

    3.3 高级关联:获取多个动态值

    高级关联属于手动关联。

    高级关联使用时,会把定位到的多个值放到参数数组里面来。

    关于参数数组取值,只有下面三个函数。(直接输出来的,可以按下F1查看帮助信息。) 

    1.返回参数数组指定位置的值来,返回的值是字符串类型。

    lr_paramarr_idx();

    语法:注意:索引是从1开始的,不是从0开始的。

    lr_paramarr_idx("参数数组名",索引)   

    2.返回数组元素的个数,就是返回数组的长度。是int类型。

    lr_paramarr_len()

    语法:

    lr_paramarr_len("参数数组名称")

    3.在参数数组随机位置,返回一个值。返回的值,是字符串类型。

    lr_paramarr_random()

    语法:

    lr_paramarr_random("参数数组名称")

    例:将随机取出的参数数组的一个元素保存为一个参数

    lr_save_string(lr_paramarr_random("参数数组名"),"参数名");

    1)下面代码是之前获取一个值的,就不能用了。删除图中标蓝的部分。

     2)高级关联还是那个函数:web_reg_save_param()。Insert-----New Step

    3)左边边界:如下图所示, 右边边界:>

    4 )Instace:all(要获取全部参数)

    5)就有了下面关联函数,这个fights有4个值,不能直接把参数放在下面的函数里。

    6)获取指定位置的参数。注意:变量定义必须放在首行。

    7)获取指定位置参数:lr_paramarr_idx("fights",4)

    8)把参数直接放进去,点击运行。

    9)查看结果失败,是类型的问题。

    10)我们用拓展日志,可以看出我们问题出现在哪。Vuser----RunTimeSettings

    11)点击运行,错误提示:str是一个字符串,不是参数。

    str中存放的是字符串,而非参数。所以不能直接将字符创放入下面的代码中。

    这时候,需要将字符串内容保存到参数中。用到一个函数:

    lr_save_string("字符串",“参数名称”)

    举例:关闭日志,运行。

    Action()
    {
        lr_save_string("helloworld","aaa");
        lr_output_message(lr_eval_string("{aaa}"));
        return 0;
    }

    下面是一个错误的示范:把高级关联放在选择出发地和目的地函数的前面了。

    12)高级关联放在选择航班信息前面。

    13)把value值替换{bbb}

     14)运行,查看结果。正确

    15)用随机函数在实现一遍。为了看出是随机的,我们迭代4次。点击运行。

    16)查看结果是随机的

    关联小总结:

    如果以后,匹配边界。里面有双引号,需要加转义字符:

    参数化与关联的区别:

    参数化数据是固定的,关联的数据是动态的

    参数化的数据是保存在参数化文件中的,关联的数据是从服务器动态获取的 

    回顾:

  • 相关阅读:
    Node
    HTTP权威指南
    一些乱七八糟的思考积累
    有限状态机
    奇怪问题引用到其它文件夹项目文件方法
    dijkstra+堆优化
    高精度
    BUAA 1301 最短路
    阿里云服务器ECS(Centos8)下安装和配置python3.8
    Cheat Sheet
  • 原文地址:https://www.cnblogs.com/zhangyangcheng/p/12837782.html
Copyright © 2020-2023  润新知