天天看點

Elasticsearch自定義腳本完成性能測試

2、腳本實作

#!/bin/sh

KEYWORDS_TXT="./keywords.txt"

cat /dev/null > ./rst.txt

echo "beginTime=`date`"

cat $KEYWORDS_TXT | while read line

do

echo "line=$line"

echo "curl -XGET

http://100.10.11.130:9200/shx_info_index/shx_info_type/_search

-d'

{

 \"query\" : {

 \"query_string\" : {

 \"default_field\" : \"company_name\",

 \"query\" : \"$line\"

 }

}' >> ./rst.txt 2>&1 & " >> ./sql.txt

icnt=$((icnt+1));

echo "icnt ="$icnt;

done;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

解讀:

1)以上腳本實作了對是以的字段的查詢操作;

2)每次的操作都是讀配置的;

3)未避免讀配置的時間,可将整個post請求操作先存儲到另一個腳本,再一起執行。

2、技術核心點小結

核心點一:

&的目的:實作并發測試,否則就是串行執行任務。

結果導出再執行即可。

核心點二:

時間差計算如下:

1)開始時間:

current=`date "+%Y-%m-%d %H:%M:%S"`

timeStamp=`date -d "$current" +%s`

beginTimeStamp=$((timeStamp*1000+`date "+%N"`/1000000)) #将current轉換為時間戳,精确到毫秒

#echo "beginTime=$currentTimeStamp"

2)結束時間及時間差(曆時時間):

wait

endTimeStamp=$((timeStamp*1000+`date "+%N"`/1000000)) #将current轉換為時間戳,精确到毫秒

#echo "endTime=$currentTimeStamp"

echo "endTime=`date`"

timeSpan=`expr $endTimeStamp - $beginTimeStamp` #時間戳求內插補點。

echo "100次并發測試總耗時=$timeSpan 毫秒"

核心點三:

wait [作業訓示或程序号]

1.等待作業号或者程序号制定的程序退出,傳回最後一個作業或程序的退出狀态狀态。如果沒有制定參數,則等待所有子程序的退出,其退出狀态為0.

2.如果是shell中等待使用wait,則不會等待調用函數中子任務。在函數中使用wait,則隻等待函數中啟動的背景子任務。

3.在shell中使用wait指令,相當于進階語言裡的多線程同步。