10.测试教程-性能测试loadrunner1

文章目录

  • 1.LoadRunner的安装
  • 2.Loadrunner的基本概念
  • 3.开发测试脚本
    • 3.1录制基本的用户脚本
    • 3.2插入事务
    • 3.3插入集合点
    • 3.4参数化输入
    • 3.5插入函数
    • 3.6插入检查点
    • 3.7运行时设置
    • 3.8单机运行测试脚本
  • 4.玩转三个测试工具
    • 4.1Virtual User Generator(此处讲解和3.1是一致的)
    • 4.2Controller
    • 4.3Analysis

大家好,我是晓星航。今天为大家带来的是 相关的讲解!😀

1.LoadRunner的安装

现在以Loadrunner12为例,说明一下安装过程。

1、双击HP LoadRunner 12.53 Community Edition.exe启动安装程序

2、安装程序开始解压,选择默认路径即可,点击install
image-20240214205617722

3、Loadrunner程序会使用到Visual C++的库,如果缺少这些库,安装程序会提示安装,这时选择“确 定”进行安装即可,过程中如果提示重启,按要求重启即可,重启后会继续进行安装过程。
image-20240214211501523

4、按照默认操作一步步进行安装
image-20240214211546817

image-20240214211603937

5、安装过程中会有如下的提示。 若无指定代理使用的证书,则去掉勾选。

image-20240214212108460

6、至此,Loadrunner已安装完毕。HP network Virtualization为可选项,可不安装。
image-20240214212134046

7、双击HP_LoadRunner_12_Community_Edition_User_Interface_Packs_T7177-15057.exe,安装中文包。 系统将抽取语言包安装包,可选择抽取的语言包临时存放路径。建议直接默认即可,点击【Install】

8、抽取安装包完成后将自动关闭窗口(注此处只是把安装包抽取出来了,要到抽取的安装包中进行安 装),此时需要到上一步中选择的路径中找到语言安装包。如未修改路径则在以下路径”C:\Temp\HP LoadRunner 12.02 Community Edition\DVD“打开该文件夹。点击”Setup“

9、将自动打开安装目录,点击【语言】

10、打开选择语言文件夹,选择要安装的语言。本处依次打开如下文件【Chinese-Simplified】 →【LoadRunner】→【LR_CHS】,点击【LR_CHS】将进行安装。(其实可以省略掉第8,9步,直接找到该文件安装即可)

image-20240214212331312

image-20240214212343238

VUG(虚拟用户生成器):录制脚本(编写脚本)

image-20240214212353624

Controller(控制器):设计场景,运行场景

image-20240214212402406

Analysis(分析):产生性能测试报告

2.Loadrunner的基本概念

功能:LoadRunner是一种适用于许多软件体系架构的自动负载测试工具,从用户关注的响应时间、吞吐量, 并发用户和性能计数器等方面来衡量系统的性能表现,辅助用户进行系统性能的优化。

原理:LR启动以后,在任务栏会有一个Agent进程,通过Agent进程,监视各种协议的Client与Server端的 通讯,用LR的一套C语言函数来录制脚本,所以只要LR支持的协议,就不会存在录制不到的,然后LR调用这些 脚本向服务器端发出请求,接受服务器的响应。至于服务器内部如何处理,它不关心。

LoadRunner通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,优化性能和加速 应用系统的发布周期。

组成:LoadRunner主要包括三个前台功能组件,分别为VuGen(虚拟用户脚本生成器)、Controller(测 试控制器)和Analysis(结果分析器)。系统会自动调用后台功能组件LG(负载生成器)和Proxy(用户代 理)来完成性能测试工作。

VuGen 是录制与便携脚本的地方。通过录制或编写脚本来模拟用户的行为。

Controller是执行负载测试管理和监控的中心。在这里指定具体的性能测试方案,执行性能测试,收集测试 数据,监控测试指标。监控工具将测试过程中收集到的客户机、服务器和网络性能指标数据显示在监控页面上,便于测试人员对系统表现进行随时掌握。

LG是模拟多用户并发访问被测试系统的组件。模拟多用户访问系统的前提是已经具备了虚拟用户脚本,VuGen 是录制和编辑虚拟用户脚本的工具,录制好的脚本是不同语言表达的文本文件,在LG执行时被解析和执行。脚 本录制和回放过程是在Proxy支持下完成的。

Analysis在测试完成后,对测试过程中收集到的各种性能数据进行计算、汇总和处理,生成各种图表和报告,为系统性能测试结果分析提供支持。

在使用loadrunner之前,先了解一下几个概念:

  • Scenario:场景。所谓场景,是指在每一个测试过程中发生的事件。
  • Vusers:虚拟用户。LoadRunner使用多线程或多进程来模拟用户对应用程序操作时产生的压力。 一个场景可能包括多个虚拟用户,甚至成千上万个虚拟用户。
  • Vuser Script:脚本。用脚本来描述Vuser在场景中执行的动作。
  • Transactions:事务。事务代表了用户的某个业务过程,需要衡量这些业务过程的性能。
  • rendezvous :集合。当我们测试多个用户并发时,每个用户执行到该事务脚本的先后顺序是不确定的,所以得到的测试结果也并不是一个完全 并发的极限测试结果。在开始事务之前 ,插入一 个“集合点”,那么在多用户执行时,就可以将用户请求停下来,直到用户数量达到满足的条件(默 认是100%的用户都到达集合点)。那么,所有的用户都将同时发出接下来的请求。

Loadrunner的性能测试过程:

image-20240128155131712

制定性能测试计划

这部分内容已经在上一节进行了讲述。主要实现以下内容:

分析应用程序、确定测试目标、计划怎样执行

开发测试脚本

LoadRunner 使用虚拟用户的活动来模拟真实用户来操作Web 应用程序,而虚拟用户的活动就包含在 测试脚本中,所以说测试脚本对于测试来说是非常重要的。

开发测试脚本要使用 VuGen 组件。测试脚本要完成的内容有:

  • 每一个虚拟用户的活动
  • 参数化
  • 定义事物
  • 定义检查点

设计运行场景

运行场景描述在测试活动中发生的各种事件。一个运行场景包括一个运行虚拟用户活动的Load Generator 机器列表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。

运行、监视测试

一切配置妥当,开始运行测试。在运行过程中,需要监视各个服务器的运行情况(DataBase Server、 Web Server 等)。 分析测试结果

分析测试结果

所有前面的准备都是为了这一步。我们需要分析大量的图表,生成各种不同的报告,最后会得出结论。

LoadRunner用3个主要功能模块来覆盖性能测试的基本流程。

  • Virtual User Generator
  • Controller
  • Analysis

其中Virtual User Generator使用在创建VU脚本阶段,Controller用在定义场景阶段和运 行场景阶段, Analysis用在分析结果阶段。

3.开发测试脚本

下面以Loadrunner安装时附带的样例程序Web Tours进行讲解。

C:\Program Files (x86)\HP\LoadRunner\WebTours,选择StartServer.bat启动服务。

image-20240214213000139

双击 StartServer.bat 启动服务

image-20240214213037901

2.WebTours配置

要访问服务器上部署的一个服务,只有一个IP能访问成功吗?port

找到WebTours目录下的conf文件夹中的httpd.conf文本文件 双击打开

image-20240214213156477

查看主机端口号

image-20240214143042371

将我们 StartServer.bat 中的IP地址复制

image-20240214213103932

拷贝到我们提前下载好的360极速版中,并加上 :1080/WebTours/ 目录后缀,我们可以看到Web Tours的登录界面

image-20240214213550464

如果我们没有账号,可以点击下图框选的地方进行注册

image-20240214213627763

按照如果所示的解析一一填写信息进行注册

image-20240214144002745

image-20240214213811741

这里我们全部填入 TEST01 来进行测试

注册成功页面

image-20240214213848838

注册完后,我们自动登录了该系统(该系统为航班系统)

image-20240214213912666

进入系统之后,我们可以修改部分航班信息

image-20240214214539422

loadrunner/WebTours/cgi-bin/users 目录下可以查看我们注册账号相关的信息

image-20240214144254835

3.1录制基本的用户脚本

1、启动 Visual User Generator 后,
image-20240216122710307

选择新建脚本,
image-20240216122805493

因为要测试的是web项目,所以选择协议为WebHTTP/HTML,点击创建后,进入主窗体

image-20240216123742117
image-20240216131359011
image-20240216131642020

测试web项目创建好后的界面
image-20240216131747903
image-20240216132539200
上述项目元素解析:
vuser_init: 初始化(这个文件从始至终也就意味着脚本从开始运行到结束运行这个过程中,只运行一次)
Action: 存放着录制好的脚本(编写代码),这个文件可以运行一次,也可以运行多次,默认运行一次,初始化完成之后运行
vuser_end: 程序退出的时候执行的,运行时机是action运行完成之后执行
globals.h: 设置脚本运行参数

2、在解决方案资源管理器中可以看到该脚本的组成部分。简单说明一下:VuGen 中的脚本分为三部分:vuser_init、vuser_end 和Action。vuser_init用于用户初始化,vuser_end用于用户清理工作。 Action用于具体的需要测试的操作。类似于unittest等测试框架。

举例说明: 一个测试场景为:用户登录系统,进行搜索操作,再进行退出系统。 这里,一般将登陆放置到vuser_init,退出放置到vuser_end,搜索放置到Action。

注意:在重复执行测试脚本时,vuser_init 和vuser_end 中的内容只会执行一次,重复执行的只是 Action 中的部分。

3、选择录制操作,可以开始一次录制操作,
image-20240216132705256

在录制中需要填写URL,这里以http://127.0.0.1:1080/We bTours/为例。录制到操作说明是将脚本放置到哪里。在录制中也可以修改脚本放置的地方。 已注册的 用户名和密码查看地址:xxx\HP\LoadRunner\WebTours\cgi-bin\users 开始录制中,“立即”默认情况 下是选中的,说明应用程序一旦启动,VuGen 就会开始录制脚本;如果没有选中,应用程序启动后, VuGen 出现对话框,待确认后才开始录制。一般默认即可。

image-20240216134448514

这里的URL地址我们在image-20240216134918706

中找,我们双击此文件就可以看到我们软件对应的URL地址。

image-20240216135039944

将图中圈红的地址复制进去

然后点击录制按钮

image-20240216135349557

4、在以上页面上有录制选项可以进行一些高级选项的设置,这里一般不需要改动。

image-20240216142051602

Recording 标签页:

  • 基于HTML的脚本:这种方式录制的代码只生成了一个函数,所有请求全放在这个函数里面,即: 一个操作(可能包含多个请求)会生成一个函数,这种方式看起来比较简洁

基于HTML的脚本模式下–>高级选项两种方式的区别:

描述用户操作的脚本(e.g. web_link,web_submit_form):上下文相关的,依赖上下文才能提交, 比较符合人们的操作习惯。

仅包含明确URL的脚本(e.g. web_url, web_submit_data):上下文不相关,每个函数都指定了具体 的url地址,可以直接提交成功,如果只关注协议,不需要关注页面,可使用这种方式录制。

  • 基于URL的脚本:这种方式会生成很多函数,它将每个请求都单独成一个函数,这种方式更接近请 求-响应的本质

选择哪种方式录制,有以下参考原则:

  • 基于浏览器的应用程序推荐使用HTML-based Script
  • 不是基于浏览器的应用程序推荐使用 URL-based Script
  • 如果基于浏览器的应用程序中包含了 JavaScript 并且该脚本向服务器产生了请求,比如DataGrid 的分页按钮等,也要使用URL-based 方式录制
  • 基于浏览器的应用程序中使用了 HTTPS 安全协议,使用URL-based 方式录制

5、点击开始录制,loadrunner会自动调用360浏览器极速版,并开始录制操作。这里以注册为例进行录制,录制完毕后,点击停止,录制停止,返回到脚本界面,可以看到已录制的脚本。

录制过程中,在屏幕上会有一个工具条出现。录制提供了暂停、停止、新增操作,增加事务、增加集合点等操作。

出现右上角的页面显示,就可以证明我们的录制软件已经开始正常录制了

image-20240216135719636

点击这里的 Stop Recording 来暂停录制

然后返回我们的 Virtual User Generator 中,我们即可看到在刚才录制完毕后,我们action的代码已经编写完毕。

image-20240216140304839

编译项目

image-20240216140721587

编译结果

image-20240216140820690

如图所示,无报错

运行脚本

image-20240216141101264

如图所示,我们脚本运行完毕后展示的图片是一个对勾,证明我们脚本运行完毕,且没有错误。

3.2插入事务

当录制完一个基本的用户脚本后,在正式使用前我们还需要完善测试脚本,增强脚本的灵活性。一般情况下,我们通过以下方法来完善测试脚本。

事务(Transaction):为了衡量服务器的性能,我们需要定义事务。比如:我们在脚本中有一个数据 查询操作,为了衡量服务器执行查询操作的性能,我们把这个操作定义为一个事务,这样在运行测试脚本时,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。插入事务操作可以在录制过程中进行,也可以 在录制结束后进行。LoadRunner 可以在脚本中插入不限数量的事务。

通过菜单设计—在脚本中插入—开始事务、结束事务来进行事务的添加。

image-20240216142602519

手动插入开始事务 lr_start

image-20240216142830143

image-20240216142841502

手动插入结束事务 lr_end

image-20240216143004400

image-20240216143024294

再次运行我们action中的代码

image-20240216143125479

事务的状态默认情况下是 LR_AUTO。一般情况下,我们也不需要修改,除非在手工编写代码时,有可 能需要手动设置事务的状态。可以通过步骤导航器来查看步骤的参数选项。

以上述注册为例,在实际生成的脚本中含有打开首页、注册、退出登录等多项操作。而我们实际需要关注的是注册这一个事务的性能,那么就需要在注册前后来加入事务。

lr_start_transaction("register");
web_submit_form("login.pl_2",
"Snapshot=t8.inf",
ITEMDATA,
"Name=username", "Value=test", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
"Name=passwordConfirm", "Value=123456", ENDITEM,
"Name=firstName", "Value=", ENDITEM,
"Name=lastName", "Value=", ENDITEM,
"Name=address1", "Value=", ENDITEM,
"Name=address2", "Value=", ENDITEM,
"Name=register.x", "Value=59", ENDITEM,
"Name=register.y", "Value=10", ENDITEM,
LAST);
web_image("button_next.gif",
"Src=/WebTours/images/button_next.gif",
"Snapshot=t9.inf",
LAST);
lr_end_transaction("register", LR_AUTO);

3.3插入集合点

插入集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受1000人同时提交数据,在LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时, LoadRunner 命令1000 人同时去提交数据,从而达到测试计划中的需求。

注意:集合点经常和事务结合起来使用。集合点只能插入到Action 部分,vuser_init和vuser_end 中不 能插入集合点。

具体的操作方法如下:在需要插入集合点的前面,通过菜单操作:菜单设计—在脚本中插入—集合

lr_rendezvous("index");

插入集合点 lr_rend

image-20240216145632298

插入之后代码如图所示

image-20240216145712898

运行代码

image-20240216145824875

3.4参数化输入

如果用户在录制脚本过程中,填写提交了一些数据,比如要增加数据库记录。这些操作都被记录到了脚 本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这样不符合实际的运行情况,而且有可能引起冲突。为了更加真实的模拟实际环境,需要各种各样的输入。

参数化输入是一种不错的方法。

用参数表示用户的脚本有两个优点:

① 可以使脚本的长度变短。

② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。

参数化包含以下两项任务:

① 在脚本中用参数取代常量值。

② 设置参数的属性以及数据源。

参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。

例如在上面的注册的例子中,我们已经注册了test用户,那么再次注册就会失败。也就是说Loadrunner 脚本再次运行就会失败。找到以下的代码块,在username中选中“test”字符串点击右键选择“使用参数 替换”,就可以进行参数设置。

web_submit_form("login.pl_2",
"Snapshot=t8.inf",
ITEMDATA,
"Name=username", "Value=test", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
"Name=passwordConfirm", "Value=123456", ENDITEM,
"Name=firstName", "Value=", ENDITEM,
"Name=lastName", "Value=", ENDITEM,
"Name=address1", "Value=", ENDITEM,
"Name=address2", "Value=", ENDITEM,
"Name=register.x", "Value=59", ENDITEM,
"Name=register.y", "Value=10", ENDITEM,
LAST);

image-20240216151354807

image-20240216151517720 image-20240216151639930

双击Parameters

image-20240216151752337

image-20240216152113457

下面介绍一下参数的类型。

日期/时间:很简单,在需要输入日期/时间的地方,可以用DateTime 类型来替代。其属性设置也很简单,选择一种格式即可。当然也可以定制格式。

组名:在实际运行中,LoadRunner使用该虚拟用户所在的Vuser Group 来代替。但是在VuGen 中运行 时,Group Name将会是None

Load Generator Name:在实际运行中,LoadRunner 使用该虚拟用户所在LoadGenerator 的机器名来代替。

迭代编号:在实际运行中,LoadRunner 使用该测试脚本当前循环的次数来代替。

随机数字:随机数。很简单。在属性设置中可以设置产生随机数的范围

唯一编号:唯一的数。在属性设置中可以设置第一个数以及递增的数的大小(每个Vuser的块大小)。

注意:使用该参数类型必须注意可以接受的最大数。例如:某个文本框能接受的最大数为99。当使用该 参数类型时,设置第一个数为1,递增的数为1,但100 个虚拟用户同时运行时,第100 个虚拟用户输入 的将是100,这样脚本运行将会出错。

注意:这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为1。 举例说明:假如起始数为1,递增为5,那么第一个用户第一次循环取值1,第二次循环取值2;第二个用 户第一次循环取值为6,第二次为7;依次类推。

Vuser ID:设置比较简单。在实际运行中,LoadRunner 使用该虚拟用户的ID 来代替,该ID 是由 Controller 来控制的。但是在VuGen 中运行时,Vuser ID 将会是–1。

File:需要在属性设置中编辑文件,添加内容

用户定义的函数:从用户开发的dll 文件提取数据。

在上面的例子中,我们取随机数就可以了。选择随机数后,点击“属性… …”按钮,进行属性设置窗口

添入随机数的取值范围为(1-50),选择一种数据格式。在更新值的时间中有以下几个选项:

  • Each Occurrence:在运行时,每遇到一次该参数,便会取一个新的值
  • Each iteration:运行时,在每一次循环中都取相同的值, 不同的循环中值不一样。
  • Once:运行时,在所有的循环中,该参数只取一次值

这里我们用的是随机数,选择默认的Each Occurrence 就非常合适。

File等类型中有以下参数:
“选择下一行 ”有以下几种选择:
Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取
Random:在每次循环里随机的读取一个,但是在循环中一直保持不变
Unique :唯一的数。注意:使用该类型必须注意数据表有足够多的数。比如Controller 中设定20 个虚
拟用户进行5 次循环,那么编号为1 的虚拟用户取前5个数,编号为2 的虚拟用户取6-10 的数,依次类推,
这样数据表中至少要有100个数据,否则Controller 运行过程中会返回一个错误。
为了避免不正确的参数导致不可用,在设置后,可以选择“模拟参数”来试运行

3.5插入函数

VuGen 中可以使用C 语言中比较标准的函数和数据类型,语法和C 语言相同。下面简单介绍一下比较常 用的函数和数据类型。

在脚本页面,通过右键-插入-新建步骤可以查看函数列表

  1. 控制脚本流程

    if { } else { }
    for{ }
    while{ }
    

    …………… 总之 C 语言的控制流程的语句这里都可以直接使用

  2. 字符串函数
    由于在 VuGen 脚本中使用最多的还是字符串,所以字符串函数在脚本中使用非常频繁。具体的语法请 参考帮助说明。

    strcmp 比较两个字符串
    strcat 连接两个字符串
    strcpy 拷贝字符串
    

    ……………… 注意:在VuGen 中,以char声明的字符串是只读的,如果试图给char类型的字符串赋值的 话,编译会通过,但在运行时会产生“Access Violation”的错误。解决这类问题,就是把字符串声明为字 符数组,比如char[100]。

  3. 输出函数 输出函数在调试脚本时非常有用。

输出函数在调试脚本时非常有用。

lr_output_message 输出一条消息
  1. LoadRunner 提供的标准函数
lr_eval_string 该函数功能是得到参数(参数化输入中)当前的值
exg: lr_output_message("temp = %s", lr_eval_string("{WCSParam2}"));
lr_save_string 该函数功能是把一个字符串保存到参数中
exg: lr_save_string("439","WCSParam3");
web_reg_save_param("BODY",
"LB=\"MESSAGE\":{\"",
"RB=\":",
LAST);
if(strcmp(lr_eval_string("{BODY}"),"msginfo")==0)
{
lr_end_transaction("柜员登陆",LR_PASS);
}
else
{
lr_output_message("BODY=[%s]",lr_eval_string("{BODY}"));
lr_end_transaction("柜员登陆",LR_FAIL);
}

3.6插入检查点

在进行压力测试时,为了检查Web 服务器返回的网页是否正确,VuGen 允许我们插入Text 检查点,这 些检查点验证网页上是否存在指定的Text,还可以测试在比较大的压力测试环境中,被测的网站功能是 否保持正确。检查点的含义和unittest中的断言功能基本上一致。

通过菜单—查看—快照,可以查看到http数据视图,选择检查的文本,选择添加文本检查步骤,即可添 加一个检查点。

web_find("Text=Thank you, <b>test</b>, for registering and welcome to the Web
Tours family.",LAST);
web_reg_find("Text=Welcome","Search=Body",LAST);
Welcome--登录成功
Thank you--注册成功

插入检查点 web_reg_find

image-20240216150524005

image-20240216150641940

插入完毕后代码:

image-20240216150821338

此时选择“回放(Replay)”,可以看到错误提示:

image-20240216151028063

运行代码之后我们可以发现在137行我们插入了一个集合点

这是因为username我们已经做了参数化,在注册成功后的欢迎页面,已经不是test了。我们做如下改造:

web_find("Text=Thank you, <b>{username}</b>, for registering and welcome to the
Web Tours family.",LAST);
再回放一下试试,失败还是成功?为什么?想一想参数中有什么需要修改的?

###关联

很多时候,一个项目的请求所以带的参数会来源于前面请求返回的结果,而我们录制的内容,则只是完 整地记录当时的请求参数,这通常不是我们想要的。

例如上面的例子中的检查点文本中的test。就是根据输出来显示的,我们可以获取该值来供后续使用。

在上图中,选择test,通过创建关联,可以创建一个关联,创建完毕后如下图:

web_reg_save_param_ex(
"ParamName=CorrelationParameter",
"LB=you, <b>",
"RB=<",
SEARCH_FILTERS,
"Scope=Body",
LAST);
//添加输出,进行验证
lr_output_message("BODY=[%s]", lr_eval_string("{CorrelationParameter}"));

3.7运行时设置

当完善了测试脚本后,需要对VuGen 的“运行时设置” 进行配置。

在“解决方案资源管理器”视图中选择“运行时设置”,常用的设置内容如下:

1、常规-其他-错误处理:

一般不需要改动,但是在Controller运行时,可以设置“出现错误时仍继续”,来统计错误率

2、常规-其他-自动事务

当我们手工设置了事务时,建议取消该项,以免Controller运行时事务太多

3、常规-运行逻辑-迭代数

根据需要变动,一般在调试脚本时可以设置为多次迭代

4、常规-日志

在调试阶段可勾选“启动日志记录”,脚本稳定时可取消该项

5、常规-思考时间

忽略时会对服务器造成更大的压力,而增加思考时间可以更好的模拟用户使用

6、internet协议-首选项-启用图像或文本检查

不勾选“启用图像或文本检查”,web_find和web_image_check设置的检查点在运行时无效

7、工具-选项-脚本-回放

如果勾选“回放期间显示运行时查看器”,则在运行时会启动浏览器

3.8单机运行测试脚本

经过以上的各个步骤后,脚本就可以运行了。运行脚本可以通过菜单或者工具栏来操作。

执行“运行”命令后,VuGen 先编译脚本,检查是否有语法等错误。如果有错误,VuGen将会提示错误。 双击错误提示,VuGen 能够定位到出现错误的那一行。为了验证脚本的正确性,我们还可以调试脚 本,比如在脚本中加断点等。

如果编译通过,就会开始运行。然后会出现运行结果。

4.玩转三个测试工具

4.1Virtual User Generator(此处讲解和3.1是一致的)

1、启动 Visual User Generator 后,
image-20240216122710307

选择新建脚本,
image-20240216122805493

因为要测试的是web项目,所以选择协议为WebHTTP/HTML,点击创建后,进入主窗体

image-20240216123742117
image-20240216131359011
image-20240216131642020

测试web项目创建好后的界面
image-20240216131747903
image-20240216132539200
上述项目元素解析:
vuser_init: 初始化(这个文件从始至终也就意味着脚本从开始运行到结束运行这个过程中,只运行一次)
Action: 存放着录制好的脚本(编写代码),这个文件可以运行一次,也可以运行多次,默认运行一次,初始化完成之后运行
vuser_end: 程序退出的时候执行的,运行时机是action运行完成之后执行
globals.h: 设置脚本运行参数

2、在解决方案资源管理器中可以看到该脚本的组成部分。简单说明一下:VuGen 中的脚本分为三部分:vuser_init、vuser_end 和Action。vuser_init用于用户初始化,vuser_end用于用户清理工作。 Action用于具体的需要测试的操作。类似于unittest等测试框架。

举例说明: 一个测试场景为:用户登录系统,进行搜索操作,再进行退出系统。 这里,一般将登陆放置到vuser_init,退出放置到vuser_end,搜索放置到Action。

注意:在重复执行测试脚本时,vuser_init 和vuser_end 中的内容只会执行一次,重复执行的只是 Action 中的部分。

3、选择录制操作,可以开始一次录制操作,
image-20240216132705256

在录制中需要填写URL,这里以http://127.0.0.1:1080/We bTours/为例。录制到操作说明是将脚本放置到哪里。在录制中也可以修改脚本放置的地方。 已注册的 用户名和密码查看地址:xxx\HP\LoadRunner\WebTours\cgi-bin\users 开始录制中,“立即”默认情况 下是选中的,说明应用程序一旦启动,VuGen 就会开始录制脚本;如果没有选中,应用程序启动后, VuGen 出现对话框,待确认后才开始录制。一般默认即可。

image-20240216134448514

这里的URL地址我们在image-20240216134918706

中找,我们双击此文件就可以看到我们软件对应的URL地址。

image-20240216135039944

将图中圈红的地址复制进去

然后点击录制按钮

image-20240216135349557

4、在以上页面上有录制选项可以进行一些高级选项的设置,这里一般不需要改动。

image-20240216142051602

Recording 标签页:

  • 基于HTML的脚本:这种方式录制的代码只生成了一个函数,所有请求全放在这个函数里面,即: 一个操作(可能包含多个请求)会生成一个函数,这种方式看起来比较简洁

基于HTML的脚本模式下–>高级选项两种方式的区别:

描述用户操作的脚本(e.g. web_link,web_submit_form):上下文相关的,依赖上下文才能提交, 比较符合人们的操作习惯。

仅包含明确URL的脚本(e.g. web_url, web_submit_data):上下文不相关,每个函数都指定了具体 的url地址,可以直接提交成功,如果只关注协议,不需要关注页面,可使用这种方式录制。

  • 基于URL的脚本:这种方式会生成很多函数,它将每个请求都单独成一个函数,这种方式更接近请 求-响应的本质

选择哪种方式录制,有以下参考原则:

  • 基于浏览器的应用程序推荐使用HTML-based Script
  • 不是基于浏览器的应用程序推荐使用 URL-based Script
  • 如果基于浏览器的应用程序中包含了 JavaScript 并且该脚本向服务器产生了请求,比如DataGrid 的分页按钮等,也要使用URL-based 方式录制
  • 基于浏览器的应用程序中使用了 HTTPS 安全协议,使用URL-based 方式录制

5、点击开始录制,loadrunner会自动调用360浏览器极速版,并开始录制操作。这里以注册为例进行录制,录制完毕后,点击停止,录制停止,返回到脚本界面,可以看到已录制的脚本。

录制过程中,在屏幕上会有一个工具条出现。录制提供了暂停、停止、新增操作,增加事务、增加集合点等操作。

出现右上角的页面显示,就可以证明我们的录制软件已经开始正常录制了

image-20240216135719636

点击这里的 Stop Recording 来暂停录制

然后返回我们的 Virtual User Generator 中,我们即可看到在刚才录制完毕后,我们action的代码已经编写完毕。

image-20240216140304839

编译项目

image-20240216140721587

编译结果

image-20240216140820690

如图所示,无报错

运行脚本

image-20240216141101264

如图所示,我们脚本运行完毕后展示的图片是一个对勾,证明我们脚本运行完毕,且没有错误。

4.2Controller

提问:为什么不能直接用VUG一次性测完还要借助Controller?

答:因为在VUG中我们不能模拟多个用户同时在线的情况。

1.打开Controller

image-20240222144859183

打开之后界面

image-20240222151925330

都不需要修改,直接点击 OK 即可

image-20240222151959811

正在创建场景

image-20240222154335181

打开后的场景

针对上述几部分进行拆分讲解

场景1:

image-20240222154256066

场景2:

image-20240222154553377 image-20240222154728400 image-20240222155005993 image-20240222155253618 image-20240222155412358

场景3:

image-20240223163444250

Controller的运行界面

image-20240223164151007

image-20240223164211026

image-20240223164400790

image-20240223164840524

image-20240223164938199

image-20240223165011698

image-20240223165102941

4.3Analysis

点击 Controller 的启动按钮开始运行,在运行结束后,我们会自动生成一个Analysis(报告总结)

image-20240223173126869

image-20240223173700393

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/488917.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简单破除github的2FA验证

简单破除github的2FA验证 文章目录 简单破除github的2FA验证&#x1f468;‍&#x1f3eb;Authenticator工具 &#x1f468;‍&#x1f3eb;Authenticator工具 最近使用github的时候发现要搞一个2FA的验证才可以 验证的途径有两种&#xff1a;一种是用手机电话验证&#xff0c;…

Java基于微信小程序的校园请假系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#…

HTML作业2

作业1: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>table…

金三银四面试题(四):Full GC 和 Minor GC

如何触发Full GC&#xff1f;这是面试中的高频题。同样了解Full GC和Minor GC对于理解Java应用程序的性能和内存管理非常重要。 区分 GC 在此之前&#xff0c;我们要搞清楚&#xff0c;什么是Full GC&#xff0c;什么是Minor GC&#xff1f; Minor GC Minor GC是Java虚拟机…

Unity构建详解(3)——SBP的依赖计算

【前置知识】 先要搞清楚Asset和Object的关系&#xff0c;可以简单理解为一个Asset对应多个Object。 unity自定义的Asset也要有一个存储的标准&#xff0c;其采用的是YAML&#xff0c;我们看到的所有Unity自定义的Asset格式&#xff0c;例如.prefab&#xff08;预制体&#x…

基于SSM框架的酒店预订系统

基于SSM框架的酒店预订系统的设计与实现 摘要 当今世界的互联网信息技术飞速发展&#xff0c;网络化的工作模式已经几乎覆盖到各个工作领域中的业务内&#xff0c;人们的日常生活也渐渐离不开互联网。因此&#xff0c;在当下全国各处的酒店都开始构建起了自己的网络预订系统。…

Win11文件右键菜单栏完整显示教程

近日公司电脑升级了win11&#xff0c;发现了一个小麻烦事&#xff0c;如下图&#xff1a; 当我想使用svn或git的时候必须要多点一下&#xff0c;这忍不了&#xff0c;无形之中加大了工作量&#xff01; 于是&#xff0c;菜单全显示教程如下&#xff1a; 第一步&#xff1a;管…

Java前端控制器模式

文章目录 以下是Java前端控制器模式的主要组成部分和工作原理&#xff1a;组件与角色&#xff1a;工作流程&#xff1a;应用场景与优势&#xff1a; Java Web应用程序示例 Java前端控制器模式是一种软件设计模式&#xff0c;它在构建基于Java的Web应用程序时特别有用&#xff0…

基于springboot实现在线拍卖系统项目【项目源码+论文说明】

基于springboot实现在线拍卖系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍…

2024/3/23打卡数组分割(第14届蓝桥杯)——二项式+快速幂

题目 思路 分析该题&#xff0c;要将集合 划分成两个子集 &#xff0c;且两个子集的和都是偶数。 可知&#xff1a;偶数 偶数 偶数&#xff1b;偶数 奇数 奇数&#xff1b;奇数 奇数 偶数&#xff1b; 分析可得&#xff1a;如果该集合的和为奇数&#xff0c;就不能分…

jQuery实现的会员中心安全修改表单特效代码

jQuery实现的会员中心安全修改表单特效代码是一款实现了可以修改登录密码&#xff0c;交易密码&#xff0c;手机号码&#xff0c;实名认证&#xff0c;电子邮箱&#xff0c;安全设置表单&#xff0c;会员表单等设置效果的代码 下载地址 https://www.qqmu.com/2635.html

卡行领航家用户端是怎么拼团怎么挣钱的?

#领航家代理政策/怎么代理/奖金制度/双2.0模式# 全国V&#xff1a;ok1234vip 领航家用户端&#xff1a;0.52费率 一次拼团0.44费率 两次拼团0.36费率 三次拼团0.2费率 ………… 十次拼团&#xff0c;客户每月挣20480 领航家代理端&#xff1a;无押激活返现高达166/台 分润万5-万…

智慧公厕的全域感知、全网协同、全业务融合和全场景智慧赋能

公共厕所是城市的重要组成部分&#xff0c;为市民提供基本的生活服务。然而&#xff0c;传统的公厕管理模式存在诸多问题&#xff0c;如排队等候时间长、卫生状况差、空气质量差等&#xff0c;严重影响市民的出行和生活质量。为了解决这些问题&#xff0c;智慧公厕应运而生&…

Spring IOC 容器的加载过程(bean 的创建过程)

Spring IOC 容器的加载过程&#xff08;bean 的创建过程&#xff09; 配置Bean 通过xml或者是Component Bean 等进行配置 解析Bean,得到BeanDefinition定义对象 通过 BeanDefintionReader 将 bean 进行解析&#xff0c;准备要创建的bean对象的定义对象BeanDefinition,存放到Be…

ATA-2048高压放大器在医疗中的作用是什么

高压放大器在医疗设备和医学应用中发挥着至关重要的作用。它们是一种专用的电子设备&#xff0c;用于放大医学图像和信号&#xff0c;以便医生能够更准确地诊断和治疗病患。下面西安安泰将详细介绍高压放大器的作用、原理和应用领域。 高压放大器是专门设计用于处理医学图像和信…

CrossOver虚拟机软件2024中文版最新功能介绍

CrossOver是一款由CodeWeavers公司开发的&#xff0c;运行在Mac和Linux操作系统下&#xff0c;能够模拟Windows系统应用运行环境的软件。它不需要用户单独安装Windows操作系统&#xff0c;就能让Windows平台上的应用程序在Mac和Linux上顺畅运行。CrossOver在技术上使用了Wine&a…

【数据存储】TIDB和MySQL的区别

1.TIDB和MySQL对比 对比内容MySQLTiDB架构设计一个传统的单机数据库系统&#xff0c;采用主从复制和分区表等方式来实现水平扩展一个分布式的 NewSQL 数据库&#xff0c;采用分布式存储和分布式事务等技术&#xff0c;支持水平扩展和高可用性事务支持 InnoDB 存储引擎来支持事…

一篇文章给你讲清楚正常卷积与深度可分离卷积

文章目录 正常卷积深度可分离卷积深度卷积逐点卷积 对比代码实现查看&#xff08;torch实现&#xff09;结果 正常卷积 也就是我们平常用的比较普遍的卷积&#xff1a; 它的参数量是&#xff1a;112&#xff0c;即&#xff1a; ( 卷积核大小&#xff09; ∗ 输入通道 ∗ 输出…

【JavaEE】_Spring MVC项目获取URL中的参数

目录 1. 单参数 2. 多参数 1. 单参数 .java文件如下&#xff1a; package com.example.demo.controller;import com.example.demo.Person; import org.springframework.web.bind.annotation.*;import java.util.Arrays; import java.util.List;RequestMapping("/Para&…

MFC 打开类向导中方法时提示对com组件的调用返回了错误 HRESULT E_FAIL

解决&#xff1a;头文件中要分类&#xff0c;把virtual和afx_msg等放在一起&#xff0c;不要交叉错开。 MFC&#xff08;Microsoft Foundation Class&#xff09;中的virtual关键字用于声明虚函数。虚函数是C中实现多态的一种机制&#xff0c;它允许派生类重新定义基类中的虚函…