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

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

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

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

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

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

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


person Tarun    schedule 17.04.2011    source источник
comment
Хочу добавить, насколько хорошо TestNG сочетается с тестом Selenium для всех указанных выше указателей. Хотя TestNG предназначен для java   -  person Tarun    schedule 17.04.2011
comment
Видел ли кто-нибудь этот пост - beust. ru / weblog / 2005/03/17 /   -  person Tarun    schedule 18.04.2011
comment
Не могли бы вы поделиться своим опытом в прошлом году?   -  person user247702    schedule 19.04.2012


Ответы (5)


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

Для получения дополнительной информации см .:

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

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

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

person manojlds    schedule 17.04.2011

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

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

person Katie Kilian    schedule 17.04.2011

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

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

person AutomatedTester    schedule 17.04.2011
comment
Видите ли вы, хотя и не совсем убеждены. логин / регистрация - это очень маленький пример, который может выполняться перед каждым методом тестирования (хотя я вижу, что это требует много времени, поскольку одна и та же операция выполняется снова и снова). Рассмотрим эти сценарии. Для университета существует процедура регистрации на курсы. Перед тем, как подать заявку на курс, студент должен пройти через 15 различных шагов, и невыполнение любого из них не позволит вам продолжить. Таким образом, эти шаги являются тестами сами по себе, а также тем, как поступить на курс после этих шагов. Вы по-прежнему предпочитаете сохранить все эти шаги в настройке? - person Tarun; 18.04.2011
comment
И чтобы добавить, будет ли этот код SetUp доступен в нескольких классах? Поскольку я обязан создавать разные классы, чтобы обеспечить модульность тестов - person Tarun; 19.04.2011

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

См. Один из ответов на этот вопрос:

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

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

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

person Ivo Grootjes    schedule 21.04.2011
comment
Да, TestNG действительно заботится о параллельном запуске зависимых тестов. Эти методы выполняются в разных потоках, но они сохраняют порядок - testng.org/doc /documentation-main.html#parallel-running. Моя самая большая проблема - это заказ теста для интеграционных тестов. Мне нужно создать учетную запись в нескольких системах, затем перейти в одну систему и проверить ее. Если создание учетной записи само по себе не удается, я бы не стал продолжать выполнение дополнительных тестов. Думаю, я не могу объяснить разницу между ч / б модульным и интеграционным тестированием, и все они, похоже, поддерживают подход модульного тестирования. - person Tarun; 21.04.2011
comment
Я понимаю, о чем вы, думаю, лучше спросить Галлио / PNunit, если их фреймворк может / будет поддерживать те же функции, что и testng. В stackoverflow также есть теги pnunit, mbunit, gallio, которыми вы могли бы отметить свой вопрос? - person Ivo Grootjes; 21.04.2011

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

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

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

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

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

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

person PPC    schedule 20.02.2012