.net core 使用ConcurrentTest元件對方法進行壓力測試

smark發表於2018-11-06

工欲善其事,必先利其器!在編寫服務中首先要有一個好的測試工具,在dontecore下效能測試有BenchmarkDotNet,只需要簡單的配置一下就可以對方法的效能進行詳細的測試。但有時候需要對不同併發下看其處理效率和延時統計檢視,如HTTP服務對應著大量的測試工具如ab,bombardier等等。由於找不到類似於測試HTTP服務的工具來測試程式碼用例,於時就有了ConcurrentTest這個元件的實現.通過ConcurrentTest元件可以執行不同的測試用例,並可以實時檢視具體的併發情況和延時分佈資料。以下介紹一下如何使用ConcurrentTest執行測試用例並統計執行結果

引用元件

Install-Package BeetleX.ConcurrentTest -Version 0.2.8

WebAPI服務

    [Route("api/[controller]")]
    [ApiController]
    public class EmployeeController : ControllerBase
    {
        [HttpGet("{count}")]
        public JsonResult Get(int count)
        {
            return new JsonResult(Employee.GetEmployees(count));
        }
        [HttpPost]
        public JsonResult Post([FromBody]Employee value)
        {
            return new JsonResult(value);
        }
    }

以上是一個簡單的dotnet core WebApi服務,主要是提供了僱員獲取和新增功能。

測試用例

 public class FastHttpClientTest
    {
        public FastHttpClientTest()
        {
            httpApiClient = new HttpApiClient(Host);
            clientApi = httpApiClient.CreateWebapi<IHttpClientApi>();
        }
        private string Host = "http://localhost:8007";
        private BeetleX.FastHttpApi.HttpApiClient httpApiClient;
        private IHttpClientApi clientApi;
        [CTestCase]
        public void AddEmployee()
        {
            clientApi.AddEmployee(Employee.GetEmployee());
        }
        [CTestCase]
        public void ListEmployees()
        {
            clientApi.ListEmployees(2);
        }
        [JsonFormater]
        public interface IHttpClientApi
        {
            [Get(Route = "api/employee/{count}")]
            List<Employee> ListEmployees(int count);
            [Post(Route = "api/employee")]
            Employee AddEmployee(Employee item);
        }
    }

元件使用起來和BenchmarkDotNet差不多,通過CTestCase來標記,具體測試方法通過介面定義。使用介面來描述WebApi請求是FastHttpApi,在這裡就不過多說明。

使用ConcurrentTest進行壓力測試

當測試用例編寫完成後,就可以使用ConcurrentTest對測試用例進行一個多執行緒併發測試;只需要簡單執行以下程式碼即可

CTester.RunTest<FastHttpClientTest>(10, 500000);

以上程式碼是對FastHttpClientTest的所有測試方法進行一個測試,測試資料是使用10個執行緒,進行500000萬次呼叫測試。

測試報表

在執行過程中元件會實時顯示併發情況和區間響應數量,最終會針對每個測試用例形成一個簡要的測試結果;具體結果如下:

***********************************************************************
* https://github.com/IKende/ConcurrentTest.git
* Copyright ? ikende.com 2018 email:henryfan@msn.com
* ServerGC:True
***********************************************************************
* AddEmployee test prepping completed
-----------------------------------------------------------------------
*                     [500000/500000]|threads:[10]
*       Success:[      0/s]|total:[      500000][min:23448/s  max:24561/s]
*         Error:[      0/s]|total:[           0][min:0/s  max:0/s]
-----------------------------------------------------------------------
*       0ms-0.1ms:[             ]    0.1ms-0.5ms:[      435,604]
*       0.5ms-1ms:[       59,863]        1ms-5ms:[        4,356]
*        5ms-10ms:[          142]      10ms-50ms:[           35]
*      50ms-100ms:[             ]   100ms-1000ms:[             ]
*   1000ms-5000ms:[             ] 5000ms-10000ms:[             ]
***********************************************************************

***********************************************************************
* ListEmployees test prepping completed
-----------------------------------------------------------------------
*                     [500000/500000]|threads:[10]
*       Success:[      0/s]|total:[      500000][min:28105/s  max:28829/s]
*         Error:[      0/s]|total:[           0][min:0/s  max:0/s]
-----------------------------------------------------------------------
*       0ms-0.1ms:[             ]    0.1ms-0.5ms:[      476,342]
*       0.5ms-1ms:[       20,641]        1ms-5ms:[        2,922]
*        5ms-10ms:[           80]      10ms-50ms:[           15]
*      50ms-100ms:[             ]   100ms-1000ms:[             ]
*   1000ms-5000ms:[             ] 5000ms-10000ms:[             ]
***********************************************************************

元件還具備什麼功能

現有的ConcurrentTest的功能還相對簡陋,不過應用者還是可以根據實際的需要來制定統計標籤,延時區間等相關統計;由於元件的程式碼也非常少只有幾個類,你也根據根據自己的需要來擴充套件它或在https://github.com/IKende/ConcurrentTest提上相應issues

相關文章