1

Я реализую систему автоматизации Selenium на основе огурца - JVM.Лучший способ обработки пакетных заданий в автоматизации селена

Один из рабочих процессов в webapps i test требует длительного ожидания, так что пакетное задание, которое запланировано так же часто, как каждые 3 минуты, запускается и создает идентификатор входа, который пользователь может использовать, для продолжения с рабочим процессом.

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

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

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

ответ

0

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

Test 1 
Test 2 
Test 3 

Но если вы реализуете Test 1 «правильно» это займет очень много времени, потому что он должен ждать тестируемой системы, чтобы сделать несколько длительных вещей, правильно?

Поэтому вы разделяете Test 1 в детали и запускать тесты, как это:

Test 1 (Part A) 
Test 2 
Test 3 
Test 1 (Part B) 

Так что ваша система испытуемого успевает закончить задачи, запускаемые Test 1 (Part A).

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

Моя рекомендация по этому сценарию заключается в том, чтобы оставить Test 1 атомарным, т. Е. Избегать расщепления его на две части, но все равно управлять остальной частью параллельно. Конечно, независимо от того, насколько это возможно, зависит от вашей среды и от того, как вы запускаете тесты, но это позволит вам иметь лучшую структуру ваших тестов плюс преимущество быстрого выполнения. Итак, вы закончили бы так:

Test 1 starts Test 2 starts 
Test 1 waits  Test 2 finishes 
Test 1 waits  Test 3 starts 
Test 1 runs  Test 3 finishes 
Test 1 finishes 
+0

Ваш ответ предполагает как минимум два потока. Мы реализовали параллельное выполнение функций, поэтому ваш ответ заключается в том, как мы это сделаем.Однако с одним потоком выполнения «плохой» способ, вероятно, лучше всего. – MikeJRamsey56

0

Я не уверен насчет запуска-> ожидания-> ожидания-> запуска. Он может работать для нескольких тестов и может плохо работать для сотен тестов, так как время ожидания будет больше. Даже если мы запускаем его в параллельном режиме, он будет потреблять некоторое время. Что, если мы будем ждать большего времени, принимая компоненты в одном потоке? Я думаю, что больше компонентов больше времени ожидания. Вам также может потребоваться рассмотрение тайм-аута системы, если вы ждете более длительного времени ...

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

Смежные вопросы