Фреймворк для автоматического планирования порядка выполнения автоматизированных регрессионных тестов?


В настоящее время я работаю над реализацией testsuite для относительно сложного приложения. Приложение основано на Java и Spring с веб-интерфейсом. Фронтенд-тесты также могут быть написаны на Java (с использованием Silk4J и их automation-client). На самом деле написание тестов-это не проблема, это легкая часть. Там, где он начинает усложняться, - это порядок, в котором могут выполняться отдельные тесты.

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

То, что я ищу,-это платформа тестирования, в которой каждый тест может каким-то образом определить свои требования и какую службу он тестирует/предоставляет (тест функции create-user-может фактически создавать пользователей ... по крайней мере, так должно быть). Теперь я не хочу жестко кодировать, какой тест выполняется с какими данными и в каком порядке, потому что чрезвычайно сложно определить порядок и изменения в тесте. применение сделало бы его необходимым для полного рефакторинга тестов.

Например, мой "create-user-test" создает пользователей как побочный эффект фактической проверки правильности создания пользователей. Для меня не имеет значения, тестируется ли эта функциональность с помощью userA, userB или userC, просто пока она тестируется. Если сейчас у меня еще одно испытание "создать учетную запись-тест", что требует от пользователя, который только пользователю sattisfies, тест системы, должен знать, "Ах ... создать учетную запись-тест должен пользователю, что еще не был создан, но передав userC в мой "create-user-test", это создаст его. Так, в последнем исполнении он работает "создать пользователя-тест" с пользователю, прежде чем "создать учетную запись-тест" и таким образом использует побочный эффект "создать пользователя-тест" для создания государства нужен "создать учетную запись-тест".

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

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

Теперь я надеюсь, что кто-то здесь проведет меня к инструменту или скажет мне, почему это это совершенно плохая идея. Ответ: "Привет ... великая идея ... такого еще никто не создавал" ... конечно, это резко убило бы мое время после работы, потому что в этом случае я бы начал разрабатывать такой инструмент; -)

Крис

2 4

2 ответа:

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

Но вы не проводите модульное тестирование, поэтому попытка использовать jUnit приведет к конфликтам между тем, что вы пытаетесь достичь, и тем, для чего разработчики инструмента разработали jUnit...

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

Тестовая платформа, такая как Robotframework, позволяет указать порядок выполнения тестов. Это, вероятно, больше подходит для того, чего вы пытаетесь достичь.

Но будет всегда есть какая-то работа, которую нужно сделать, чтобы настроить свою среду перед тестированием. Обычно я собираю вместе тесты, требующие определенной конфигурации или набора данных. Затем я выполняю эти шаги непосредственно перед выполнением этого набора тестов. Это сокращает необходимость выполнять настройку и настройку данных перед каждым тестом. Но это также уменьшает сложность, так что это управляемо.

Мы используем TestNG с Silk4J для создания последовательных регрессионных тестов (некоторые тесты длятся всего 10 минут, а некоторые-более 12 часов). Все тесты выполняются в определенном порядке - и некоторые тесты запускают "пропустить все оставшиеся тесты", когда происходит сверхкритическая ошибка.