命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()
》》》推薦閱讀《《《
1、性能測試學習筆記-場景設計
2、性能測試的重要意義
3、性能分析流程及方法
4、應用系統(tǒng)性能調優(yōu)之性能分析
在LoadRunner中執(zhí)行命令行程序之:popen()取代system()
??? 我想大家應該都知道在LoadRunner可以使用函數(shù)system()來調用系統(tǒng)指令,結果同在批處理里執(zhí)行一樣。
??? 但是system()有個缺陷:無法獲取命令的返回結果。
??? 也許你可以用`echo command > file`將結果輸出到文件,然后再讀出來。多痛苦的一件事啊!當虛擬用戶多的時候,你還得考慮重復寫同一個文件存在的風險。或是將文件名進行參數(shù)化以保證不同相同的文件,但這樣又加大了IO的負載。
??? 實際上有更好的解決辦法:使用popen()
??? popen()用法上類似于fopen(),但不需要打開文件,直接讀取數(shù)據(jù)流。全內存操作,不需要考慮文件覆蓋,更不存在磁盤IO。
??? 舉例如下:
#define BUFFER_SIZE 10240 // 初始給10KB
Action(){?
??? long fp; // 流的指針?
??? int count; // 流的長度?
??? char buffer[BUFFER_SIZE]; // 給輸出分配內存空間?
??? /*?
???? * 下來我們來獲取當前系統(tǒng)的用戶名稱?
???? */?
??? fp = popen("echo %USERDOMAIN%", "r");
??? if (fp == NULL) {?
??????? lr_error_message("命令執(zhí)行失敗");?
??????? return -1;?
??? }?
??? count = fread(buffer, sizeof(char), BUFFER_SIZE, fp); // 讀取返回數(shù)據(jù)?
??? 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]; // 用于保存參數(shù)名稱?
??? int i;?
??? /*?
???? * 顯示已安裝設備驅動程序列表?
???? */?
??? fp = popen("DRIVERQUERY", "r");?
??? if (fp == NULL) {?
??????? lr_error_message("命令執(zhí)行失敗");?
??????? 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站點性能調優(yōu)完全攻略
3、應用系統(tǒng)性能調優(yōu)之性能分析
4、Windows監(jiān)控——性能指標詳解
6、性能測試的重要意義
7、軟件性能測試的本質_致命版
8、性能分析流程及方法
9、性能測試流程
10、性能測試從需求分析開始
11、性能測試指標
12、雙活數(shù)據(jù)中心揭秘之—DB2 PureScale
13、循序漸進學習oracle
14、軟件項目管理中的十個誤區(qū)
15、功能測試方法總結及常見面試問題
16、MQ來賬通道及隊列配置
17、Linux命令大全整理
18、JMeter工具簡單介紹
19、性能瓶頸分析方法
20、性能測試-LoadRunner操作流程之一
22、性能測試-LoadRunner操作流程之二
23、性能測試-LoadRunner操作流程之三
24、性能測試-腳本編寫之一
25、性能測試-腳本編寫之二
26、性能測試-腳本編寫之三
27、性能測試-性能調優(yōu)之一
28、性能測試-性能調優(yōu)之二
總結
以上是生活随笔為你收集整理的命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钉钉如何调整组织架构_阿里调整组织架构:
- 下一篇: 好看的按钮html,html-好看的CS