在LoadRunner向远程Linux/Unix执行命令行并收集性能数据

前面介绍过在LoadRunner的Java协议实现“ 使用SSH连接Linux”,当然连接之后的故事由你主导。
今天要讲的,是一个非Java版本。是对“ 在LoadRunner中执行命令行程序之:popen()取代system()”的一个升华。
     下面的脚本,是在LoadRunner里连接Linux/Unix远程服务器,收集其磁盘IO的负载到测试结果中。
涉及到三个知识点:
    1、LoadRunner自带“PuTTY Link”的使用,路径为“%LR_PATH%\bin\plink.exe”;
    2、Linux/Unix的磁盘监控指令,读者也可以扩展为其它任何实用指令;
    3、LoadRunner自带函数lr_user_data_point的使用,保存自定义数据到测试结果。
脚本贴出如下:
  1. #define BUFFER_SIZE 20480 // 初始给它 20 KB
  2. extern char* strtok(char *token, const char *delimiter); // 显示申明
  3. Action(){
  4.     long fp; // 数据流
  5.     int count; // 用于保存流长度
  6.     char buffer[BUFFER_SIZE]; // 给数据流分配内存空间
  7.     char * row_token; // 记录每一行的地址
  8.     char field_name[100]; // 第一列的名称
  9.     int field_value; // 保存系列的值
  10.     char lrudp_name[100]; // 保存LR自定义指标值
  11.     int rc; // 保存返回值

  12.     lr_start_transaction("DiskIO");// Linux采样方式: plink -ssh -l username -pw password hostname command
  13.     lr_save_string("higkoo", "UserName");
  14.     lr_save_string("123456", "Password");
  15.     lr_save_string("192.168.10.31", "Server");
  16.     lr_save_string("iostat -xc | awk 'NR >2 {print $1, $10}'", "Command"); // 使用iostat拿到磁盘IO的状态信息
  17.     lr_save_string(lr_eval_string("\"%LR_PATH%\\bin\\plink\" -ssh -l {UserName} -pw {Password} {Server} \"{Command}\" 2>&1 "), "Result"); // 使用plink连接远程Linux服务器并拿到执行结果
  18.     fp = popen(lr_eval_string("{Result}"), "r");
  19.     if (fp == NULL) {
  20.         lr_error_message("执行命令失败");
  21.         return -1;
  22.     }

  23.     count = fread(buffer, sizeof(char), BUFFER_SIZE, fp); // 读取结果
  24.     if (feof(fp) == 0) {
  25.         lr_error_message("返回结果太大,请给数据流分配更大内存空间,谢谢!");
  26.         return -1;
  27.     }
  28.     if (ferror(fp)) {
  29.         lr_error_message ("监控指令返回错误");
  30.         return -1;
  31.     }
  32.     if (count == 0) {
  33.         lr_error_message("监控指令返回结果为熔");
  34.         return -1;
  35.     }
  36.     buffer[count] = NULL;

  37.     row_token = (char*) strtok(buffer, "\n"); // 按换行符分割
  38.     if (row_token == NULL) {
  39.         lr_error_message ("未发现有效数据");
  40.         return -1;
  41.     }
  42.     while (row_token != NULL) { // 开始读取数据
  43.         rc = sscanf(row_token, "%s %d", field_name, &field_value); //分割名称与值
  44.         if (rc != 2) {
  45.             lr_error_message("Incorrect number of items read from the row.");
  46.             return -1;
  47.         }

  48.         sprintf(lrudp_name, "disk_busy_%s", field_name);// 自定义数据的名称
  49.         lr_user_data_point(lrudp_name, field_value);// 保存到LR自定义数据

  50.         row_token = (char*) strtok(NULL, "\n");
  51.     }

  52.     pclose(fp);

  53.     lr_end_transaction("DiskIO", LR_AUTO);
  54. }
复制代码
功能实现了,后面的故事你来讲~~  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值