利用 shell script 自動餵待測程式測試資料的方法
拖了一個禮拜才著手進行撰寫
我想利用 Linux shell 自動測試的這篇文章可以延伸出非常多有趣的主題
經過 培任 的推薦
決定利用資料流控制 < 和 txt 檔來作為自動餵入測試資料的工具
自動餵入測試資料指令方法
方法1
有一種方法如下,在 cmd 裡面先輸入要執行的程式的指令
配合輸出資料重新導向的 < 操作符號(output redirection operator)
後面接上要輸入的測試資料檔案,就像下方的程式碼[1]
./程式執行檔 < 測試資料.txt
(若在檔案資料夾下,可以不加 ./ )
方法2
利用 cat 讀取資料[2][4],再利用 pipe 指令 | 把 前面指令的 stdout 資料轉到|後面指令的 stdin裡
(若在檔案資料夾下,可以不加 ./ )
以上兩個指令,程式就會自動把測試資料輸入,並且自動執行,並把輸出結果列印在cmd裡
/ 就是指資料夾,兩個合在一起就變成現在這個資料夾底
例如 ./ file1 就是執行目前所在資料夾底下的 file 1
cat 指令是Linxu中相當常用的指令,它含有以下幾個功能
1. 讀檔
純讀檔
在 cmd 中輸入
並按下Enter後,就會以全文字模式(all tex mode)印出檔案內容
讀檔並把資料寫入別的檔案
將 file 1 的內容讀出來,並寫入file 2
2. 連鎖(同時以字串顯示內容)
同時以全文字方式顯示多個檔案的內容
當然也可以多個檔案開起來之後寫入同一份檔案中
關於輸出重新導向的操作符號,> 不是一個便當吃不夠不會吃兩個的問題
如果在cmd裡面輸入
那如果再加入一個 >
並把 ls 的內容,寫入到 ls.txt 原始檔案內容之後
個人心得
之前不知道Linux環境下可以用這種方式輸入測試資料
還傻傻的一筆一筆輸入測資
有時候不小心手誤,輸入錯誤還需要暫停程式並且重新輸入
回頭仔細想來,當下貪圖一時的方便其實並沒有節省多少時間
反而在未來替自己挖了一個消耗時間的大坑還不自知
知識就是力量這句格言在今天的情境下完美的體現出來
方法2
利用 cat 讀取資料[2][4],再利用 pipe 指令 | 把 前面指令的 stdout 資料轉到|後面指令的 stdin裡
cat 測試資料 | ./程式執行檔
(若在檔案資料夾下,可以不加 ./ )
以上兩個指令,程式就會自動把測試資料輸入,並且自動執行,並把輸出結果列印在cmd裡
說明
. / 的意思[3]
這邊的 . 是指現在所在的資料夾路徑位置,兩個點 .. 代表上一層的父目錄/ 就是指資料夾,兩個合在一起就變成現在這個資料夾底
例如 ./ file1 就是執行目前所在資料夾底下的 file 1
cat 指令
cat 指令是Linxu中相當常用的指令,它含有以下幾個功能
1. 讀檔
純讀檔
在 cmd 中輸入
cat file1
並按下Enter後,就會以全文字模式(all tex mode)印出檔案內容
讀檔並把資料寫入別的檔案
cat file1 file2
將 file 1 的內容讀出來,並寫入file 2
2. 連鎖(同時以字串顯示內容)
同時以全文字方式顯示多個檔案的內容
cat file1 file2 ... filen
當然也可以多個檔案開起來之後寫入同一份檔案中
cat file1 file2 file3 > file4
I/O Redirection
> or >> ?關於輸出重新導向的操作符號,> 不是一個便當吃不夠不會吃兩個的問題
如果在cmd裡面輸入
ls > ls.txt是把 ls 的內容覆蓋過去ls.txt 原本的內容並且寫入進去
那如果再加入一個 >
ls >> ls.txt則是保留原始ls.txt
並把 ls 的內容,寫入到 ls.txt 原始檔案內容之後
個人心得
之前不知道Linux環境下可以用這種方式輸入測試資料
還傻傻的一筆一筆輸入測資
有時候不小心手誤,輸入錯誤還需要暫停程式並且重新輸入
回頭仔細想來,當下貪圖一時的方便其實並沒有節省多少時間
反而在未來替自己挖了一個消耗時間的大坑還不自知
知識就是力量這句格言在今天的情境下完美的體現出來
參考資料
1. bash shell script 程式設計2. The cat Command
3. What does “./” mean in linux shell?
4. 13 Basic Cat Command Examples in Linux
5. I/O Redirection
6. 輸入/輸出重導向(I/O Redirection)
沒有留言:
張貼留言