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

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

代码

[Test("ES base")]
    public class ES_SearchUrlTester : IUrlTester
    {
       
        public ES_SearchUrlTester()
        {
          

        }
        public string Url
        {
            get;
            set;
        }


        static string[] urls = new string[] { 
            "http://192.168.20.156:9200/gindex/gindex/_search",
            "http://192.168.20.158:9200/gindex/gindex/_search",
            "http://192.168.20.160:9200/gindex/gindex/_search" };

        private static long mIndex = 0;

        private static List<string> mWords;

        protected static IList<string> Words()
        {

            if (mWords == null)
            {
                lock (typeof(ES_SearchUrlTester))
                {
                    if (mWords == null)
                    {
                        mWords = new List<string>();
                        using (System.IO.StreamReader reader = new StreamReader(@"D:\main.dic"))
                        {
                            string line;

                            while ((line = reader.ReadLine()) != null)
                            {
                                mWords.Add(line);
                            }
                        }
                    }
                }
            }
            return mWords;
        }
        /*
          {"query" : 
	{
  "bool" : {
    "should" : [ {
      "field" : {
        "title" : "#key"
      }
    }, {
      "field" : {
        "kw" : "#key"
      }
    } ]
  }
	},
from:0,
size:10
}
         */
        private static string GetSearchUrlWord()
        {
            IList<string> words= Words();
            System.Threading.Interlocked.Increment(ref mIndex);
            return Resource1.QueryString.Replace("#key", words[(int)(mIndex % words.Count)]); 
        }

        public System.Net.HttpWebRequest CreateRequest()
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(urls[mIndex%urls.Length]);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.KeepAlive = false;
            httpWebRequest.Method = "POST";
            string json = GetSearchUrlWord();
            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {

                streamWriter.Write(json);
                streamWriter.Flush();
            }
            return httpWebRequest;

        }

        public TestType Type
        {
            get
            {
                return TestType.POST;
            }
        }
    }

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

测试情况

个人站:www.ikende.com
个人开源项目github.com/IKende

elastic communication component for .net

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。