效能測試必知必會:Shell指令碼設計實踐指南

博為峰網校發表於2021-01-18

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章