NUnit плохой выбор для теста Selenium? - PullRequest
10 голосов
/ 17 апреля 2011

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

Я пишу тесты Selenium, используя NUnit. Поэтому я пытаюсь написать интеграционные тесты с использованием инфраструктуры модульного тестирования !!!

Чтобы привести пример интеграционных тестов (и это только один пример). Мне нужно создать действительную учетную запись, прежде чем приступить к другим тестам. Если создание учетной записи не удается, я бы хотел прервать выполнение всего теста.

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

  1. Ненужное дублирование / выполнение кода
  2. Что, если создание учетной записи приложения не работает, все мои тесты все равно будут пытаться создать учетную запись снова и снова, но не получится

Я склонен думать, что NUnit, возможно, не прав в тестах Selenium. Но если не Nunit, то что мне использовать?

Ответы [ 5 ]

2 голосов
/ 17 апреля 2011

Я постоянно запускаю Selenium с NUnit. Это зависит только от того, как вы пишете свои тесты. Чтобы избежать дублирования кода, я создаю библиотеку вспомогательных функций, которые выполняют общие функции, такие как вход или выход из моего сайта, которые другие тесты используют для перехода на страницу, которую они должны тестировать. (Я использую термин «библиотека» в широком смысле; на самом деле я не разделяю их на их собственный проект на C #.)

Вы правы в том, что если функция создания учетной записи нарушена, остальные тесты не пройдут. Но лично я не вижу в этом проблемы, поскольку цель модульных тестов - убедиться, что ваши изменения не имели непредвиденных последствий в других местах вашего проекта. Если создание аккаунта не получилось, ясно, что это влияет на многие вещи. То же самое, если мой метод входа в систему не работает: если вы не можете войти в систему, вы не можете получить что-либо на сайте. По сути, весь сайт сломан.

2 голосов
/ 18 апреля 2011

Если вам нужно создавать новые учетные записи в каждом тесте, то я бы выбрал, чтобы этот код был перенесен в ваш код SetUp. Если некоторые из ваших тестов не требуют входа, разбейте их на разные файлы.

Любые биты дублирования должны быть удалены, тестовый код должен быть таким же чистым и надежным, как и рабочий код. Разделение файлов с помощью различных тестов помогает поддерживать идею Одиночная ответственность .

2 голосов
/ 17 апреля 2011

Само Selenium Core поставляется с TestRunner, написанным на Javascript, и вы можете запускать свои тесты прямо из браузера.

Подробнее см .:

http://www.developerfusion.com/article/84484/light-up-your-development-with-selenium-tests/

Кроме того, использование Nunit и тестов, написанных на C #, намного проще в написании и обслуживании. Используете ли вы SetUp и TearDown при написании ваших тестов? Таким образом, вы можете избежать дублирования кода.

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

1 голос
/ 21 февраля 2012

Вам могут помочь два подхода, с проблемой, которую вы описываете как ответ на AutomatedTester:

Первый , NUnit 2.4.4 определяет SuiteAttribute , который позволяет вамзапускать тесты в нужном вам порядке.Очень удобно, но имеет серьезные ограничения: оно не совместимо с TestCaseAttribute .Это означает, что все ваши тесты должны запускаться только с помощью TestAttribute ;что очень раздражает, если вы нацелены на охват основанных на значениях граничных тестов (таким образом, несколько тестовых примеров, управляемых данными).Более подробная информация о http://www.nunit.org/index.php?p=suite&r=2.5.10

Другой подход - это подготовка базы данных интеграции, созданной специально для ваших тестовых случаев.Допустим, у вас есть 15-ступенчатый процесс регистрации: создайте запись о студенте и подтолкните ее к первому шагу, затем к другому студенту и продвиньте ее до второго шага и так далее.Сохраните вашу базу данных и восстановите ее как настройку тестового устройства.Затем протестируйте каждый шаг с другим учеником.

В большинстве случаев совершенно правильно проводить интеграционные тесты для разных записей для каждого шага, поскольку он обеспечивает одинаковое функциональное и кодовое покрытие и следует идее интеграциитестирование, потому что ваши записи в БД являются настоящими записями (созданными пользовательским интерфейсом со всеми недостатками, которые идут с пользовательским интерфейсом).

Конечно, требуется больше времени для запуска и места для хранения, потому что копии БД вам придется хранить.Если ваша система не может себе этого позволить, то, возможно, вы захотите взглянуть на первое решение.

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

1 голос
/ 21 апреля 2011

Вы также смотрели на PNunit?

Посмотрите на один из вопросов в этом вопросе:

Кто-нибудь нашел способ параллельного запуска тестов C # Selenium RC?

Я все еще не уверен на 100%, как TestNG будет работать с сеткой, предположим, у вас есть трехэтапный процесс регистрации, и вы делите это на 3 теста.Поможет ли вам TestNG с сеткой?Я полагаю, нет, или он обнаружит, что тест C должен иметь тесты A и B, запущенные в одном потоке?

Похоже, что PNunit может обеспечить способ распространения зависимых тестов на одну и ту же машину.Хотя это, вероятно, довольно сложно настроить.

...