subscribe error不执行_在LoadRunner中执行命令行程序之:popen()取代system()

eb9c9e5ef0e007053276b37561ef7cf7.png

》》》推荐阅读《《《

1、性能测试学习笔记-场景设计

2、性能测试的重要意义

3、性能分析流程及方法

4、应用系统性能调优之性能分析

在LoadRunner中执行命令行程序之:popen()取代system()
    我想大家应该都知道在LoadRunner可以使用函数system()来调用系统指令,结果同在批处理里执行一样。
    但是system()有个缺陷:无法获取命令的返回结果。
    也许你可以用`echo command > file`将结果输出到文件,然后再读出来。多痛苦的一件事啊!当虚拟用户多的时候,你还得考虑重复写同一个文件存在的风险。或是将文件名进行参数化以保证不同相同的文件,但这样又加大了IO的负载。
    实际上有更好的解决办法:使用popen()
    popen()用法上类似于fopen(),但不需要打开文件,直接读取数据流。全内存操作,不需要考虑文件覆盖,更不存在磁盘IO。
    举例如下:
#define BUFFER_SIZE 10240 // 初始给10KB
Action(){ 
    long fp; // 流的指针 
    int count; // 流的长度 
    char buffer[BUFFER_SIZE]; // 给输出分配内存空间 
    /* 
     * 下来我们来获取当前系统的用户名称 
     */ 
    fp = popen("echo %USERDOMAIN%", "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; 
    } 
    buffer[count] = NULL; 
    lr_output_message("Notify:当前用户: %s", buffer); 
    pclose(fp); 
    return 0; 
}
输出:
Running Vuser... 
Starting iteration 1. 
Starting action Action. 
Action.c(28): Notify:当前用户: higkoo
Ending action Action. 
Ending iteration 1. 
Ending Vuser...

     OK,下面再举个例子,逐行获取结果并逐行输出:
extern char* strtok(char *token, const char *delimiter); // 提前申明 
#define BUFFER_SIZE 20480 // 初始给它20 KB先 
Action(){ 
    long fp; // 流指针 
    int count; //流长度 
    char buffer[BUFFER_SIZE]; // 给流分配内存 
    char * token; 
    char param_buf[10]; // 用于保存参数名称 
    int i; 
    /* 
     * 显示已安装设备驱动程序列表 
     */ 
    fp = popen("DRIVERQUERY", "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; 
    } 
    buffer[count] = NULL; 
    token = (char*) strtok(buffer, "\n"); // 按换行符分割 
    if (token == NULL) { 
        lr_error_message ("返回值里没有换行"); 
        return -1; 
    } 
    i = 1; 
    while (token != NULL) { // 逐行的读结果 
        sprintf(param_buf, "output_%d", i); 
        lr_save_string(token, param_buf); 
        i++; 
        token = (char*) strtok(NULL, "\n"); 
    } 
    lr_save_int(i-1, "output_count"); 
    for (i=1; i<=lr_paramarr_len("output"); i++) {// 把所有行都打出来 
        lr_output_message("设备信息: %s", lr_paramarr_idx("output", i)); 
    } 
    pclose(fp); 
    return 0; 
}

》》》推荐阅读《《《

1、性能测试学习笔记-场景设计

2、Web站点性能调优完全攻略

3、应用系统性能调优之性能分析

4、Windows监控——性能指标详解

6、性能测试的重要意义

7、软件性能测试的本质_致命版

8、性能分析流程及方法

9、性能测试流程

10、性能测试从需求分析开始

11、性能测试指标

12、双活数据中心揭秘之—DB2 PureScale

13、循序渐进学习oracle

14、软件项目管理中的十个误区

15、功能测试方法总结及常见面试问题

16、MQ来账通道及队列配置

17、Linux命令大全整理

18、JMeter工具简单介绍

19、性能瓶颈分析方法

20、性能测试-LoadRunner操作流程之一

22、性能测试-LoadRunner操作流程之二

23、性能测试-LoadRunner操作流程之三

24、性能测试-脚本编写之一

25、性能测试-脚本编写之二

26、性能测试-脚本编写之三

27、性能测试-性能调优之一

28、性能测试-性能调优之二

0dfea14c5a1310d6550127abf9152552.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值