前面介绍过在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);
}

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

转载于:https://www.cnblogs.com/defias/p/3286034.html

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

  1. python远程linux服务器执行命令_基于使用paramiko执行远程linux主机命令(详解)

    paramiko是python的SSH库,可用来连接远程linux主机,然后执行linux命令或者通过SFTP传输文件. 关于使用paramiko执行远程主机命令可以找到很多参考资料了,本文在此基础上 ...

  2. 【python远程linux、执行命令、读取excel】

    import os import paramiko import time import xlrd import pandas as pdclass ServerSsh:def __int__(sel ...

  3. 命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()

    >>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 在LoadRunner中执行命 ...

  4. Linux后台执行命令

    2019独角兽企业重金招聘Python工程师标准>>> Linux 后台执行命令 ###摘要:### 当你在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更 ...

  5. java实现连接linux,JAVA实现远道SSH连接linux并执行命令

    JAVA实现远程SSH连接linux并执行命令 package com.codeconch.ssh; import java.io.BufferedReader; import java.io.IOE ...

  6. saltstack批量查看linux信息,Saltstack 命令行:批量发送命令,返回执行结果

    批量发送发送命令符,并返回结果. salt '*' cmd.run 'df -h' ---------------------------------------- Stest1: Filesyste ...

  7. Linux篇之命令行下载远程文件curl命令的介绍与使用

    一.curl简介 通常情况下,当我们不想在本机下载文件,上传至服务器时,觉得这样过于麻烦,步骤繁琐. 那么该怎么办呢? 在Linux中,服务器下载文件,提供了一种curl命令,它可以实现在Linux中 ...

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

    maven pom.xml配置:<dependency><groupId>com.jcraft</groupId><artifactId>jsch< ...

  9. linux定时执行命令

    linux定时执行命令 crontab命令 简介 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段 ...

最新文章

  1. Java程序设计学习笔记(四)—— GUI
  2. 【Paper】2021_Optimal Distributed Leader-following Consensus of Linear Multi-agent Systems: A Dynamic
  3. 手把手教你搭建Hadoop生态系统伪分布式集群
  4. Android input keyevent
  5. kafka中topic默认属性_分享:Kafka 的 Lag 计算误区及正确实现
  6. Jeff Dean谈2020年机器学习趋势:多任务和多模态会有大进展
  7. 折半查找和二叉排序树的时间性能_详解二叉排序树(基础篇)
  8. linux命令mov,汇编指令_Y-linuz-linux-w_新浪博客
  9. 如何搭建tftp服务器
  10. 疯狂java讲义第二章课后习题答案
  11. python模拟键盘操作
  12. 基于OneDNS实现上网安全防护和监控
  13. Flutter 实现剑气加载
  14. android不能启动rom服务,基于uniapp开发的apk不能正常在android10上启动运行
  15. android调用相机分辨率,Android菜鸟笔记-获取摄像头像素值
  16. awk——awk基础介绍
  17. FPGA编程,verilog实现简易电梯控制系统,某大学数电实验课设
  18. Jekins构建触发器Build Triggers:定时构建配置
  19. C# System.Threading.Thread再度回顾
  20. laravel身份证验证_简单的Laravel登录身份验证

热门文章

  1. 网络技术温故知新(一)
  2. 在WinForm中使用Web Services 来实现软件自动升级(转)
  3. FPGA 和ASIC开发的区别
  4. 从源码分析DEARGUI之add_drawing
  5. vue悬停改变背景颜色
  6. C#中各种数据类型转换的方法的类
  7. 全链路跟踪系统设计与实践(转载)
  8. 安全与加密-使用gpg和openssl实现加密与解密
  9. 数学与当代生命科学(吴家睿)
  10. oracle 游标中抛出异常的处理方式