LoadRunner FAQ

web_concurrent_start和web_concurrent_end

  web_concurrent_start

  语法:

  int web_concurrent_start ( [char * ConcurrentGroupName,]NULL );

  参数:

  ConcurrentGroupName:可选的,并发组的标识符。

  NULL:参数列表结束的标记符。

  返回值:

  整型,返回LR_PASS (0)表示成功,返回LR_FAIL(1)表示失败。

  web_concurrent_end

  语法:

  int web_concurrent_end ( reserved );

  参数:

  reserved:保留的供扩展的字段。

  返回值

  整型。返回LR_PASS (0)表示成功,返回LR_FAIL(1)表示失败。

  说明

  web_concurrent_start函数是并发组开始的标记。web_concurrent_end,并发组结束的标记。在并发组中的函数不是立即执行的。在并发组开始时,所有的函数首先被记录下来,当并发组结束时,所有的函数并发执行。脚本执行时,碰到 web_concurrent_end函数时,开始并发执行所有记录的函数。

  在并发组中,可以包含的函数有:web_url、web_submit_data、web_custom_request、web_create_html_param、web_create_html_param_ex、web_reg_save_param、web_add_header。

  URL-based 方式将每条客户端发出的请求录制成一条语句,对LoadRunner来说,在该模式下,一条语句只建立一个到服务器的连接,LoadRunner提供了web_concurrent_start和web_concurrent_end函数模拟HTML-based的工作方式

  LoadRunner变量

  Loadrunner变量分为局部变量和全局变量。

  1. 如何定义变量

  在Loadrunner脚本中变量必须在开头声明。比如说,在vuser_init、Action、vuser_end定义变量,必须现在最顶端生命,后面才能使用。如果不这样,编译器是通不过的。

  2. 局部变量

  就像C语言一样,变量有作用域范围,局部变量包含在函数或者vuser_init、Action、vuser_end内部,对于其他范围之外就不起作用了。

  3. 全局变量

  若要跨越vuser_init、Action、vuser_end定义变量,则需要定义全局变量。在Loadrunner的脚本录制时,会生成一个globals.h文件,在这里定义的变量相当于Loadrunner脚本的全局变量,可以在vuser_init、Action、vuser_end中被使用。例子:


#ifndef _GLOBALS_H

#define _GLOBALS_H

//-------------------------------------------------------------------

// Include Files

#include "lrun.h"

#include "web_api.h"

#include "lrw_custom_body.h"

//定义全局变量char * str="This is a test";

//-------------------------------------------------------------------

// Global Variables#endif // _GLOBALS_H

 LR中参数的定义和赋值

  1.参数的赋值和取值

  lr_save_string("hello world","param");

  lr_eval_string("{param}");

  2.变量到参数


int x;

char *y;

y="hello";

x=10;

lr_save_int(x,"param");

lr_save_string(y,"param1");

lr_eval_string("{param}");

lr_eval_string("{param1}");

  3.变量读参数


char x[100];

x="{param}";

lr_save_string("hello world","param");

lr_eval_string(x);

  LR中文件下载模拟


Action()

{

//定义一个整型变量保存获得文件的大小

int flen;

//保存文件句柄

long filedes;

//保存文件路径及文件名

char file[256]="/0";

//定义一个随机数

char * strNumber;

//Returns the string argument after evaluating embedded parameters.

strNumber=lr_eval_string("{RandomNum}");

//将路径保存到file变量中

strcat(file,"D://Excel//");

//将获得的随机数拼接在file变量之后

strcat(file,strNumber);

//将下载的文件后缀名.rar拼接在file变量之后

strcat(file,".rar");

//到此为止一个LoadRunner已经获得了一个完整的文件名

//设置参数的最大长度,注意该值必须大于文件的大小

web_set_max_html_param_len("20000");

//使用关联函数获取下载文件的内容,在这里不定义左右边界,获得服务器响应的所有内容

web_reg_save_param("fcontent",

"LB=",

"RB=",

"SEARCH=BODY",

LAST);

lr_start_transaction("下载帮助文件");

//发送下载帮助文件的请求

web_url("DownLoadServlet",

"URL=https://testserver3/servlet/DownLoadServlet?filename=help",

"Resource=1",

"RecContentType=application/x-msdownload",

"Referer=",

"Snapshot=t41.inf",

LAST);

//获取响应中的文件长度

flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

if(flen > 0)

{

//以写方式打开文件

if((filedes = fopen(file, "wb")) == NULL)

{

lr_output_message("打开文件失败!");

return -1;

}

//写入文件内容

fwrite(lr_eval_string("{fcontent}"), flen, 1, filedes);

//关闭文件

fclose(filedes);

}

lr_end_transaction("下载帮助文件",LR_AUTO);

return 0;

}

  如何进行数据的关联

  VuGen提供二种方式帮助您找出需要做关联(correlation)的值:

  1. 自动关联

  2. 手动关联

  自动关联

  VuGen内建自动关联引擎(auto-correlationengine),可以自动找出需要关联的值,并且自动使用关联函数建立关联。有两种方式:

  RuleCorrelation

  可以在【RecordingOptions】>【InternetProtocol】>【Correlation】中启用关联规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。

您也可以在【RecordingOptions】>【InternetProtocol】>【Correlation】检视每个关联规则的定义。

  请依照以下步骤使用RuleCorrelation:

  1. 启用auto-correlation

  1) 点选VuGen的【Tools】>【RecordingOptions】,开启【RecordingOptions】对话窗口,选取【InternetProtocol】>【Correlation】,勾选【Enablecorrelation during recording】,以启用自动关联。

  2) 假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应的应用系统。

  3) 或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。

  2. 录制脚本

  开始录制脚本,在录制过程中,当VuGen侦测到符合关联规则的数据时,会依照设定建立关联,您会在脚本中看到类似以下的脚本,此为BroadVision应用系统建立关联的例子,在脚本批注部分可以看到关联前的数据为何。

  3. 执行脚本验证关联是OK的。

  CorrelationStudio

  当录制的应用系统不属于VuGen预设支持的应用系统时,RuleCorrelation可能既无法发挥作用,这时可以利用CorrelationStudio来做关联。

  CorrelationStudio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。

  使用CorrelationStudio的步骤如下:

  1. 录制脚本并执行

  2. 执行完毕后,VuGen会跳出下面的【ScanAction for Correlation】窗口,询问您是否要扫描脚本并建立关联,按下【Yes】按钮。

  3. 扫描完后,可以在脚本下方的【CorrelationResults】中看到扫描的结果。

  4. 检查一下扫瞄的结果后,选择要做关联的数据,然后按下【Correlate】按钮,一笔一笔做,或是按下【CorrelateAll】让VuGen一次就对所有的数据建立关联。

  注意:由于CorrelationStudio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【CorrelateAll】。

  5. 一般来说,您必须一直重复步骤1~4直到所有需要做关联的数据都找出来为止。因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。

  手动关联

  手动关联的执行过程大致如下:

  1. 使用相同的业务流程与数据,录制二份脚本

  2. 使用Diff工具比较一下生成的Action.c,找出需要关联的数据

  3. 使用web_reg_save_param函数手动建立关联

  4. 将脚本中有用到关联的数据,以参数取代

  注意动态数据不能放在vuser_init.c文件中。不是所有的差异处都要关联的,WEB_URL()等方法的参数列表的先后顺序是没关系的,思考时间当然也可以不同。

  LR的检查点设置

  常用检查点函数如下:

  1)web_find()函数用于从 HTML 页中搜索指定的文本字符串;

  2)web_reg_find()函数注册一个请求,以在下一个操作函数(如 web_url)检索到的HTML网页上搜索指定的文本字符串;

  3)web_image_check()函数用于从HTML页面中查找指定的图片;

  4)web_global_verfication()属于注册函数,注册一个在web页面中搜索文本字符串的请求,与web_reg_find只在下一个Action函数中执行搜索不同的是它在之后所有的Action类函数中执行搜索指定的文本字符串;

  下面分别介绍以上函数的用法:

  1、web_find()函数参数举例:

  web_find("web_find","RighOf=a","LeftOf=b","What=name",LAST);

  参数解释:"web_find"定义该查找函数的名称;“LeftOf”和“RighOf=”用来定义查找字符的左右边界;“What=”定义查找内容;

  例如上述参数举例中的意思就是在页面中查找左边界为b,右边界为a,内容为name的信息;

  使用该函数注意事项:该函数是在查找页面中的内容,所以要放在要查找的内容的后面;该函数只能在基于HTML模式录制的脚本中进行查找

  注意事项:使用该函数时,要在Vuser->Run-Tme Settings中更改下设置

  勾选Enable Image and text check

  系统默认是不勾选该选项的。

  2、web_reg_find()函数参数举例:

  web_reg_find("Search=Body","SaveCount=ddd","Test=aaa",LAST);

  参数解释: Search用来定义查找范围,SaveCount定义查找计数变量名称,该参数可以记录在缓存中查找内容出现的次数,可以使用该值,来判断要查找的内容是否被找到;

  例如上述参数举例中的意思就是Body中查找内容为aaa的信息,并将出现次数记录在变量ddd中;

  【代码一:web_reg_find("Text=PaymentDetails",LAST);

  代码思路:1.“Payment Details” 为你要检查的文本;

  2. 脚本执行到此处,若在页面上找到了这几个字符串,那脚本继续执行下去;若没有找到,脚本将在此报错并且结束。

  3、web_image_check()函数参数说明:

  web_image_check("web_image_check","Alt=","Src=",LAST);

  参数解释:“Alt”和“Src”的值直接取该图片在网页源代码中相应参数的值;

  注意事项:使用该函数时,要在Vuser->Run-Tme Settings中勾选Enable Image and text check,具体操作请看web_find()中的注意事项。

  插入函数的方法

  1、 手工写入,在需要插入函数的位置手工写入该函数;

  2、 光标停留在要插入函数的位置,在INSERT菜单中,选择new step,在列表中选择或查找要插入的函数,根据提示填写必要的参数;

  3、 在tree view模式下,在树状菜单中选中要插入函数的位置,右键,选择insert after或insert before,根据提示填写必要的参数;

  总结:

  1、 这两个函数函数类型不同,WEB_FIND是普通函数,WEB_REG_FIND是注册函数;

  2、 WEB_FIND使用时必须开启内容检查选项,而WEB_REG_FIND则不没有此限制;

  3、 WEB_FIND只能用在基于HTML模式录制的脚本中,而WEB_REG_FIND没有此限制;

  4、 WEB_FIND是在返回的页面中进行内容查找,WEB_REG_FIND是在缓存中进行查找;

  5、 WEB_FIND在执行效率上不如WEB_REG_FIND;

  使用web_concurrent_start报错

  录制方式选的是HTML-based script,改为url-based script就可以了。该函数不支持HTML-based script方式。

  LR中的脚本变量声明报错

  Loadrunner使用的是C语言的语法。脚本中变量必须在开头声明。比如说,在Vuser_init、Action、Vuser_end定义变量,必须现在最顶端生命,后面才能使用。如果不这样,编译器是通不过的。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2025-01-30 13:25:30

LoadRunner FAQ的相关文章

UML Use Case Diagrams: Tips and FAQ

UML Use Case Diagrams: Tips and FAQ 来源:http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html Contents: What is a UML Use Case Diagram (UCD), and when should I use it? How do you know who the actors are in a UCD? How do you know what to put in the "S

LoadRunner使用动态链接库技术

什么是动态库? 动态库一般又叫动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数.函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数.DLL 还有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库

DotNET WinForm FAQ 16个(上)

Dotnet WinForm 建立 FAQ 小气的神 2001.08.31 如何建立你的第一个窗体,希望下面的说明可以成为你快速开始的一个指引. 1. 如何设置一个From的边界 2. 如何建立一个透明的From 3. 如何设置窗体在屏幕中的位置 4. 如何使最小化和最大化按钮不可用 5. 如何使一个窗体不见 6. 如何设置使窗体成为非矩形的. 7. 如何使一个窗体在屏幕的最顶端. 8. 如何显示一个Model和非Model的窗体 9. 如何制作一个MDI的窗体 10. 如何将你的窗体不显示在任

利用loadrunner测试ORACLE存储过程的性能

首先需要安装 LR的.NET ADD-IN ,在开发环境编写代码,做数据库连接,然后调用执行存储过程. 装好以后,打开程序,应该看到菜单栏里多了一个: 然后添加一个LR项目: 之后就可以编码了,我写了个代码,如下: using System;using System.Runtime.InteropServices;using System.ComponentModel;using System.Data;using System.Data.OracleClient;using ShangXin.

交互设计实例:如何设计高效的faq页面

文章描述:设计高效的faq页面. 这阵子没有精力完整翻译和发到译言(  现下正渐入状态,预计写博客量会逐步提升回来),简短做一个概要翻译,为近期工作需要做一个参考. 其中提到,维护良好的faq能令用户有参与感,很有体会,当寻找一个问题,赫然发现在置顶常见第一条的时候,有一种强烈的"找到组织"的感觉. 不过,faq还有一种挑战这里没提到,在充分收集到最常提出问题的基础上,对于一些功能.服务的缺陷如何提示,是坦然还是回避,这好像已经是另一个范畴的讨论了.ok下面是简短概要翻译,完整版和例子

JSP - FAQ (4)

js 27) How are servlets and JSP pages related? TOC JSP pages are focused around HTML (or XML) with Java codes and JSP tags inside them. When a web server that has JSP support is asked for a JSP page, it checks to see if it has already compiled the pa

JSP - FAQ (1)

js Java Server Pages Frequently Asked Questions Maintainer: Richard Vowles, rvowles@esperanto.org.nz (http://www.esperanto.org.nz) QuestionsWhat is JSP? What version is the current version of JSP? Where can I get the specification for JSP? Who suppor

ORA FAQ 性能调整系列之——压缩索引会提高性能么?

索引|性能|压缩 Will compressing my indexes improve performance ?压缩索引会提高性能么? Author's name: Jonathan Lewis Author's Email: Jonathan@jlcomp.demon.co.uk Date written: 26th Feb 2003 Oracle version(s): 8.1 - 9.2 Compressed indexes have been around for a couple

ORA FAQ 性能调整系列之——Oracle 9与Oracle 8中CPU

oracle|性能 What is the difference between cpu_costing in Oracle 9 and the old costing of Oracle 8 ?Oracle 9与Oracle 8中CPU_COSTING有什么变化? Author's name: Jonathan LewisAuthor's Email: Jonathan@jlcomp.demon.co.ukDate written: 15th Dec 2002 Oracle version(s