1

Я создал Load Tests. Все мои нагрузочные тесты состоят из одного модульного теста. Я также создал LoadTest Plug-in и назначил его всем моим испытаниям нагрузок. Каждый модульный тест обновляет некоторые пользовательские счетчики производительности, которые я создаю в подключаемом модуле LoadTest (подробнее here) со следующим кодом.Как обновить счетчик производительности на удаленном ПК?

код плагином:

private void m_loadTest_LoadTestStarting(object sender, System.EventArgs e) 
{ 
    CounterCreationDataCollection counters = new CounterCreationDataCollection(); 
    counters.Add(new CounterCreationData("CustomCoumter", "Custom Coumter description", PerformanceCounterType.AverageCount64)); 

    PerformanceCounterCategory.Create("CustomCounterCategory", "Custom Performance Counters", PerformanceCounterCategoryType.MultiInstance, counters); 
} 

UnitTest код:

[TestClass] 
public class UnitTest1 
{ 
    PerformanceCounter customCounter; 

    [ClassInitialize] 
    public static void ClassInitialize(TestContext TestContext) 
    { 
     // Create the instances of the counters for the current test 
     customCounter= new PerformanceCounter("CustomCounterCategory", "CustomCoumter", "UnitTest1", false)); 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     // ... Testing 
     customCounter.Incerement(time); 
    } 
} 

Поскольку плагин работает в Test Controller категория пользовательского счетчика создается в ПК, где контроллер работает , Теперь я запускаю свои нагрузочные тесты в Test Rig, используя множество Test Agents. Когда единичный тест выполняется на компьютере, отличном от этого, где работает тестовый контроллер, счетчик не обновляется. Я думаю, что это происходит, потому что с моим кодом я обновляю счетчик на ПК, где выполняется тест, а не на ПК контроллера.

Как я могу обновить свой пользовательский счетчик на ПК контроллера? Нужно ли мне создавать экземпляр счетчика в моих модульных тестах по-другому?

ответ

2

Счетчики производительности обычно используются для контроля производительности компонентов, работающих локально на машине. perfmon затем может использоваться для контроля счетчика производительности для этой машины. Из того, что вы описываете, это именно то, что происходит.

Таким образом, вам нужно будет контролировать счетчик производительности на машинах-агентах (после установки там, конечно), чтобы получить данные о счетчике.

Я предполагаю, что этот счетчик каким-то образом измеряет, сколько времени проходит тест. Потому что, если вы измеряете тестируемую систему, то приращение счетчика производительности будет интегрировано в производственный код, который находится под тестированием.

Я не знаю, как увеличить счетчик производительности на удаленной машине, но это, похоже, против обычного patten. Однако существуют способы для read remote performance counters (например, от агентов-агентов). Я думаю, это было бы лучше всего в ваших обстоятельствах.

+0

Спасибо за ваш ответ. Я надеялся, если возможно, обновить счетчики на удаленной машине (контроллере), чтобы я мог легко видеть итоговые результаты счётчиков. В противном случае я должен изменить свою реализацию и самостоятельно вычислить итоговые результаты на основе экземпляров счетчиков для всех агентов. – Schaliasos

+0

@Schaliasos да, к сожалению, я не думаю, что это возможно (по крайней мере, C# API). Однако вы можете читать удаленно, а затем агрегировать цифры от каждого агента. –

0

Я сам столкнулся с этой проблемой и обнаружил, что то, что вы можете сделать в коде, - это настройка вызова удаленного исполняемого файла, который был предварительно установлен на компьютере. Поскольку он будет работать локально, он может изменить счетчик производительности.

Вы можете запустить процесс psExec или код WMI.

How to execute process on remote machine, in C#

Смежные вопросы