E2E тестирование на C#. Как настроить порядок запуска тестов

Всем привет. Я автоматизирую тестирование одного сайта при помощи Selenium + SpecFlow(xUnit). К огромному сожалению Test Explorer запускает тесты в непонятном мне порядке. Как можно настроить порядок запуска тестов? Не обычных юнит-тестов, а именно bdd-тестов на русском языке, т.к. мне нужен именно end-to-end. Я знаю, что это проблема test runner’a, который я использую. Можно ли как-то настроить порядок запуска в test runner’е? Или использовать другой test runner, который это позволяет.

А можете сказать зачем вам нужен порядок в запуске тестов? Это плохая практика делать тесты зависимы от порядка запуска.

Мои E2E тесты нужны для корректного заполнения анкеты клиента для кредитного договора. Для начала нужно войти в систему, далее заполнить анкету по 5 шагам и отправить ее. В моем случае я не могу сначала заполнить, а потом войти в систему. В этом и суть, что меня не должно пускать, пока я не введу свою данные об учётной записи пользователя, который будет заполнять анкету.

У меня E2E UI тесты. Не юниты, которые я согласен должны быть независимыми.

UI тесты тоже должны быть независимыми. Для этого можно использовать API, DB, чтобы генерить нужные данные до запуска теста.

И всё же, что вам мешает вход в систему вынести в отдельный метод и вызывать его в каждом тесте первой строкой, в тестах где это необходимо?

Выносить вход в систему отдельным тестом, да ещё делать его как precondition для другого - это адский ад!

А по теме, если у вас не параллельные запуски, то NUnit имеет атрибут [Order], который применяется как к классам, так и к методам, и отвечает он как раз-таки за порядок запуска тестов.

2 лайка

Я прекрасно это понимаю. На сайте есть визард, который ведёт пользователя по определённым группам полей, которые ему нужно заполнить. Я не могу просто взять и запустить сначала 4 стэп, а потом 1 из этого визарда. В этом и суть, что он должен быть последовательным. С NUnit’ом пробовал, через Test Explorer самой Visual Studio он запускает в рандомном(либо не понятным мне порядке).

Если есть какой-то визард состоящий из N количества шагов, и у вас как вы говорите E2E - то зачем разбивать это на разные тесты?

Ну да ладно, это ваше дело.

Вы что, собираетесь тесты запускать из VS что ли? :astonished:
В таком случае вам надо смотреть на Ordered Test Set: Setting Up Your Test Run Sequence Using Ordered Tests | Microsoft Learn

Либо использовать Playlist

Окей, тогда какие варианты есть запуска? Кроме Visual Studio.

И да, у меня тесты BDD, написанные на русском языке с помощью SpecFlow. Таким Макаром нельзя настраивать Ordered Test List.

NUnit3-console, как вариант.

Да и к тому же, вы написали что вы пробовали NUnit.

Вы атрибут [Order] использовали? Он работает даже с Test Explorer.

Единственный нюанс, что любое изменение feature файла перегенерит тестовый класс, удалив оттуда все ручные изменения, и вам придётся постоянно туда писать руками [Order].

Да, я пробовал Order и он не помогает в порядке. Все равно запускаются в рандомном.

Покажите пример кода, пожалуйста, где Order не работает так, как вы ожидаете.

В этом и проблема, рассматриваю вариант просто перейти на другую платформу, либо JS, либо Java. Т.к. на проектах написанных на них с помощью оригинального Cucumber’a все отлично.

Сценарий

Реализация сценария

Помогло поставить order на feature-файл, а не просто на сценарий. Но! Это жуткий костыль.
Неужели никто не пишет обычные E2E тесты под .NET? У всех устоявшееся практика делать тесты максимально независимыми, но ведь здесь и теряется весь смысл Е2Е.

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

Feature-файл является partial class, поэтому вы можете создать другую часть этого класса и поставить [Order] там, он не будет перезаписываться при изменении внутренностей feature-файла. Для таких целей partial и был введён, это не костыль.

Практика делать независимыми тестами - единственно верная.
В своих тестах, как вы будете запускать их параллельно? Правильно, никак.

Будет у вас хотя бы 100-200 тестов, тогда вы уже начнёте понимать, что последовательные запуски - это непозволительно долгий процесс.

E2E не подразумевает собой, что его надо разбивать на несколько тестов.

Что вам мешает сделать один тест, который проверяет какой-то E2E сценарий?

1 лайк

О каком E2e идет речь если твои тесты зависимые. Разберись с понятием E2E…

Такая же ситуация. Решил, ставя для сценариев такие имена как:
A_A, A_B, A_C, etc. Таким образом тесты запускаются в определенном порядке.
Причина почему нужен определенный порядок - флоу сайта, пока не сделаешь одни действия, не будут доступны следующие. Но планирую сделать скрипты для базы, чтобы перед частью тестов заполнялись данные, чтобы хоть частично избежать зависимости.