NUnit плохой выбор для теста Selenium?

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

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

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

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

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

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

5 ответов

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

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

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

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

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

Для более подробной информации смотрите:

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

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

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

Ты тоже смотрел на PNunit?

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам