-
只測試通過車輛查詢的一種場景,不考慮二次識別。
-
測試基礎數據為近一年的數據( 76 億左右)。測試的時段選擇(一周、半月、一月、三月、半年、一年及全部數據)
-
測試的卡口選擇全部 。
-
測試的號牌號碼為此前根據過車數量獲取的前 100000 條數據中隨機抽取,另外, 90% 的查詢為有號牌查詢, 10% 的查詢為無號牌查詢。
-
未對車道和方向進行過濾。
-
測試時沒有同時進行插入操作。
1 { 2 "query": { 3 "bool": { 4 "must": [ 5 { 6 "range": { 7 "t_pass_data.insertTime": { 8 "from": "2016-09-13T00:20:44.000Z", 9 "to": "2016-09-14T00:20:44.000Z" 10 } 11 } 12 } 13 ], 14 "must_not": [], 15 "should": [] 16 } 17 }, 18 "filter": { 19 "bool": { 20 "must": [ 21 { 22 "term": { 23 "t_pass_data.plateNumNond": "魯B8070K" 24 } 25 } 26 ] 27 } 28 }, 29 "from": 0, 30 "size": 10, 31 "sort": [ 32 { 33 "snapTime": { 34 "order": "desc" 35 } 36 } 37 ], 38 "facets": {} 39 }
而對於時間的隨機,因為對於loadrunner中的日期函數並不了解,所以在度娘中輸入“loadrunner 日期”進行查詢,幸運的是第一篇文章就出現了有價值的信息(http://www.cnblogs.com/qmfsun/p/4563703.html) ,這里面提到了一個函數lr_save_datetime。到這里還不確定該函數是否可用,因為從文章中看來它取的是一個特定的時間點,而非我想要的一個時間段。 為了得到更多的信息,我查了一下LR的幫助文檔,得到的信息如下:
In the following example, lr_save_datetime retrieves tomorrow's date. lr_save_datetime("Tomorrow is %B %d %Y", DATE_NOW + ONE_DAY, "next"); lr_output_message(lr_eval_string("{next}")); If today is January 7th, 1999, these lines will return the message: Tomorrow is January 08 1999.
信息還是不夠, 又找度娘問了一下這個函數的用法,找到了這一篇:http://www.cnblogs.com/qmfsun/p/4561705.html 。
這文章里有這樣一句話: lr_save_datetime將當前日期和時間,或具有指定偏移的日期和時間保存在參數中。看到這里,我明白問題已經解決了一半了,即如果定義了一個“開始時間”,可以使用這個函數偏移量的設置方法得到一個結束時間。那么怎么得到開始時間呢?並且讓它是在一年內隨機的一個時間點?
剛開始我想的是兩條路:第一條是定義幾個隨機數字,然后組合成日期時間的格式,這種方法后來因為沒找到怎么組合而放棄; 第二條路是利用
lr_save_datetime(const char *format, int offset, const char *name) 這個函數,只是把里面的 offset 用一個隨機的日期來替換(上面的兩個鏈接中,這個offset用的都是DATE_NOW),后來也因為沒找到替換的對象而失敗。。。這個問題糾結了一下午,后來在吃飯的時候忽然靈光一閃想到了解決方法, 同時也對自己半下午的努力苦笑連連——只要在這個函數中,用DATE_NOW 減去一個隨機數字不就行了嘛,就這么簡單竟然讓我苦惱了半下午,深深的對自己無語。。。
1 int mon,day,hour; //定義時間變量 2 mon=atoi( lr_eval_string("<mon>"));//0-6 3 day=atoi( lr_eval_string("<day>"));//1-30 4 hour=atoi( lr_eval_string("<hour>"));//1-24 5 //隨機取半年內的一個時間作為結束時間 6 lr_save_datetime("隨機結束時間: %Y-%m-%dT%H:%M:%S", DATE_NOW-mon*day*hour*(ONE_HOUR), "endDate"); 7 //計算出一周前時間作為開始時間 8 lr_save_datetime("隨機開始時間: %Y-%m-%dT%H:%M:%S", DATE_NOW-mon*day*hour*(ONE_HOUR)-15*ONE_DAY, "beginDate");
最終完整的腳本是:
1 Action() 2 { 3 //隨機半個月 的過車數據查詢,無車牌 ,全部卡口,不考慮車道、方向 4 int mon,day,hour; //定義時間變量 5 mon=atoi( lr_eval_string("<mon>"));//0-6 6 day=atoi( lr_eval_string("<day>"));//1-30 7 hour=atoi( lr_eval_string("<hour>"));//1-24 8 //隨機取半年內的一個時間作為結束時間 9 lr_save_datetime("隨機結束時間: %Y-%m-%dT%H:%M:%S", DATE_NOW-mon*day*hour*(ONE_HOUR), "endDate"); 10 //計算出一周前時間作為開始時間 11 lr_save_datetime("隨機開始時間: %Y-%m-%dT%H:%M:%S", DATE_NOW-mon*day*hour*(ONE_HOUR)-15*ONE_DAY, "beginDate"); 12 13 //lr_output_message("%s",lr_eval_string("<beginDate>")); //打印開始時間 14 //lr_output_message("%s",lr_eval_string("<endDate>")); //打印結束時間 15 16 17 lr_rendezvous("rendezvous");//插入集合點 18 19 lr_start_transaction("無車牌查詢"); //插入事務 20 21 22 web_reg_find("Text=dataSource", //插入檢查點 23 "Search=Body", 24 LAST ); 25 26 web_url("www.abc.com", //主節點為7和9, 數據節點27 27 28 29 "URL=http://IP:PORT/_search?{%22query%22:{%22bool%22:{%22must%22:[{%22range%22:{%22t_pass_data.insertTime%22:{%22from%22:%22<beginDate>.000Z%22,%22to%22:%22<endDate>.000Z%22}}}],%22must_not%22:[],%22should%22:[]}},%22filter%22:{%22bool%22:{%22must%22:[]}},%22from%22:0,%22size%22:10,%22sort%22:[{%22snapTime%22:{%22order%22:%22desc%22}}],%22facets%22:{}}", 30 31 "TargetFrame=", 32 33 //"TargetBrowser=Mercury Technologies", 34 35 "Resource=0", 36 37 "RecContentType=application/json; charset=UTF-8", 38 39 "Snapshot=t1.inf", 40 41 "Mode=HTML", 42 43 LAST ); 44 45 46 47 lr_end_transaction("無車牌查詢", LR_AUTO); 48 49 50 //打印出使用的車牌號碼 51 //lr_output_message( "using CAR #%s",lr_eval_string( "<CarNumber>" )); 52 return 0; 53 }
