为了计算时间更加精确,可以用这个函数去掉LR自身的检查点所浪费的时间.如text check and image time Action() { double time_elapsed, duration, waste; merc_timer_handle_t timer; int m,n; lr_start_transaction("test"); timer=lr_start_timer(); // 不想记录到transaction时间的操作 for (m=;m<;m++)…
lr_get_host_name() 返回主机的名称. char * lr_get_host_name(); lr_get_host_name函数返回执行脚本的机器的名称. 示例:lr_get_host_name 在以下示例中,lr_get_host_name函数检索运行脚本的站的名称. char * my_host my_host = lr_get_host_name(); lr_output_message(“%s”,my_host);…
void lr_whoami(int * vuser_id,char ** sgroup,int * scid); 参数说明: vuser_id:指向用于存储Vuser ID号的输出参数的指针. sgroup:指向输出参数的指针,用于存储Vuser组的名称. scid:指向用于存储方案或会话步骤ID号的输出参数的指针. lr_whoami函数获取有关Vuser的信息. 注意,sgroup参数是一个指向常量数据的指针,应该只读,不能改变. 将自动分配字符串的内存. 您不必在脚本中显式分配. 如果不…
Loadrunner中lr_user_data_point.lr_user_data_point_instance两个函数可以用来记录一条自定义的Vuser运行数据,并将其输出到测试结果中,最后可以通过分析工具Analysis来分析数据采集情况.两者之间的区别是lr_user_data_point_instance函数可以用来记录指定事物实例的自定义数据. 具体使用看:https://www.cnblogs.com/Automation_software/archive/2011/07/06/2…
lr_get_vuser_ip 返回Vuser的IP地址. char * lr_get_vuser_ip(); lr_get_vuser_ip函数返回Vuser的IP地址. 当执行IP欺骗时,每个Vuser可以使用不同的地址. 此功能允许您确定当前Vuser的IP地址. 如果使用web_set_sockets_option函数使用IP_ADDRESS_BY_INDEX选项设置IP,则lr_get_vuser_ip返回该IP. 示例:lr_get_vuser_ip 在以下示例中,lr_get_vu…
lr_get_master_host_name() 返回Controller主机的名称. char * lr_get_master_host_name(); lr_get_master_host_name函数返回运行Controller的机器的名称. 不适用于不运行Vuser的产品. 示例:lr_get_master_host_name 在以下示例中,lr_get_master_host_name函数检索Controller主机的名称. char * controller_host; contr…
Action(){ //脚本信息函数. //lr_whoami:返回Vuser的ID,组名称,场景ID信息./*    int id,scid;    char *vuser_group;    lr_whoami(&id,&vuser_group,&scid);    lr_error_message("Group:%s,vuser id:%d,scenario id %d",vuser_group,id,scid);*/ //lr_get_host_name…
java实现将指定文件夹里所有文件路径输出到指定文件作为参数化文件给lr脚本使用 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class GetFileName…
业务流程:1.注册2.登录3.重置支付密码4.下订单5.支付订单6.查看订单列表 通用md5.h代码如下: #ifndef MD5_H #define MD5_H #ifdef __alpha typedef unsigned int uint32; #else typedef unsigned long uint32; #endif struct MD5Context { uint32 buf[]; uint32 bits[]; unsigned ]; }; extern void MD5In…
LR脚本实战:用户自定义C语言函数 Loadrunner可以使用标准C语言的函数,因此我们可以在脚本中编写自己的函数用于调用,把脚本结构化,更好的进行重用. 先看一个例子: Action() { int i,j; j = 1; for (i=0;i<10;i++) { lr_message("i+j=%d",sum(i,j)); j++; } return 0; } int sum(int a,int b)//简单的求和函数 { return a+b; } 例子说明: 我写了一个…
1.LR脚本录制方式说明1)HTML-based script基于HTML的脚本从内存中读取并下载资源,较少的关联处理,可以加入图片检查,回放时需要解析返回的信息a-基于用户行为的方式 web_link web_image web_submit_form 这种录制的请求,需要前面页面信息的支持每个函数对应用户的一个动作,基于用户录制,浅显易懂,有对应的检查 b-基于URL的方式 web_url web_submit_data所有请求同一由web_url处理,表单的提交由 web_submit_d…
背景:作为一个测试,特别是性能测试,尤其在活动的测试,时间紧,有很多要测的,我们的LR11因为浏览器兼容问题全录制不了脚本了,用浏览器加代理或手机加代理录制,我感觉好麻烦 ,所以就想如果能用脚本把所有的测试请求,全部自动生成脚本拿来直接用,岂不是爽歪歪. 最近我老大,非要我用python.他有个特点,每当我们用哪个东西刚刚上手的时候,他就要求我们再扩展. 所以我们这里的人的特质就是:懂的很多,但是都不精通. 我的urls.txt 我的脚本就是逐行读取URL,然后把action_name\web_…
Fatal Error -26000: Not enough memory (12320 bytes) for “new buffer in LrwSrvNetTaskIt 问题解决及lr脚本心得 2013 近日用LR的时候,发现经常会报:Action.c(28): Fatal Error -26000: Not enough memory (12320 bytes) for "new buffer in LrwSrvNetTaskItem::AllocSrvNetBuf". Abor…
原文  http://www.cnblogs.com/Bonnie83/p/3525200.html 初学性能测试时候,第一步必学脚本录制,但一路下来各种录制失败.回放脚本失败的问题层出不穷,究其原因一是LR本身存在对测试环境的兼容性问 题导致录制失败,更深层次的原因是录制者不清楚LR录制脚本的原理,或者不清楚客户端与服务器端之间的请求和应答内容及通信方式,导致一旦出现脚本执行失 败便无从下手.最近在做项目的一个接口测试时候,因请求是合作第3方发起的且不容易让第3方提供他们的平台给我们做测试,所…
初学性能测试时候,第一步必学脚本录制,但一路下来各种录制失败.回放脚本失败的问题层出不穷,究其原因一是LR本身存在对测试环境的兼容性问题导致录制失败,更深层次的原因是录制者不清楚LR录制脚本的原理,或者不清楚客户端与服务器端之间的请求和应答内容及通信方式,导致一旦出现脚本执行失败便无从下手.最近在做项目的一个接口测试时候,因请求是合作第3方发起的且不容易让第3方提供他们的平台给我们做测试,所以这种情况是没办法取录制脚本的,只能选择手动编写脚本实现.得知接口是使用http协议的post方法,想到了…
问题描述 同事遇到的一个问题,LR执行性能测试脚本时,总报出错误,无法访问一个图片的地址,但脚本中明明没有对该资源的请求. Action4.c(12): Warning -27796: Failed to connect to server "10.11.204.35:80": [10060] Connection timed out [MsgId: MWAR-27796]Action4.c(12): Warning -26000: Empty or no response for U…
1.参数化空值       如上图所示,当参数化时某个值需要为空值(非空格),直接在参数化文件中空一行/格即可,虽然Parameter List界面上没有显示空的那一行,但并不影响取值. 2.手工日志跟踪 lr_set_debug_message(|,); web_submit_data("upload_8", "Action=http://weblink-test.huawei.com/video/upload?method=Complete", "Me…
在场景监控的过程中,想知道场景运行时Vusers的运行状态以及每一个Vuser虚拟用户在本次场景运行的过程共迭代了多少次,那么就需要在VuGen脚本中自定义显示虚拟用户状态信息. 代码如下: static int iteration; Action_userStatus() { //在VuGen脚本中显示参数值,参数化名为param lr_output_message("当前参数:%s",lr_eval_string("{parameter}")); //这里设置一…
1.基础命令 dir  查看当前目录下的文件和文件夹 cd  目录名:进入特定的目录. md 路径名:建立特定的文件夹. rd 路径名:删除特定的文件夹. cls:清除屏幕. copy 路径\文件名 路径\文件名 move 路径\文件名 路径\文件名 del 文件名:删除文件 ren 旧文件名  新文件名:修改文件名 2.LR参数化 LR插入DOS操作命令例程: system("md F:\\51zxw"); system("copy F:\\51zxw.txt D:\\51…
参数化空值 如上图所示,当参数化时某个值需要为空值(非空格),直接在参数化文件中空一行/格即可,虽然Parameter List界面上没有显示空的那一行,但并不影响取值. 手工日志跟踪 lr_set_debug_message(|,); web_submit_data("upload_8", "Action=http://weblink-test.huawei.com/video/upload?method=Complete", "Method=POST&…
基础命令 1.dir 无参数:查看当前所在目录的文件和文件夹 /s:查看当前目录其所有子目录的文件和文件夹 /a:查看包括隐含文件的所有文件 /ah:只显示隐含文件 /w:以紧凑方式显示文件和文件夹 2.cd cd 目录名:进入特定的目录 cd..:退回到上一级目录 cd\:退回到根目录 3.md rd md 路径名:建立特定的文件夹 md  d:\test rd 路径名:删除特定的文件夹 rd  d:\test 4.cls 清除屏幕 5.copy copy 路径\文件名 路径\文件名:把一个文…
1.变量和参数的设置 //将IP地址和端口放入到参数中lr_save_string("127.0.0.1:1080","ip"); //退出脚本建议使用lr_exitlr_exit(LR_EXIT_VUSER,LR_PASS); //计算变量数组的元素个数int arr_m1[100]; int len1=0len1=sizeof(arr_m1)/sizeof(int); //返回字符串的长度char *tempStr="test is a house&q…
1. 打印出: the value  is+"参数值" lr_output_message("the value  is",lr_eval_string("{参数值}")): 2. 定义了一个参数名为pranme 值为 "51test" lr_serve_string("51test","pranme"); 调用方法: 参数需要双引号 lr_eval_string("{para…
Action(){ char *url = "127.0.0.1:1080"; char arr_url[1024]; //将url变量的值复制给p_url1参数 lr_save_string(url,"p_url"); //将p_url1参数的值复制给arr_url变量 strcpy(arr_url,"URL=http://"); strcat(arr_url,lr_eval_string("{p_url}")); strc…
Action(){ //application/x-www-form-urlencoded //application/json //web_add_auto_header("Content-Type","application/x-www-form-urlencoded");设置请求头信息 //1.停顿2秒 lr_think_time(2); //2.设置检查点 web_reg_find("SaveCount=count", "Tex…
1.变量和参数的设置 //将IP地址和端口放入到参数中lr_save_string("192.168.1.133:8081","ip"); //计算变量数组的元素个数int arr_m1[100]; int len1=0len1=sizeof(arr_m1)/sizeof(int); //返回值字符串的长度char *tempStr="test is a house";int len=0;len=strlen(tempStr); //在globa…
脚本增强与调试 一般来说,使用LR的Vugen录制的脚本并不能直接用于测试,需要对脚本进行各方面的增强,主要包括添加注释.关联.检查点.事务.参数化.日志输出等.下面结合刚完成的一个web项目性能测试来对LR性能脚本增强和调试作简单的总结(不包括LR工具基本操作和基本概念的解释). 首先当我们使用LR的Vugen录制完一个脚本后,看着满屏幕LR工具自动生成的脚本代码是否觉得有些无从下手?所以这里有一个特别有用的技巧,就是在录制时可以一边录制一边增加注释,点击录制界面上的增加注释按钮即可实时的增加…
性能需求:在列表中删除后有记录,或对列表中的每条记录进行操作(如点击每条记录的“单号”进入订单详情页面,或在列表中对每条记录进行“启用”.“停止”操作) 举例:Vuser脚本模拟用户在订单列表中点击每条记录的“单号”进入订单详情页面进行处理,处理后该记录的状态会发生变化,此时,如果又有另外的虚拟用户进入订单列表对同一条订单记录进行同样一操作时,页面会提示(该记录已处理)导致后面的脚本关联失败,运行场景也会报错,那么,就需要在LR脚本中除了做参数化和关联外,还需要实现翻页脚本(假设列表每页显示10…
在一次测试中,需用到sql去查询Oracle数据,并去使用改数据时,查阅各种资料终于实现LoadRunner对Oracle数据库进行操作,分享给大家,也与大家共同进步~   同时也可用Loadrunner进行oracle数据库压力测试的时候,可以选择oracle 2tier协议进行录制. 一.如果选择录制脚本的话, 1.vugen会生成以下这些跟其他协议不同的文件: vdf.h 作用:定义各种变量 print.inl 作用:打印表格使用的函数.录制脚本时才有用,写脚本的话没有用 pre_cci.…
2.LR常用函数以及调用自定义函数 2.1.LR常用函数以及对信息的判断 2.1.1. LR内部自定义函数 在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示[illegal statement termination] 1.编写简单函数 int sum(int a,int b)//简单的求和函数 { return a+b; } AdvSearch() { lr_message("sum = 10+2=%d",sum(9,2)); return 0;…