在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的使用,保存自定义数据到测试结果。
脚本贴出如下:
#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执行命令行并收集性能数据的更多相关文章
- 【转载】在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
		
前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...
 - Jmeter中使用SSH插件,连接远程linux机器执行命令
		
一.Why 在云主机测试中,需要使用SSH协议连接云主机进行相关操作 在python中使用paramiko库很好实现,在如果要使用jmeter做性能测试时,怎么做? 二.解决 既然原生jmeter没有 ...
 - Python 实现远程服务器批量执行命令
		
paramiko 远程控制介绍 Python paramiko是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh远程登录.首先来看一个简单的例子 import parami ...
 - linux中执行命令权限不够怎样处理
		
在linux中执行命令权限不够就要增加权限,先看遇到的情况 查看权限情况 那就赋予权限 执行命令
 - [转]python3之paramiko模块(基于ssh连接进行远程登录服务器执行命令和上传下载文件的功能)
		
转自:https://www.cnblogs.com/zhangxinqi/p/8372774.html 阅读目录 1.paramiko模块介绍 2.paramiko的使用方法 回到顶部 1.para ...
 - Android 开发进入Linux系统执行命令 2018-5-25 Fri.
		
/** * 进入linux cmd执行命令 * * @param command * @return */ private boolean runRootCommand(String command) ...
 - [转帖]Linux后端执行命令的方法
		
Linux 后台执行命令的方法 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4241330&fromuid=212883 ...
 - UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串
		
lienhua342014-10-15 ISO C 定义了 system 函数,用于在程序中执行一个命令字符串.其声明如下, #include <stdlib.h> int system( ...
 - java使用ssh连接Linux并执行命令
		
方式1:通过设置账号密码和链接地址 maven pom.xml配置: <dependency> <groupId>com.jcraft</groupId ...
 
随机推荐
- 用java代码写一个简单的网上购物车程序
			
需求:1.写一个商品类,有商品编号.商品名称.商品分类.商品单价属性.2.写一个商品条目信息类,有商品和数量两个属性,有商品总价格方法. 3.写一个购物车类,有添加商品方法.查看订单信息,删除商品,修 ...
 - 7、斐波那契数列、跳台阶、变态跳台阶、矩形覆盖------------>剑指offer系列
			
题目:斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). f(n) = f(n-1) + f(n-2) 基本思路 这道题在剑指offe ...
 - as  开启代码混淆和混淆规则
			
app的builde.gradle的文件下,buildTypes节点添加release节点,minifyEnabled属性表示是否开启混淆,proguardFiles表示混淆依赖的文件,具体开启方法如 ...
 - c++的const和static区别
			
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...
 - nmon安装和使用介绍
			
使用参考地址:百度中搜索 nmon 博客园 使用文档参考地址:http://nmon.sourceforge.net/pmwiki.php?n=Site.Documentation nmmon地址:h ...
 - Django添加tinyMCE编辑器
			
tinymce的使用方法很简单,只需要在html页面中包含如下: <!-- Place inside the <head> of your HTML --> <scrip ...
 - UVA1665 Islands (并查集)
			
补题,逆序考虑每个询问的时间,这样每次就变成出现新岛屿,然后用并查集合并统计.fa = -1表示没出现. 以前写过,但是几乎忘了,而且以前写得好丑的,虽然常数比较小,现在重新写练练手.每个单词后面都要 ...
 - HDU 4348 I - To the moon 可持续化
			
队友套的可持续化线段树,徘徊在RE和MLE之间多发过的... 复用结点新的线段树平均要log2N个结点. 其实离线就好,按照时间顺序组织操作然后dfs. #include <iostream&g ...
 - spark 的RDD各种转换和动作
			
今天先把spark的各种基本转换和动作总结下,以后有时间把各种用法放上去. 1 RDD基本转换操作 map.flagMap.distinct coalesce.repartition coale ...
 - 用valgrind检查内存问题
			
Valgrind Valgrind作为一个免费且优秀的工具包,平时大部分人可能都是使用valgrind检测内存问题,如内存泄露,越界等. Valgrind工具包包含多个工具,如Memcheck,Cac ...