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

csharp
bdd
specflow
execution
webdriver
visual-studio
e2e
Теги: #<Tag:0x00007fedc74b0ea8> #<Tag:0x00007fedc74b0cf0> #<Tag:0x00007fedc74b0b88> #<Tag:0x00007fedc74b09d0> #<Tag:0x00007fedc74b0868> #<Tag:0x00007fedc74b0660> #<Tag:0x00007fedc74b04d0>

(Никита Масловский) #1

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


(Oleksii Ihnatiuk) #2

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


(Никита Масловский) #3

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


(Никита Масловский) #4

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


(Alexandr D ) #5

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

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

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

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


(Никита Масловский) #6

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


(Alexandr D ) #7

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

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

Вы что, собираетесь тесты запускать из VS что ли? :astonished:
В таком случае вам надо смотреть на Ordered Test Set: https://msdn.microsoft.com/en-us/library/dd286704.aspx


(Alexandr D ) #8

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


(Никита Масловский) #9

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


(Никита Масловский) #10

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


(Alexandr D ) #11

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

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

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

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


(Никита Масловский) #12

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


(Alexandr D ) #13

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


(Никита Масловский) #14

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


(Никита Масловский) #15

Сценарий

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


(Никита Масловский) #16

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


(Никита Масловский) #17

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


(Alexandr D ) #18

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

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

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

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

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


(Kirill Degtyarev) #20

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


(Valentin G ) #22

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