性能自动化测试之LoadRunner录制脚本(二)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/103992466

三、增强脚本

5.参数化

5.5 使用数据库参数化

5.5.1 大量数据快速插入数据库
  • 首先博主在windows server 2008虚拟机中安装了sqlserver_2008数据库,并创建了LR数据以及users表(关于数据库sqlserver的安装可以参考功能测试与项目实战之编写测试用例(重中之重)这篇文章)
    在这里插入图片描述
  • 数据库中的声明语句
    在这里插入图片描述
  • 插入数据的 sql 语句
    在这里插入图片描述
    在这里插入图片描述
  • 向数据库中快速插入 200 行数据
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
5.5.2 参数化设置
  • 首先要保证loadrunner所在的电脑能ping通SqlServer数据库所在的电脑(关闭防火墙)
    在这里插入图片描述
  • 开启SqlServer服务器TCP/IP协议
    在这里插入图片描述
  • 重启SqlServer服务,令配置生效
    在这里插入图片描述
  • 回到loadrunner注册脚本中,将之前进行参数化的数据全部进行恢复初始值
    在这里插入图片描述
  • 创建新的参数
    在这里插入图片描述
  • 跟之前QTP中一样,创建数据源
    在这里插入图片描述
  • 选择创建系统数据源,选择SqlServer
    在这里插入图片描述
  • 配置数据库连接
    在这里插入图片描述
    在这里插入图片描述
  • 选择要连接的SqlServer数据库
    在这里插入图片描述
  • 最后测试数据库连接,没有任何问题
    在这里插入图片描述
  • 指定数据库连接字符串和 SQL 语句
    ✔     为尽量保证参数的真实性,参数最好在历史数据库中获取。
    在这里插入图片描述
    在这里插入图片描述
  • 选择unique+once
    在这里插入图片描述
  • 对脚本中的数据进行参数化,在密码这块需要新建参数,选择之前的yhm.dat文件,列数为第二列密码即可,不同重新创建数据源了
    在这里插入图片描述
  • 脚本参数化配置完成如下
    在这里插入图片描述
5.5.3 使用数据库参数化数据进行负载测试
  • 保存脚本,创建场景
    在这里插入图片描述
  • 更改全局计划
    在这里插入图片描述
  • 删除之前参数化创建的100个用户数据,执行场景,事务全部通过,每个虚拟用户通过6个事务,200个虚拟用户这就是1200个事务,需要注意的是再次运行脚本init、action、end这三种脚本自带的事务不会记录进行,则总共通过的事务为600个事务
    在这里插入图片描述
  • 博主又忘记执行场景之前勾选扩展日志了,哎,如果没有勾选始终发送以及扩展日志,那么vuser运行成功的日志将不会被记录下来
    在这里插入图片描述
  • 删除注册成功的200个用户数据,重新执行场景,查看vuser虚拟用户运行日志
    在这里插入图片描述

5.6 使用随机数参数化

5.6.1 LoadRunner 提供的随机数
  • 对脚本中的密码恢复初始值后,再使用loadrunner提供的随机数
    在这里插入图片描述
  • 创建场景,并执行场景,跟之前的场景计划计划一样(不要忘记删除已注册成功的用户数据)
    在这里插入图片描述
5.6.2 使用脚本生成随机数
  • 随机数种子
    ✔     从 1、2、3、4、5、6、7、8、9、0 这十个数中随机取出一个数,比如取出的数是 6 的话,那么 6 就叫随机数,十个数字就叫随机数种子。
  • 使用 rand 产生随机数
    ✔     int a = rand() % 10;
           ★     产生 0~9 的随机数,注意 10 会被整除。
           ★     如果数据量不大,随机数可能会有重复。
    ✔     int a = rand() % 51 + 100;
           ★     可以规定上下限,产生 100~150 的随机数。
           ★     包括 0 在内共 51 个数,%51。
           ★     起始值是 100。
  • 随机字符串
    ✔     strncat 函数
           ★     strncat(dest, src, n)
                   ■     从字符串 src 的开头拷贝 n 个字符到 dest 字符串尾部,从而实现字符串的连接。
    ✔     随机字符串的实现
    在这里插入图片描述

6.关联

6.1 关联的含义

  • 【例 1】录制完整订票的脚本,注意验证脚本是否实现了业务(添加事务、检查点)。
  • 录制脚本时,服务器会返回一些动态的、变化的值给客户端,每次回放脚本这些数据都会变化,这些数据直接获得是不可能的,通常需要关联。
    在这里插入图片描述
  • 切换到树视图,为脚本添加检查点
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 删除cdtaogang用户数据文件中的订票数据
    在这里插入图片描述
  • 回到脚本,执行脚本,查看回放日志中所有的检查点都显示成功
    在这里插入图片描述
  • 但是打开cdtaogang用户文件数据,却没有看到订票数据
    在这里插入图片描述
  • 切换到树视图,给打开网站、登录、搜票、订票、退出添加事务
    在这里插入图片描述
  • 回到脚本中,在每个事务结束前对事务状态PASS OR FAIL进行判断
    在这里插入图片描述- 运行脚本,从日志中得出在登录事务的时候不成功
    在这里插入图片描述
  • 打开运行时查看器,发现在进行登录提示了如下错误
    在这里插入图片描述
  • 点击下一步,发现连用户名都没有显示
    在这里插入图片描述

6.2 如何关联

  • 录制后关联
    ✔     脚本至少执行一次后才能进行关联。

  • 手动关联方法
    ✔     对比脚本或者双击日志中的红色文字,定位到错误行,分析错误行中哪些数据可能发生了改变;
    ✔     在生成日志中,查找上一步发现的变化的数据,找到后,复制出整个一行到记事本;
    ✔     整理复制出的代码(如对齐),找出左右边界;
    ✔     插入关联函数:web_reg_save_param

  • 新建脚本,录制与webtours订票脚本一样的操作,不用保存脚本,并进行回放脚本操作
    在这里插入图片描述

  • 将当前新录制的脚本与webtours订票脚本进行对比,查看不同的地方(也就是前面查看运行时查看器提示的回话错误点)
    在这里插入图片描述

  • 通过勾选选项中显示不同标红,排除事务检查点以及航班的班次不同以为,那么这个userSession则也就是会话
    在这里插入图片描述

  • 回到webtours注册脚本中,查看脚本代码以及生产日志中的userSession
    在这里插入图片描述

  • 在脚本中鼠标点击userSession所在的函数,切换到树视图中,查看http视图,从服务返回的响应数据中查找userSeesion,如果没有找到,则需要往前找,很明显这里服务器响应数据中没有userSession字段
    在这里插入图片描述

  • 往前找,找到了userSession字段
    在这里插入图片描述

  • 复制响应中的userSession字段所在的input标签,然后鼠标点击nav.pl并切换到脚本中,在这个函数之前鼠标右击插入新步骤
    在这里插入图片描述

  • 配置如下
    在这里插入图片描述

  • 添加web_reg_save_param步骤完成后如下
    在这里插入图片描述

  • 通过在脚本中打印出session会话值,就明白为什么回放脚本在登录事务提示FAIL失败了
    在这里插入图片描述

  • 替换脚本中写死的会话值为session
    在这里插入图片描述

  • 运行脚本,查看结束登录事务显示成功,并且cdtaogang用户文件中写入订票数据
    在这里插入图片描述
           ★     web_reg_save_param(参数名,“LB/IC=左边界”,“RB/IC=右边界”,“其他属性 1=值”,“其他属性 2=值”,待查找字符串,LAST)
                   ■     关联参数名
                          ◆     表示将缓冲区中查找到的内容保存到此参数中。
                   ■     边界可以为空,但"LB="、"RB="等不能省略
                          ◆     LB/IC 中的 IC 可以省略,表示忽略大小写,不写时表示区分大小写。
                   ■     Ordinal 或 Ord=1
                          ◆     选择找到多项中的第几项(从 1 开始);
                          ◆     设置为 All 时,找到所有项后放到数组中
                                  ●     参数名_count:存放着找到的项数
                                  ●     参数名_i:存放着第 i 项(i 从 1 开始)。
                          ◆     对应于图中 Instance。
                   ■     Search=Body
                          ◆     查找位置,对应于图中 Search in。
                   ■     RelFrameId=1
                          ◆     当页面中有多个帧(框架),匹配帧中的数据时需指定帧号,帧号最多 7 位。
                          ◆     对应于图中 Relative Frame ID。
                   ■     NotFound=ERROR
                          ◆     指定找不到时的处理方式。
                   ■     SaveLen=3
                          ◆     截取字符串的长度,默认-1 表示全部截取。
                   ■     SaveOffset=2
                          ◆     从第几个字符开始截取字符,默认 0 即第 1 位开始
                   ■     IgnoreRedirections=yes
                          ◆     忽略重定向。

6.3 关联案例

  • 【例 1】将航班始发地、目的地参数化,实现一人买 3 张票,每次选择航班中的第2个班次(以;02 为边界)
  • 首先对出发地进行参数化
    在这里插入图片描述
  • 再对目的地进行参数化,这里需要注意的是不去创建新的表,而使用上面的cong.dat文件来新建一个列即可
    在这里插入图片描述
  • 因为要连续购买三次票,所以需要设置迭代次数为3,开启扩展日志
    在这里插入图片描述
  • 删除cdtaogang数据文件中的订票数据,运行脚本,查看日志得知所有事物均pass通过,出发地及目的地选择的参数正确
    在这里插入图片描述
  • 打开cdtaogang用户数据中的订票数据得知其实每次选择的航班都是一样的,那么肯定是错误的,因为三次买票的出发地与目的地都不一样,而脚本中的选择航班却不变,并且订票的检查点也是固定不变的但状态还是Pass,那么脚本是有问题的
    在这里插入图片描述
  • 解决方法:首先对检查点中的出发地和目的地进行替换现有的参数
    在这里插入图片描述
  • 对于航班号和日期,在脚本中进行复制然后到生成日志中查找,复制这一段
    在这里插入图片描述
  • 复制后粘贴到记事本中,以<input>标签开始进行整理
    在这里插入图片描述
  • 紧接着切换到树视图,倒着往前找服务器返回的响应日志中的input标签数据
    在这里插入图片描述
  • 切换到脚本,然后在函数上方添加关联
    在这里插入图片描述
  • 关联配置如下
    在这里插入图片描述
  • 在脚本中打印出banci参数的值,运行脚本,查看banci的值没有任何问题
    在这里插入图片描述
  • 替换脚本中的班次
    在这里插入图片描述
  • 【例 2】修正订票检查点中的航班号错误。
    ✔     拆分字符串
                   char p[]=“241;97”;
                   char *a=(char *)strtok(p,";"); //p 必须是数组形式 lr_output_message(a);
           ★     (char *)strtok(lr_eval_string("{参数名}"),“分割字符串”)
                   ■     返回指针变量(存储字符串)类型
    ✔     变量存入参数
           ★     lr_save_string(变量或常量,“参数名”);
  • 新建一个脚本,测试取出banci中的航班号
    在这里插入图片描述
  • 在脚本中取出banci参数的值,并进行分割取出航班号
    在这里插入图片描述
  • 删除cdtaogang用户数据中的订票数据,然后执行脚本,主要查看订票检查点是否通过
    在这里插入图片描述
  • 查看cdtaogang用户数据中的订票数据,肯定也是没有问题的
    在这里插入图片描述
  • 【例 3】将航班始发地、目的地参数化,实现一人买 3 张票,每次选择航班中的第 1 个班次(以>为边界)。
  • 首先修改脚本中关联函数的右边界和匹配选择第一个
    在这里插入图片描述
  • 删除cdtaogang用户数据中的订票数据,保存脚本并执行,查看日志以及用户订票数据如下
    在这里插入图片描述
  • 根据如上写入到用户数据中的信息,那么在脚本中则不需要保留日期了
    在这里插入图片描述
  • 现在要做的则是对banci参数的值进行处理,不要checked,在将变量保存为banci参数即可
    在这里插入图片描述
  • 执行脚本,查看cdtaogang用户订票数据与回放脚本中的banci日志,没有任何问题
    在这里插入图片描述
  • 【例 4】使用"Ord=All"的方式,选择航班中的某一个班次。
  • 修改脚本中关联函数Ord属性
    在这里插入图片描述
  • 打印出单选框的个数,并且取第一个选项(打印语句忘记添加;了)
    在这里插入图片描述
  • 保存脚本,删除cdtaogang订票数据,运行脚本查看日志中与用户数据中的订票数据均为第一个航班,并且打印出的班次数4个也是没有问题的
    在这里插入图片描述

6.4 参数化与关联对比

  • 参数化数据是由客户端传往服务器的,关联是服务器返回客户端的数据。
  • 参数化数据事先知道,关联数据事先可能不清楚。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cdtaogang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值