針對httptest4net構建elasticsearch叢集壓力測試用例

smark發表於2014-09-05

        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

相關文章