效能測試必知必會:Shell指令碼設計實踐指南
Shell指令碼是最常見的一種處理文字檔案的的方法,可以實現檢查日誌檔案、讀取配置檔案、處理資料元素、執行Linux命令等等功能,Shell指令碼可以在實踐中實現對檔案批次處理的自動化,也可以控制Linux命令的計劃性執行。Shell指令碼在處理檔案時處理速度較快,且通常不受檔案大小的限制,這就打破了一些效能測試工具在處理大報文時卡頓甚至崩潰的瓶頸,在效能測試中極大簡化報文處理和命令執行的步驟。
在效能測試實踐中,處理的報文通常含有唯一標識,如報文標識號、流水號等,這樣的標識設計為資料庫表中的主鍵,以及作為交易是否重複的校驗要素。如下方的示例報文,在效能測試場景中,需要批次傳送該報文,為保證業務解析入庫正常並且業務不重複,需要替換其中的報文標識號MsgID和交易流水號TraNo。
----snip----
<CFX>
<HEAD>
<VER>1.0</VER>
<SRC>123456789012</SRC>
<DES>000000000001</DES>
<MsgNo>3001</MsgNo>
<MsgVer>1.0</MsgVer>
<MsgID>20201120110012385685</MsgID>
<MsgRef>20201120110012345678</MsgRef>
<WorkDate>20201120</WorkDate>
</HEAD>
<MSG>
<RealHead3001>
<TaxOrgCode>21100000000</TaxOrgCode>
<EntrustDate>20201120</EntrustDate>
<TraNo>10000162</TraNo>
</RealHead3001>
----snip----
首先根據報文處理方案要求,設計shell指令碼。在特定目錄下尋找報文模板,匹配報文標識號和交易流水號,並進行替換,生成新報文,再執行報文傳送命令,完成一次迴圈;進入下一次迴圈,同樣的方法完成一次傳送,直到結束迴圈。
#!/usr/bin/sh
STOP_FLG="stop"
bwid1=697000000000
bwid2=69700000
STOP_FLG是終止標識,在當前目錄中含有名為“stop”的檔案時,即為終止條件達成。bwid1和bwid2是宣告的兩個變數,用於在迴圈中自增保持不重複,同時替換報文標識號和交易流水號。
while true
do
{
if [ -f ${STOP_FLG} ]
then
exit 0
fi
下面開始一個迴圈體,由於採用建立終止標識的方法,所以採用無限迴圈。第8行至第11行加入判斷,如果在當前目錄下存在名為“stop”的檔案時,跳出該迴圈,所以要終止該指令碼執行時,使用vi編輯器或者touch命令在當前目錄下建立終止標識檔案即可。
加我VX:ww-51testing 回覆“測試”,同時領取限量軟體測試學習資料哦~~
let bwid1=bwid1+1
let bwid2=bwid2+1
msgid="20201120"$bwid1
trano=$bwid2
在迴圈中將bwid1和bwid2每次自增1,按照報文中的報文標識號格式,保留一部分固定字串,與bwid1拼接成完整的報文標識號字串,並賦值給變數msgid。將變數bwid2賦值給變數trano,代表交易流水號。下一次迴圈時,bwid1和bwid2都會自增1,保證msgid和trano不重複。
sed "s/20201120110012385685/$msgid/g" \
/home/tips/test/3001_test1120.xml \
| sed "s/10001180/$trano/g" >/home/tips/test/afile.xml
tipsputpc afile 1 r
}
done
使用sed編輯器可以根據命令處理報文中的資料,其工作方式為:
(1)一次從輸入中讀取一行資料;
(2)根據所提供的編輯器命令匹配資料;
(3)按照命令修改流中的資料;
(4)輸出新資料。命令將報文模板中報文標識號標籤<MsgID>20201120110012385685</MsgID>中的字串替換成msgid變數的內容,把交易流水號標籤<TraNo>10000162</TraNo>中的字串替換成trano變數的內容,生成新檔案,重新命名為afile,使用傳送命令將報文傳送出去。如果想控制傳送頻率,可在迴圈內加一行sleep命令。完整的指令碼如下。
#!/usr/bin/sh
STOP_FLG="stop1"
bwid1=697000000000
bwid2=69700000
while true
do
{
if [ -f ${STOP_FLG} ]
then
exit 0
fi
let bwid1=bwid1+1
let bwid2=bwid2+1
msgid="20201120"$bwid1
trano=$bwid2
sed "s/20201120110012385685/$msgid/g" \
/home/tips/test/3001_test1120.xml \
| sed "s/10001180/$trano/g" >/home/tips/test/afile.xml
tipsputpc afile 1 r
}
done
將該指令碼命名為send.sh,並給予其最高的許可權:
chmod 777 send.sh
執行指令碼:
./send.sh
當需要停止該指令碼的執行時,在指令碼所在目錄下建立名為stop的檔案,指令碼立刻停止執行。
touch stop
本文介紹了Shell指令碼在介面測試實踐中的應用,利用sed編輯器對報文進行批次自動化處理,實現了報文處理、傳送的全流程貫通,指令碼的執行、停止簡便易操作,極大簡化資料處理任務,在系統效能測試發壓時實現自動化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2750868/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux shell必知必會Linux
- 效能測試必備基礎知識(二)
- Shell指令碼程式設計規範與變數(shell指令碼必須要知道的規矩!)指令碼程式設計變數
- git必會必知Git
- Activity 必知必會
- Redis 必知必會Redis
- MySQL 必知必會MySql
- Python程式設計師必知必會的開發者工具Python程式設計師
- 優秀程式碼的必知必會(一)?
- ThreadLocal必知必會thread
- Linux必會必知Linux
- JSON 必知必會JSON
- Megaraid 必知必會AI
- notion database 必知必會Database
- 必知必會的設計原則——介面隔離原則
- 《MySQL必知必會》筆記事務、安全及效能等MySql筆記
- Shell指令碼 | 效能測試之啟動時間指令碼
- Redis 必知必會之 APIRedisAPI
- mysql必知必會筆記MySql筆記
- Linux 程式必知必會Linux
- HTTP 必知必會的那些HTTP
- 01-mysql必知必會MySql
- Mysql必知必會練習MySql
- webpack入門必知必會Web
- Java必知必會之socketJava
- IT運維技能必知必會!運維
- 高階bash/shell指令碼程式設計指南指令碼程式設計
- Shell指令碼最佳實踐指令碼
- 【必知必會的MySQL知識】①初探MySQLMySql
- 【必知必會的MySQL知識】②使用MySQLMySql
- 效能測試必備知識(9)- 深入理解“軟中斷”
- 效能測試必備知識(3)- 深入理解“平均負載”負載
- Redis 必知必會之持久化Redis持久化
- SQL必知必會筆記(上)SQL筆記
- SQL必知必會筆記(下)SQL筆記
- Java必知必會之註解Java
- Flutter 外掛使用必知必會Flutter
- MYSQL中的鎖必知必會MySql