前面介绍过在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的使用,保存自定义数据到测试结果。

脚本贴出如下:

#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); 
}

功能实现了,后面的故事你来讲~~

【转载】在LoadRunner向远程Linux/Unix执行命令行并收集性能数据的更多相关文章

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

    前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...

  2. Jmeter中使用SSH插件,连接远程linux机器执行命令

    一.Why 在云主机测试中,需要使用SSH协议连接云主机进行相关操作 在python中使用paramiko库很好实现,在如果要使用jmeter做性能测试时,怎么做? 二.解决 既然原生jmeter没有 ...

  3. Python 实现远程服务器批量执行命令

    paramiko 远程控制介绍 Python paramiko是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh远程登录.首先来看一个简单的例子 import parami ...

  4. linux中执行命令权限不够怎样处理

    在linux中执行命令权限不够就要增加权限,先看遇到的情况 查看权限情况 那就赋予权限 执行命令

  5. [转]python3之paramiko模块(基于ssh连接进行远程登录服务器执行命令和上传下载文件的功能)

    转自:https://www.cnblogs.com/zhangxinqi/p/8372774.html 阅读目录 1.paramiko模块介绍 2.paramiko的使用方法 回到顶部 1.para ...

  6. Android 开发进入Linux系统执行命令 2018-5-25 Fri.

    /** * 进入linux cmd执行命令 * * @param command * @return */ private boolean runRootCommand(String command) ...

  7. [转帖]Linux后端执行命令的方法

    Linux 后台执行命令的方法 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4241330&fromuid=212883 ...

  8. UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串

    lienhua342014-10-15 ISO C 定义了 system 函数,用于在程序中执行一个命令字符串.其声明如下, #include <stdlib.h> int system( ...

  9. java使用ssh连接Linux并执行命令

     方式1:通过设置账号密码和链接地址 maven pom.xml配置: <dependency>         <groupId>com.jcraft</groupId ...

随机推荐

  1. .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法

    1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...

  2. Start GitHub

    google 的各种被墙大家都懂的,所以转向GitHub 的怀抱. 以前其实也关注过,这回是下决心好好试用了. Fork repositories Forking creates a new, uni ...

  3. 在HTML中优雅的生成PDF

    关键代码<script type=</text>          </para>          <para align=" value=" ...

  4. vijos p1002 dp ***

    链接:点我 一开始的方程式很好写的,但是数据太大,考虑到石子数目很小,我们对其进行离散化,若相邻两点距离超过ya的值,则后面所有点都往前移动,这里ya的值是可以调整的 #include <ios ...

  5. 我对java反射机制的理解

    我们平常怎么用一个使用类,怎么使用类的方法?其实就是创建一个对象,并且通过这个对象调用这个方法.不过这有一个问题,就是这个对象的载体就和这个对象产生了耦合,怎么降低两者间的耦合呢?java的反射机制就 ...

  6. OOM解决方案

    应用程序OOM异常永远都是值得关注的问题.通常这一块也是程序这中的重点之一 首先,OOM就是内存溢出,即Out Of Memory.也就是说内存占有量超过了VM所分配的最大. 怎么解决OOM,通常OO ...

  7. ThinkPHP中where()方法的使用

    where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括普通查询.表达式查询.快捷查询.区间查询.组合查询在内的查询操作.where方法 ...

  8. Hark的数据结构与算法练习之桶排序

    算法说明 桶排序的逻辑其实特别好理解,它是一种纯粹的分而治之的排序方法. 举个例子简单说一下大家就知道精髓了. 假如对11,4,2,13,22,24,20 进行排序. 那么,我们将4和2放在一起,将1 ...

  9. Spring的属性编辑器

    bean类 import java.util.Date; public class Bean { private Date date; public Date getDate() { return d ...

  10. 【BZOJ】2321: [BeiJing2011集训]星器(数学+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2321 完全想不到.. 第一眼以为是爆搜,看到数据范围果断放弃:第二眼以为是网络流(因为只有行列操作, ...