是在LoadRunner里连接Linux/Unix远程服务器,收集其磁盘IO的负载到测试结果中。
涉及到三个知识点:
1、LoadRunner自带“PuTTY Link”的使用,路径为“%LR_PATH%\bin\plink.exe”;
2、Linux/Unix的磁盘监控指令,读者也可以扩展为其它任何实用指令;
3、LoadRunner自带函数lr_user_data_point的使用,保存自定义数据到测试结果。
脚本贴出如下:
#define BUFFER_SIZE 20480 // 初始给它 20 KB extern char* strtok(
char *token, const char *delimiter);
// 显示申明Action(){ long fp;
// 数据流 int count;
// 用于保存流长度 char buffer[BUFFER_SIZE]; // 给数据流分配内存空间 char * row_token;
// 记录每一行的地址 char field_name[100]; // 第一列的名称 int field_value;
// 保存系列的值 char lrudp_name[100]; // 保存LR自定义指标值 int rc;
// 保存返回值 lr_start_transaction(
"DiskIO");
// Linux采样方式: plink -ssh -l username -pw password hostname command lr_save_string(
"higkoo", "UserName");
lr_save_string(
"123456", "Password");
lr_save_string(
"192.168.10.31", "Server");
lr_save_string(
"iostat -xc | awk 'NR >2 {print $1, $10}'", "Command");
// 使用iostat拿到磁盘IO的状态信息 lr_save_string(
lr_eval_string(
"\"%LR_PATH%\\bin\\plink\" -ssh -l {UserName} -pw {Password} {Server} \"{Command}\" 2>&1 "), "Result");
// 使用plink连接远程Linux服务器并拿到执行结果 fp = popen(
lr_eval_string(
"{Result}"), "r");
if (
fp == NULL)
{ lr_error_message(
"执行命令失败");
return -1;
} count = fread(
buffer, sizeof(
char), BUFFER_SIZE, fp);
// 读取结果 if (
feof(
fp)
== 0)
{ lr_error_message(
"返回结果太大,请给数据流分配更大内存空间,谢谢!");
return -1;
} if (
ferror(
fp))
{ lr_error_message (
"监控指令返回错误");
return -1;
} if (
count == 0)
{ lr_error_message(
"监控指令返回结果为熔");
return -1;
} buffer[count] = NULL;
row_token = (
char*)
strtok(
buffer, "\n");
// 按换行符分割 if (
row_token == NULL)
{ lr_error_message (
"未发现有效数据");
return -1;
} while (
row_token != NULL)
{ // 开始读取数据 rc = sscanf(
row_token, "%s %d", field_name, &field_value);
//分割名称与值 if (
rc != 2)
{ lr_error_message(
"Incorrect number of items read from the row.");
return -1;
} sprintf(
lrudp_name, "disk_busy_%s", field_name);
// 自定义数据的名称 lr_user_data_point(
lrudp_name, field_value);
// 保存到LR自定义数据 row_token = (
char*)
strtok(
NULL, "\n");
} pclose(
fp);
lr_end_transaction(
"DiskIO", LR_AUTO);
阅读(1645) | 评论(0) | 转发(0) |