Мы пишем приложение в MVC/C# на VS2013.с использованием тестового бегуна для тестов производительности сети
Мы используем веб-драйвер селена для тестов ui и написали рамки вокруг него, чтобы сделать процесс более декларативным и менее процедурным. Вот пример
[Test, Category("UITest")]
public void CanCreateMeasureSucceedWithOnlyRequiredFields()
{
ManageMeasureDto dto = new ManageMeasureDto()
{
Name = GetRandomString(10),
MeasureDataTypeId = MeasureDataTypeId.FreeText,
DefaultTarget = GetRandomString(10),
Description = GetRandomString(100)
};
new ManageScreenUITest<MeasureConfigurationController, ManageMeasureDto>(c => c.ManageMeasure(dto), WebDrivers).Execute(ManageScreenExpectedResult.SavedSuccessfullyMessage);
}
Метод Execute принимает значения в DTO и вызывает selenium.sendKeys и кучу других методов, чтобы фактически выполнить тест, представить форму, утверждают ответ содержит то, что мы хотим.
Мы довольны результатами этого фреймворка, но мне кажется, что что-то подобное можно было бы использовать для создания сценариев тестирования нагрузки.
IE, я мог бы провести еще одну реализацию оболочки пользовательского интерфейса, которая использовала HTTPWebRequest для отправки запросов на веб-сервер.
Оттуда я мог бы по существу «набрасываться» мои тесты, чтобы создать сценарий, например:
public void MeasureTestScenario()
{
CanListMeasures();
CanSearchMeasures();
measureId = CanCreateMeasure();
CanEditMeasure(measureId);
}
Пропавших кусок головоломки, как я бегу эти «сценарии» под нагрузкой? IE, я после тестового запуска, который может выполнить 1..N из этих тестов параллельной, надеюсь, что-то вроде таких, как Ramp up time, случайные ожидания между каждым сценарием и т. Д. В идеале количество параллельных тестов будет настраиваться при запуске время, т. е. порождает еще 5 тестовых потоков. Отчетность не является очень важной, поскольку я могу регистрировать время выполнения как часть веб-запроса.
Возможно, есть и другой подход, например, с помощью C# для управления более традиционным инструментом тестирования нагрузки?
Настоящим преимуществом этого метода является обработка более сложных экранов, то есть экрана, содержащей коллекции объектов. Я могу получить случайную родительскую запись из БД, использовать мой существующий код automapper для создания вложенного dto, иметь код для ходьбы, чтобы изменить случайные значения, а затем использовать мою тестовую среду для отправки значений dto в качестве веб-запроса. Гораздо проще, чем вручную кодировать скрипты JMeter. cheers, dave
Это не похоже на то, что подходит для модульного теста.Существует множество инструментов для загрузки теста на сайт, но Unit Testing следует использовать для тестирования наименьшего возможного устройства, чтобы быть уверенным, что он работает так, как ожидалось. –
Я абсолютно согласен, это не об модульном тестировании. У нас есть полная батарея модульных тестов, которые являются небольшими, сфокусированными и т. Д. У нас также есть тесты интеграции, тесты создания конфигурации и даже тесты на веб-интерфейс/UI, которые мы запускаем как тесты nUnit, некоторые из них - в nCrunch (для истинного устройства и некоторых интеграционных тестов), а некоторые используют тестовый бегун DXCore (для тестов UI). Для нас NUnit - это удобный способ выполнения кода и утверждения результатов для всех видов тестов. – Dave
NUnit может работать нормально, если ваши тесты регистрируют достаточно данных, чтобы вы могли извлечь информацию о производительности там. Если у вас есть хороший журнал, нетрудно написать парсер журнала, чтобы дать вам информацию о производительности для всех тестов, которые вы запускаете. – evanmcdonnal