visual test studio c# visual-studio-2010 unit-testing load-testing performancecounter

c# - load test web api visual studio 2017



VS 2010 Load Tests Results con contadores personalizados (3)

Soy nuevo en Load Testing (y en general, pruebas) con visual studio 2010 y estoy lidiando con varios problemas.

Mi pregunta es, ¿hay alguna manera posible, de agregar una variable de prueba personalizada en Load Test Results?

Tengo el siguiente UnitTest:

[TestMethod] public void Test() { Stopwatch testTimer = new Stopwatch(); testTimer.Start(); httpClient.SendRequest(); testTimer.Stop(); double requestDelay = testTimer.Elapsed.TotalSeconds; }

Muchas LoadTests utilizan esta Prueba de unidad y quiero agregar la variable requestDelay al resultado de la prueba de carga, de modo que pueda obtener valores mínimos, máximos y prom. Como todos los demás Contadores de prueba de carga (por ejemplo, tiempo de respuesta de prueba).

¿Es eso posible?


Usando el enlace del comentario de @Pritam Karmakar y los recorridos al final de mi publicación, finalmente logré encontrar una solución.

Primero creé un Plug-In de prueba de carga y utilicé el evento LoadTestStarting para crear mi categoría de contador personalizado y agregarle todos mis contadores:

void m_loadTest_LoadTestStarting(object sender, System.EventArgs e) { // Delete the category if already exists if (PerformanceCounterCategory.Exists("CustomCounterSet")) { PerformanceCounterCategory.Delete("CustomCounterSet"); } //Create the Counters collection and add my custom counters CounterCreationDataCollection counters = new CounterCreationDataCollection(); counters.Add(new CounterCreationData(Counters.RequestDelayTime.ToString(), "Keeps the actual request delay time", PerformanceCounterType.AverageCount64)); // .... Add the rest counters // Create the custom counter category PerformanceCounterCategory.Create("CustomCounterSet", "Custom Performance Counters", PerformanceCounterCategoryType.MultiInstance, counters); }

Luego, en el editor LoadTest , hice clic con el botón derecho en Agent CounterSet y seleccioné Add Counters ... En la ventana Pick Performance Counters , elegí mi categoría de rendimiento y agregué mis contadores al CounterSet para que la prueba de carga recopile sus datos:

Finalmente, cada UnitTest crea instancias de los contadores en el método ClassInitialize y luego actualiza los contadores en el paso correcto:

[TestClass] public class UnitTest1 { PerformanceCounter RequestDelayTime; [ClassInitialize] public static void ClassInitialize(TestContext TestContext) { // Create the instances of the counters for the current test RequestDelaytime = new PerformanceCounter("CustomCounterSet", "RequestDelayTime", "UnitTest1", false)); // .... Add the rest counters instances } [TestCleanup] public void CleanUp() { RequestDelayTime.RawValue = 0; RequestDelayTime.EndInit(); RequestDelayTime.RemoveInstance(); RequestDelayTime.Dispose(); } [TestMethod] public void TestMethod1() { // ... Testing // update counters RequestDelayTime.Incerement(time); // ... Continue Testing } }

Campo de golf:


Creo que lo que realmente necesitas es usar:

[TestMethod] public void Test() { TestContext.BeginTimer("mytimer"); httpClient.SendRequest(); TestContext.EndTimer("mytimer"); }

Puede encontrar una buena documentación aquí .


Interesante pregunta. Nunca lo intenté, pero tengo una idea.

Crea 3 propiedades de nivel de clase de MAX, MIN y AVG. durante cada prueba manipular esos valores. Y luego escriba todos los valores finales una vez que la prueba de carga completa se ejecute a través del atributo de prueba Classcleanup o assemblycleanup. Tienes que ejecutar la prueba de carga durante 1-2 minutos y tienes que ver qué método de atributo se llama al final. A continuación, puede imprimir esos valores finales en un archivo plano en la unidad local a través de un editor de textos.