LR中日志参数的设置与使用
1、Run-Time Setting日志参数的设置
在loadrunner的vuser菜单下的Run-Time Setting的General的LOG选项中可以对在执行脚本时Loadrunner对日志的操作行为进行定义,下面逐一介绍:
1) Enable logging
启用日志记录。如果选中该选项Loadrunner在执行脚本时,进行日志的记录,否则不记录日志
2) Send messages only when an error occurs
仅在出错时发送消息。也称为 JIT (实时)消息传递,仅当错误发生时才写入日志,选择该选项后则可以设置高级选项,指明日志缓存的大小,loadrunner默认的日志到小为1k
3)Always send messages
始终发送消息
4)Standard log
标准日志:创建在脚本执行期间发送的函数和消息的标准日志,供调试时使用。对于大型负载测试场景、优化会话或配置文件禁用此选项。如果日志记录级别设置为“标准”,当把脚本添加到场景、会话步骤或配置文件中时,日志记录模式将被自动设置为“Send messages only when an error occurs”。但是,如果日志记录模式被禁用或者设置为“扩展”,则将脚本添加到场景会话步骤或配置文件中将不会影响其日志记录设置。
5) Extended log-----Parameter substitution
参数替换:选择此选项可以记录指定给脚本的所有参数及其相应的值。当脚本进行参数化、插入事务、关联等优化后,在执行脚本过程中,参数化的值、事务所耗时间、关联函数取出的变量值均会在日志中输出,这个选项对调试脚本查看参数化取值、关联取值是否正确有着重要的作用。
6) Extended log-----Data returned by server
选择此选项可以记录服务器返回的所有数据。Loadrunner会将所有对服务器发出请求后的response情况记录在日志中,从这个日志中可以查看到服务器对请求的回应是否正确,在使用关联取值时往往需要到该日志中查看需要关联的值,从而确认所取数据左右边界。
7)Extended log-----Advanced trace
高级跟踪。选择此选项可以记录 Vuser 在会话期间发送的所有函数和消息。调试 Vuser 脚本时,该选项非常有用,特别是在调试手工编写的脚本时,需要查看发送出的请求和响应详细的数据包,非常有用。
日志函数的使用
Loadrunner提供了一下几个message函数:
1)lr_message
int lr_message (const char * format, exp1, exp2,...expn.);
lr_message函数将信息发送到日志文件和输入窗口。在VuGen中运行时,输入文件为output.txt。
例如:
char* abort="aborting";
lr_message ("login failed: %s", abort);
在日志中将会看到:login failed: aborting
2)lr_log_message
int lr_log_message (const char * format, exp1, exp2,...expn.);
lr_log_message函数将消息发送到Vuser或代理日志文件(取决于应用程序),而不是发送到输出窗口。通过向日志文件发送错误消息或其他信息性消息,
可以将该函数用于调试。
3)lr_error_message
int lr_error_message (const char *format, exp1, exp2,...expn. );
lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。
如果Run-time settings > General > Miscellaneous >Continue on error未被选中,当脚本执行到此处时将终止执行,这个函数所输出的错误级别较高的信息
,所以一般情况下如果使用该函数时选中Continue on error。
4)lr_output_message
int lr_output_message (const char *format, exp1, exp2,...expn.);
lr_output_message函数将带有脚本部分的行号的消息发送到输出窗口和日志文件,类型C语言中的printf(),常用。
在脚本中定义日志的输出模式
1)int lr_debug_message (unsigned int message_level, const char *format, ... );
lr_debug_message函数在指定的消息级别处于活动状态时发送一条调试信息。如果指定的消息级别未出于活动状态,则不发送消息。您可以从用户界面或者使用lr_set_debug _message,将处于活动状态的消息级别设置为MSG_CLASS_BRIEF_LOG 或MSG_CLASSS_EXTENDED_LOG。要确定当前级别,请使用 lr_get_debug_message。
2)unsigned int lr_get_debug_message ( );
lr_get_debug_message函数返回当前的日志运行时设置。该设置确定发送到输出端的信息。日志设置是使用运行时设置对话框或通过使用lr_set_debug_message函数指定的。
3)int lr_set_debug_message (unsigned int message_level, unsigned int on_off);
简介:
lr_set_debug_mssage()函数可以作为脚本中日志输出的开关,其作用如同Runtime Setting -> log中的设置一样,如果Runtime setting中取消勾选Enable log,而在脚本调试的过程中需要查看日志输出就可以使用lr_set_debug_mssage()函数。
该函数使用起来比Runtime Setting要灵活,他可以根据需要设置应该输出哪些代码段的日志,而不是像Runtime Setting一样,只要设置了就会输出整个脚本的日志,不管这些日志对用户来说是否有用。如果把这两种设置方式比作变量的话,Runtime Setting就是一个全局变量,在整个脚本中有效,而lr_set_debug_message()函数则属于局部变量,只在当前脚本中有效。
比如说脚本中有一个登录一个退出函数,我只想在脚本调试过程中查看登录的日志,那么就可以实现这样的设置:lr_set_debug_mssage(开) -登录- lr_set_debug_mssage(关),如此以来,就可以只针对性的查看“登录”的日志了。
函数介绍:
intlr_set_debug_message(unsigned intmessage_level, unsigned inton_off);
message_level有如下几种形式
1、标准日志(Brief):LR_MSG_CLASS_BRIEF_LOG
2、扩展日志(Extended Log):LR_MSG_CLASS_EXTENDED_LOG
扩展日志中还包括几个小项
服务器返回值(Result Data):LR_MSG_CLASS_RESULT_DATA
参数替换(Parameter Substitution):LR_MSG_CLASS_PARAMETERS
高级输出(Full Run-Time Trace) :LR_MSG_CLASS_FULL_TRACE
3、另外还有一种情况就是仅当在出错的时候输出:
LR_MSG_CLASS_JIT_LOG_ON_ERROR
on_off有2种形式:
LR_SWITCH_ON和LR_SWITCH_OFF
由上可知lr_set_debug_message()函数使用大致如下
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG| LR_MSG_CLASS_PARAMETERS,LR_SWITCH_ON);
… …
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG| LR_MSG_CLASS_PARAMETERS,LR_SWITCH_OFF);
示例:
/*********************************************************
本示例主要是关于lr_set_debug_message()函数的使用
如果关闭了Runtime setting中的Log输出,
但是在脚本中设置了lr_set_debug_message()开关,
脚本调试过程中仍然能够输出调试日志
注:运行该脚本前请取消勾选Runtime setting->Log中的Enable Log
*********************************************************/
Action()
{
char str[10] = "tester";
lr_output_message("*****开启日志保存前%s*****",str);
//开启日志输出
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG|LR_MSG_CLASS_PARAMETERS|LR_MSG_CLASS_RESULT_DATA|LR_MSG_CLASS_FULL_TRACE ,LR_SWITCH_ON);
//设置一个开始日志输出的flag
lr_debug_message(LR_MSG_CLASS_PARAMETERS |LR_MSG_CLASS_RESULT_DATA|LR_MSG_CLASS_FULL_TRACE ,"*****开始标志****");
lr_save_string("good",str);
//设置一个结束日志输出的flag
lr_debug_message(LR_MSG_CLASS_PARAMETERS |LR_MSG_CLASS_RESULT_DATA|LR_MSG_CLASS_FULL_TRACE ," *****结束标志****");
//关闭日志输出
lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG|LR_MSG_CLASS_PARAMETERS|LR_MSG_CLASS_RESULT_DATA|LR_MSG_CLASS_FULL_TRACE ,LR_SWITCH_OFF);
lr_output_message("*****开启日志保存后%s*****",str);
return 0;
}
该实例中还使用了一个lr_debug_message()函数,该函数的第一个参数与lr_set_debug_message()函数中的参数相同。
运行结果:
Action.c(12): *****开启日志保存前tester*****
*****开始标志****
Action.c(20): Notify: Saving Parameter "tester = good"
*****结束标志****
Action.c(29): *****开启日志保存后tester*****
Ending action Action.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.