在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 -;
}
count = fread(buffer, sizeof(char), BUFFER_SIZE, fp); // 读取返回数据
if (feof(fp) == ) {
lr_error_message("请给流分配更多的内存空间,谢谢!");
return -;
}
if (ferror(fp)) {
lr_error_message ("流读取失败");
return -;
}
buffer[count] = NULL;
lr_output_message("Notify:当前用户: %s", buffer);
pclose(fp);
return ;
}

输出:

Running Vuser...
Starting iteration .
Starting action Action.
Action.c(): Notify:当前用户: higkoo
Ending action Action.
Ending iteration .
Ending Vuser...

逐行获取结果并逐行输出例子:

 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[]; // 用于保存参数名称
int i;
/*
* 显示已安装设备驱动程序列表
*/
fp = popen("DRIVERQUERY", "r");
if (fp == NULL) {
lr_error_message("命令执行失败");
return -;
}
count = fread(buffer, sizeof(char), BUFFER_SIZE, fp); // 拿返回结果
if (feof(fp) == ) {
lr_error_message("返回值过多,请加大流长度");
return -;
}
if (ferror(fp)) {
lr_error_message ("结果读取失败");
return -;
}
buffer[count] = NULL;
token = (char*) strtok(buffer, "\n"); // 按换行符分割
if (token == NULL) {
lr_error_message ("返回值里没有换行");
return -;
}
i = ;
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-, "output_count");
for (i=; i<=lr_paramarr_len("output"); i++) {// 把所有行都打出来
lr_output_message("设备信息: %s", lr_paramarr_idx("output", i));
}
pclose(fp);
return ;
}

LoadRunner中执行命令行的更多相关文章

  1. 【转载】在LoadRunner中执行命令行程序之:popen()取代system()

    我想大家应该都知道在LoadRunner可以使用函数system()来调用系统指令,结果同在批处理里执行一样. 但是system()有个缺陷:无法获取命令的返回结果. 也许你可以用`echo comm ...

  2. 在LoadRunner中执行命令行程序之:popen()取代system()

    我想大家应该都知道在LoadRunner可以使用函数system()来调用系统指令,结果同在批处理里执行一样. 但是system()有个缺陷:无法获取命令的返回结果. 也许你可以用`echo comm ...

  3. Android 在Android代码中执行命令行

    1.路径最好不要是自己拼写的路径/mnt/shell/emulated/0/wifidog.conf 最好是通过方法获取的路径,不然可能导致命令无效  (挂载点的原因) public static f ...

  4. 如何在 Inno Setup 中执行命令行的命令

    Pascal Scripting: Exec Prototype: function Exec(const Filename, Params, WorkingDir: String; const Sh ...

  5. 【转载】在LoadRunner向远程Linux/Unix执行命令行并收集性能数据

    前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...

  6. 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据

    前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”,当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对“在LoadRunner中执行命令行程序之:pope ...

  7. [转]Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

    转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...

  8. android程序中使用命令行及获得命令行执行后的内容

    在开发android项目中,需要在程序中使用命令行执行,获得命令行执行后的结果并做处理. 下面是自己写的一个小例子,供以后参考使用: public String android_command(){ ...

  9. 如何在sublime编辑器中,执行命令行脚本

    我有个愿意,在执行命令行时,不打开那个黑乎乎命令行窗口,如果编辑器内置支持就好了. 打开vs code 和 sublime,分别按快捷键 Ctrl + ·(tab键上面那个键),vs code可以提供 ...

随机推荐

  1. For-each Loop,Index++ Loop , Iterator 那个效率更高

    平时在写Java/C# 程序的时候,会写很多的Loop 语句,for() 及 Iterator loop 及Java 8 的foreach Loop, 这些Loop 那种效率最高呢?写个小程序测试一下 ...

  2. Java基础之进制转换

    1.十进制与二进制之间的转换 (1)十进制转二进制的方法:使用十进制的数据不断除以2,直到商为0为止,从下往上取余就是对应的二进制. (2)二进制转十进制:使用二进制的每一位乘以2的n次方,n从0开始 ...

  3. Understanding Delegated JavaScript Events

    While I ended up using a CSS-only implementation for this pen, I started by writing it mostly using ...

  4. LeetCode: 54. Spiral Matrix(Medium)

    1. 原题链接 https://leetcode.com/problems/spiral-matrix/description/ 2. 题目要求 给定一个二维整型数组,返回其螺旋顺序列表,例如: 最后 ...

  5. UItraIso 制作ubentu 系统失败

    设备忙,请退出所有正在运行的应用程序,按确定按钮重试. 解决方法: 不要使用UItraIso,不知道为什么一直不行.重启了电脑几次都不行.用Rufus吧 https://rufus.ie/ 注意: r ...

  6. 「日常训练&知识学习」树的分块(王室联邦,HYSBZ-1086)

    题意与分析 这题的题意就是树分块,更具体的看题目(中文题). 学习这一题是为了树的分块,为树上莫队做铺垫. 参考1:https://blog.csdn.net/LJH_KOQI/article/det ...

  7. jieba结巴分词

    pip install jieba安装jieba模块 如果网速比较慢,可以使用豆瓣的Python源:pip install -i https://pypi.douban.com/simple/ jie ...

  8. DirectX11与DirectX12在古墓丽影暗影中的表现

    最近在关注这两个图形API,因为感兴趣,也算是初学者. 以下内容仅供参考. 使用古墓丽影暗影游戏,分别对这两个进行比较,得出的结论如下图(此笔记本散热很差,更改散热应该比下图结果好些): 首先看可以很 ...

  9. tpo-08 C1 submit a document for graduation

    第 1 段 1.Listen to a conversation between a student and a registrar. 请听一段学生和老师的对话. 第 2 段 1.Hi, I'd li ...

  10. CodeForces - 913C(二进制)

    链接:CodeForces - 913C 题意:给出 n 瓶饮料的花费 C 数组,每瓶的体积是 2^(i-1) 升,求至少买 L 升的最少花费. 题解:二进制数的组合可以表示任何一个数.第 i 的饮料 ...