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.