Как запустить несколько тестов поведения + Python одновременно без ошибок? - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть веб-приложение на python, которое использует поведение для поведенческого тестирования.У меня есть 5 * .feature файлов, каждый из которых запускается по несколько минут, когда я запускаю их как локально, так и на нашем сервере сборки Jenkins.Я хотел бы запустить пять файлов параллельно, а не последовательно, чтобы сэкономить время.Я могу сделать это локально, но не на моем сервере сборки.Вот подробности:

Локально работает в Windows:

  • Я могу запустить все 5 файлов в отдельных командных окнах, используя эти команды:
    • behave.exe --include "file_01.feature"
    • behave.exe --include "file_02.feature"
    • behave.exe --include "file_03.feature"
    • behave.exe --include "file_04.feature"
    • behave.exe --include "file_05.feature"
  • Я также могу запуститьскрипт Python, который запускает 5 отдельных процессов с помощью одной и той же команды.
  • Обе эти работы у меня не возникают

Сервер сборки работает в Linux:

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

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

  • Как ни странно, если я переставлю 5 * .feature файлов в 3, это сработает.Это не идеальное решение, хотя.Наше приложение растет.По мере роста у нас будет больше файлов функций.

Я подозреваю, что есть некоторые общие ресурсы между драйверами chrome во время тестов поведения, но я не уверен.Я не могу объяснить, почему это работает для меня локально, но не на моем сервере сборки.Также я не могу объяснить, почему работают 3 файла, а не 5.

Кто-нибудь видел подобные ошибки при попытке запустить несколько тестов поведения одновременно?Или ты знаешь, что я должен искать?Мой проект достаточно большой, чтобы было трудно собрать хотя бы минимальный пример моей проблемы.Вот почему я не опубликовал код.Мне просто интересно, что я должен искать, потому что я в растерянности.

1 Ответ

0 голосов
/ 01 октября 2018

Это то, как я запускаю несколько функций параллельно.

from behave.__main__ import main as behave_main

@step(u'run in parallel "{feature}" "{scenario}"')
def step_impl(context, feature, scenario):
    t = threading.Thread(
        name='run test parallel',
        target=parallel_executor,
        args=[context, feature, scenario])
        #args=[context, 'parallel_actions.feature', 'Make Cab-Cab communication'])
    t.start()


def parallel_executor(context, feature_name, scenario):
    os.chdir(testenv.PARALLEACTIONS_PATH)
    behave_main('-i "{}" -n "{}" --no-capture --no-skipped'.format(feature_name, scenario))

И функция

Feature: testing parallel
  Scenario: parallel run
    When run in parallel "parallel_actions-1.feature" "Make Cab-Cab communication"
    And run in parallel "parallel_actions-1.feature" "Another Scenario"
    And run in parallel "another_parallel.feature" "Another Scenario 2"

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

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

...