2016-04-06 4 views
2

У меня есть несколько тестов на задержку (в основном модульные тесты), которые проверяют конкретные API-интерфейсы сервера, и я должен точно знать, сколько времени требуется от запроса на ответ. проблема заключается в том, что перед вызовом теста я должен выполнить некоторую инициализацию данных (для каждого тестового прогона, поэтому, если я выполняю тест на задержку, который выполняется 100 раз, данные также должны быть инициализированы 100 раз), что занимает некоторое время, но Я не хочу считать это.Исключить время инициализации теста в длительности тестового прогона в C#

Существует два способа инициализации данных: [MethodInitialization] и [ClassInitialization].

MethodInitialization - inits данных перед каждым запуском, но когда тест закончен, его продолжительность = время инициализации теста + тестового прогона

ClassInitialization - inits данных только один раз (который не работает для меня), но продолжительность теста = тест run

Я знаю о секундомере, но будет очень больно использовать, поскольку я также получаю данные от AppInsights и хотел бы автоматизировать его как можно больше, и если бы я мог получить четкие результаты после простого запуска, быть просто здорово.

Есть ли способ инициализировать тестовые данные перед каждым испытанием, но исключить его продолжительность?

UPD 1: Я также попытался создать свой пользовательский атрибут, так как есть способ сделать некоторые действия в его конструкторе, но даже когда я запускаю тест 10 раз, конструктор атрибутов вызывается только один раз.

+0

Если целью вашего теста является утверждение о том, что ваши API остаются в пределах определенного порога задержки, я могу думать о таком механизме лучше, чем секундомер, чтобы измерить задержку, после чего вы можете сделать требуемое утверждение. Решение, с которым я столкнулся в http://stackoverflow.com/questions/28334337/is-there-a-way-to-calculate-elapsed-time-for-test-methods-ignoring-time-spent-in, зависит от теста работает в MSTest/VSTest. Это то, что вы используете для запуска тестов? – kbrimington

ответ

0

Я думаю, вам нужен профессиональный инструмент, такой как ANTS Performance Profiler. Он будет захватывать каждый отдельный шаг вашей рутины (класс или метод), и вы можете установить «вехи» и отбросить других.

Но я думаю о том, что вы упомянули выше о времени МЕТОДА ... Я думаю, что это правильный способ сделать это, поскольку вы не можете отказаться от этого шага в своей рутине.

Если я ваш клиент, и ваша подпрограмма потребляет много времени во время загрузки данных, но работает очень быстро, я буду иметь представление о том, что я все время думаю о производительности. Я не буду отделять вашу рутину в двух модулях: ее подготовке и ее исполнении.

Надеюсь, я помог вам каким-то образом. Удачи.

+0

Спасибо за ваш ответ, Дэвид. я не могу использовать ANTS Performance Profiler, как его для решений ASP.Net (насколько я могу сказать), но то, что у меня есть, - это просто сервер с множеством API REST. Также это тот случай, когда подсчет времени инициализации данных не является опцией, так как он использует другой API с того же сервера, который должен быть протестирован отдельно. – zdebyman

+0

Хммм .... Итак, я думаю, ваш единственный уникальный вариант - это работа с секундомером и уловкой результаты в СПИСОК, после того, как весь процесс запуска, отправьте его через RESPONSE, чтобы увидеть результаты ... –

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