针对httptest4net构建elasticsearch集群压力测试用例

        httptest4net是可以自定义HTTP压力测试的工具,用户可以根据自己的情况编写测试用例加载到httptest4net中并运行测试。由于最近需要对elasticsearch搜索集群进行一个不同情况的测试,所以针对这个测试写了个简单的测试用例。

代码

  1  [Test("ES base")]
  2     public class ES_SearchUrlTester : IUrlTester
  3     {
  4      
  5         public ES_SearchUrlTester()
  6         {
  7           
  8 
  9         }
 10         public string Url
 11         {
 12             get;
 13             set;
 14         }
 15 
 16 
 17         static string[] urls = new string[] { 
 18             "http://192.168.20.156:9200/gindex/gindex/_search",
 19             "http://192.168.20.158:9200/gindex/gindex/_search",
 20             "http://192.168.20.160:9200/gindex/gindex/_search" };
 21 
 22         private static long mIndex = 0;
 23 
 24         private static List<string> mWords;
 25 
 26         protected static IList<string> Words()
 27         {
 28 
 29             if (mWords == null)
 30             {
 31                 lock (typeof(ES_SearchUrlTester))
 32                 {
 33                     if (mWords == null)
 34                     {
 35                         mWords = new List<string>();
 36                         using (System.IO.StreamReader reader = new StreamReader(@"D:\main.dic"))
 37                         {
 38                             string line;
 39 
 40                             while ((line = reader.ReadLine()) != null)
 41                             {
 42                                 mWords.Add(line);
 43                             }
 44                         }
 45                     }
 46                 }
 47             }
 48             return mWords;
 49         }
 50         /*
 51           {"query" : 
 52     {
 53   "bool" : {
 54     "should" : [ {
 55       "field" : {
 56         "title" : "#key"
 57       }
 58     }, {
 59       "field" : {
 60         "kw" : "#key"
 61       }
 62     } ]
 63   }
 64     },
 65 from:0,
 66 size:10
 67 }
 68          */
 69         private static string GetSearchUrlWord()
 70         {
 71             IList<string> words= Words();
 72             System.Threading.Interlocked.Increment(ref mIndex);
 73             return Resource1.QueryString.Replace("#key", words[(int)(mIndex % words.Count)]); 
 74         }
 75 
 76         public System.Net.HttpWebRequest CreateRequest()
 77         {
 78             var httpWebRequest = (HttpWebRequest)WebRequest.Create(urls[mIndex%urls.Length]);
 79             httpWebRequest.ContentType = "application/json";
 80             httpWebRequest.KeepAlive = false;
 81             httpWebRequest.Method = "POST";
 82             string json = GetSearchUrlWord();
 83             using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
 84             {
 85 
 86                 streamWriter.Write(json);
 87                 streamWriter.Flush();
 88             }
 89             return httpWebRequest;
 90 
 91         }
 92 
 93         public TestType Type
 94         {
 95             get
 96             {
 97                 return TestType.POST;
 98             }
 99         }
100     }

用例很简单根据节点和关键字构建不同请求的URL和JSON数据包即可完成。把上面代码编译在DLL后放到httptest4net的运行目录下即可以加载这用例并进行测试。

测试情况

 

下载httptest4net

posted @ 2014-09-05 12:22  beetlex  阅读(2608)  评论(0编辑  收藏  举报