ES性能测试
-
只测试通过车辆查询的一种场景,不考虑二次识别。
-
测试基础数据为近一年的数据(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 }