Используя ссылку из комментария @Pritam Karmakar и пошаговые руководства в конце моего поста, мне наконец удалось найти решение.
Сначала я создал Load Test Plug-In и использовал событие LoadTestStarting , чтобы создать свою категорию пользовательских счетчиков и добавить к ней все свои счетчики:
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);
}
Затем в редакторе LoadTest
я щелкнул правой кнопкой мыши на Agent CounterSet
и выбрал Добавить счетчики ... В окне Выбор счетчиков производительности я выбрал свою категорию производительности и добавил свои счетчики в CounterSet, чтобы нагрузочный тест собрал их данные:
Наконец, каждый UnitTest создает экземпляры счетчиков в методе ClassInitialize
, а затем обновляет счетчики на соответствующем шаге:
[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
}
}
Ссылки: