LR工具学习遗留问题:
1. 测试脚本组织上不太了解应用在实际项目中怎样的组织编写方式,如何定义action、事务,检查点一般使用在什么情况下,是用文字、图还是函数,是否有规范的要求。
先简单解答一下什么是Action 什么是事务:
Action :是一组事务或是一个独立的事务,一个Action可能和服务器有多次交互,完成活动目的
Transaction:在Loadrunner 中定义是用来度量服务器相应VU的请求相应时间。
检查点:在每次事务提交后,服务器端都会返回响应信息,要通过对相应信息的检查来确认每次事务请求处理结果是否正确。具体采用什么样的检查方法,根据实际情况来确定,返回的是文字就验证文字,返回图片验证图片,返回数字验证数字。
2. 测试场景中哪些监控器是常用的监控器,监控器中的监控指标也不太清楚常用的监控指标有哪些。
监控指标分为系统监控,应用监控,事务监控
事务监控:必须要监控的是事务平均相应时间,每秒处理事务数,事务成功率,事务失败率等
系统监控:分为CPU使用率,内存使用率,磁盘IO,网络IO 等具体指标说明见
应用监控:JVM,web服务器,apache IIS,数据库 oracle ,informix,中间件tuxedo weblogic等等
每种应用的架构不一样监控的指标也不一样,如tuxedo 使用MQ技术那么监控要看其消息对列大小变化,队列越长说明处理能力下降。
具体指标代表什么意思可以去网上查资料。上次发的文档里有一篇文章《Computer Performance Monitoring》是专门介绍监控指标的可以参考。
3. 测试场景中如何使用IP Spoofer,什么情况下使用。
在一些系统中为防止网络攻击,对请求IP地址进行限制,当多个并发时候会拒绝请求。在这种情况下通过Loadrunner IP欺骗技术,构造数据包时候修改来源IP地址欺骗服务端IP过滤功能。
4. 测试场景在项目中一般是否定义服务水平协议(SLA),在什么情况下需要使用SLA。与基于目标的场景有什么区别。
SLA是针对事务级别做阀值设置,设置数据在结果分析时有效
目标场景的设置是对控制台有效,影响测试执行。
5. 测试分析中没有如何分析的思路,一般对哪些图表进行怎样的分析能够分析出问题。建议将‘Load Test(loadrunner).ppt’中的‘应用Loadrunner测试心得’进行培训。
这个可以安排时间组织讨论。
6. LR11中在录制脚本过程中没有录制下thinktime,而且没有找到在哪里设置录制时记录thinktime的地方。
11没找到设置位置,这个问题保留吧。如实在需要直接手工插入think时间。
7. 在使用ip 欺骗时候如何判断vu用户使用的虚拟ip
char *ip = lr_get_vuser_ip();
if(ip)
lr_output_message("The IP address is%s", ip);
else
lr_output_message("IP spoofingdisabled");
8. 在服务响应中判断事物结果
在transaction 前再加入获取信息语句
web_reg_find("Text=验证码","SaveCount=flag",LAST);
在transaction 后边加入 判断语句,决定事务状态
if(atoi(lr_eval_string("{flag}"))>0)
{
lr_set_transaction_status(LR_FAIL);
lr_error_message("验证出现");
}
else
{
lr_set_transaction_status(LR_PASS);
}
9. 使用关联方法获取参数
web_reg_save_param("param1",
"LB/IC=ViewState\"value=\"",
"RB/IC=\"",
"Ord=1",
"Search=Body",
"RelFrameId=1",
LAST);
使用参数
web_url("HelpForm.aspx", "URL=http://10.0.0.104/Presentation.Settlement.UI/Form/HelpForm.aspx{param1}",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=http://10.0.0.104/Presentation.Settlement.UI/Left.aspx",
"Snapshot=t2.inf",
"Mode=HTML",
LAST);
10. 通过设置接受html数据最大长度
web_set_max_html_param_len("1024");
11. 如何去掉垃圾时间
char* transid ;
doubletime_elapsed;
merc_timer_handle_ttimer;
lr_start_timer();
if(atoi(lr_eval_string("{flag}"))> 0)
{
lr_message("it is fail ");
lr_set_transaction_status(LR_FAIL);
}
else
{
lr_message("it is ok");
lr_set_transaction_status(LR_PASS);
}
time_elapsed =lr_end_timer(timer);
lr_wasted_time(1000 * time_elapsed);
12. 如何自己定义计数器
再globals.h 文件中定义采集数据的方法,具体需要编程实现数据采集,我这里只是实现一个方法提供action 中调用
#ifndef _GLOBALS_H
#define _GLOBALS_H
//--------------------------------------------------------------------
// Include Files
#include "lrun.h"
#include "web_api.h"
#include "lrw_custom_body.h"
//--------------------------------------------------------------------
// Global Variables
int cpu_check(){
return 10;
}
#endif // _GLOBALS_H
在action 中实现
for(i=0;i<100;i++) {
cpu_val=cpu_check()*i;
lr_user_data_point("cpu", cpu_val);
sleep(1);
}
在运行时候在控制台有用户定义的数据点,双击就可以进入图形监控界面,根据数据可以调整两轴的范围
lr_user_data_point_ex(const char *sample_name, double value, intlog_flag);
方法是提供了是否对用户计数进行记录日志,log_flag有几个选项是和运行时候配置中的log进行对应的。