在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 ...
随机推荐
- sublime text less安装踩坑图文讲解(less无法生成css)
唉,怎么感觉做个前端几乎把所有的坑都踩遍了啊,别人按照网上安装了一遍就好使,我这里就死活不行. 先说一下我的问题:网上说的能安装的都按了,可是sublime就是不给我生成css文件,后来知道了,就是l ...
- jQuery对表格的操作
1.表格变色 (1)普通的隔行变色 CSS代码: .even{background:#fff;} //偶数行样式 .even{background:#fff;} //奇数行样式 ①包括表头 $ ...
- {ubuntu}乱七八糟重命名为1 2 3.....png
i=; for f in *.png; do mv "$f" ${i}.png; ((i++)); done 网上找了个测试的数据集,发现读取时候,要重命名一下 一片帖子问了类似的 ...
- 【Web应用-网络连接】Azure Web 应用对外连接数上限分析
在 Azure Web 应用中发起大量外部连接操作时,需要考虑已经建立了多少外部连接.当超过最大对外连接数时,Azure Web 应用将会产生套接字异常.Azure Web 应用对于各个级别的实例,对 ...
- ObjectiveC中的赋值,对象拷贝,浅拷贝与深拷贝
在开发过程中我们经常会遇到对象拷贝的问题,下面我们分别讨论赋值操作.对象拷贝.以及浅拷贝(Shallow copy)与深拷贝(Deep copy)的区别与各自的实现方式. 一.不同对象的赋值操作 Ob ...
- 文本编辑器vim/vi用法完全解读
vi用法 1.启动vim 2.命令模式和输入模式 3.退出vi 4.vi与ex命令 5.移动光标 6.跳转 7.搜索 8.插入文本 9.修改文本 10.替换文本 11.删除文本 12.恢复和撤销改变 ...
- 如何解决webpack中css背景图片的绝对地址
在项目开发中,一般写相对路径是没有问题的,但是在项目比较大的情况下,我的scss文件可能为了方便管理,会放在不同的文件夹下,有的可能又不需要放在文件夹下,比如我的scss文件结构如下: module ...
- 【转】Spring, MyBatis 多数据源的配置和管理
同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其它还 ...
- JavaScript调试技巧之console.log()详解--2015-08-07
对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会阻断 JavaScript程序的执行,从而造成副作用:而cons ...
- centos7内核优化
#sysctl -p 参数: net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv4.icmp ...