前面介绍过在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. 在Ubuntu16.04安装YouCompleteMe

    作为从事了4年多嵌入式Linux工作的软件工程师,最近决定完全在ubuntu上工作,使用vim进行代码的阅读和编辑,然后尝试去安装vim相关的各种插件.从来没用过代码补全的我,在网上找到了插件omni ...

  2. JAVA 配置

    JAVA 版本为jdk-7u25-windows-x64 Java 下载地址为: .CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.j ...

  3. 使用vue做移动端瀑布流分页

    讲到瀑布流分页有一个方法一定是要用到的 pullToRefresh() 这个也没什么好解释的,想了解的可以去百度一下 下面上代码 <div id="main" class=& ...

  4. CPP-基础:单目运算符重载

    关于++运算符前置和后置重载的实现实例: #include <iostream> using namespace std; //创建时钟类 class Clock { public: Cl ...

  5. C06 变量和存储类型

    目录 全局变量 局部变量 存储类型 全局变量和局部变量 变量的作用域 作用域:某些事物起作用或有效的区域. 变量的使用范围称为变量的作用域. 变量的作用域决定了变量的可操作性和有效性. C语言变量的作 ...

  6. LeetCode 最大子序和

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...

  7. 【树形dp】bzoj1304: [CQOI2009]叶子的染色

    又是一道优美的dp Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到每个叶子的 ...

  8. 概述「并查集补集转化」模型&&luoguP1330 封锁阳光大学

    奇妙的模型转化以及并查集思想 模型概述 有图$G=(V,E)$,初始所有点为白色,现在要将其中一些点染为黑色,要求染色后满足:$∀(u,v)∈E$,$∃col_u!=col_v$.求最小染色点数. 题 ...

  9. GIMP中的新建Layer与更改Layer大小

    这边可以直接New Layer,新建一个Layer,还可以New from Visible,第二种是将当前的状态下图像复制出来. 改变Layer的大小,一般的方法两种: Crop to Selecti ...

  10. webpack-dev-server proxy代理

    一个最简单的代理例子:index.html中有如下代码 fetch('/api/pub/article/list?pageSize=2').then((data)=>{ return data. ...