Запуск набора тестов с более чем миллионом тестовых примеров

У нас есть распределенная тестовая среда, в которой робот-удаленный сервер запускает множество других приложений и работает с ними в рамках теста. Тест, который я пытаюсь запустить, требует от меня выполнения более миллиона тестовых примеров в одном наборе. Проблема здесь в том, что когда pybot запускается, он блокирует 8 ГБ ОЗУ и приводит к снижению производительности. Через некоторое время замерзает.

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

Я не уверен, встречался ли кто-нибудь с таким сценарием. Буду признателен, если кто-нибудь придумает решение этой проблемы.

Дополнительная информация

Еще одна вещь, которая помогает решить эту проблему: можно ли вызвать ключевое слово из библиотеки (с состоянием), инициированной другим пакетом?

Могу ли я использовать получить экземпляр библиотеки при использовании RIDE? Я импортирую библиотеку из одного набора, а затем пытаюсь получить экземпляр библиотеки из другого набора. Это возможно?

Я получаю следующую ошибку:

AttributeError: удаленный экземпляр не имеет атрибута replace

В Suite 1 я делаю следующее:

Import Library    Remote    ${verifix_xmlrpc_url}    WITH NAME    Verifix
${lib}=    BuiltIn.Get Library Instance    Verifix
Set Global Variable    ${lib}

В люксе 2:

${lib}.remove messages    ${VenueNSDQ}

person Amol Topkar    schedule 16.05.2013    source источник
comment
Привет, Амол, добились ли ты до сих пор успехов? Честно говоря, это звучит довольно глупо, когда так много тестовых примеров связано в рамках набора тестов, я не могу представить, что можно понять набор как единое целое. Думаю, я бы посоветовал разделить набор тестов, как вы это делали, на логические единицы, чтобы избежать проблем. Вы пробовали делать то же самое с тегами? Еще одно предложение - использовать pabot после того, как вы разделили несколько наборов тестов. Просто будьте осторожны, если вам нужен какой-то общий ресурс для любых тестовых запусков.   -  person shicky    schedule 01.09.2015
comment
Миллион, серьезно? Сгенерированы ли тестовые примеры автоматически? Каков размер файла тестового случая? У вас есть какие-либо успехи с приведенными выше предложениями?   -  person Rao    schedule 07.09.2015
comment
@shicky, нет причин называть кого-то тупым ...   -  person Monkpit    schedule 01.10.2015
comment
@ Обезьяна Я не называл его глупым, на самом деле я пошел на все, чтобы попытаться помочь Амолу. Я сказал, что было бы глупо иметь миллион тестовых примеров в одном наборе тестов, это совершенно неуправляемо и вызывает проблемы, отсюда и проблемная ситуация, в которой оказался Амол. Я сомневаюсь, что Амол несет единоличную ответственность за размещение миллиона тестовых примеров в одном наборе, поскольку это проблема, которую пытается решить Амол, скорее всего, он унаследовал ее. Почему бы вам также не попытаться помочь, вместо того, чтобы пытаться создать конфликт там, где его нет? Учитывая количество положительных голосов, которое получил мой комментарий, очевидно, что другие люди согласны с этим мнением.   -  person shicky    schedule 01.10.2015
comment
@shicky: может быть не так уж и глупо иметь миллион тестовых случаев, если они генерируются автоматически. Возможно, у них есть большая матрица продуктов, которые необходимо протестировать на большой матрице входных и ожидаемых выходов, для которых они автоматически генерируют тестовые примеры. Перестановки легко достигают миллионов. Не зная, как эти тестовые примеры создавались и управлялись, было бы немного бессмысленно называть это глупым.   -  person Bryan Oakley    schedule 07.10.2015
comment
Достаточно честно, @BryanOakley, я преклоняюсь перед твоими знаниями и прошу прощения перед Амолом и всеми, кто оскорблен моими словами. Как было сказано ранее, я не собирался оскорблять, поскольку имел в виду ситуацию с тестовым примером и никоим образом не был направлен на Амола. Я по-прежнему считаю, что иметь хоть какой-то миллион тестовых примеров в пакете - очень-очень плохая идея, как подчеркивает Амол в своем вопросе. Я предложил вознаграждение за этот вопрос, провел собственное исследование и предложил несколько шагов, которые я бы предпринял, и не намного больше, чем это.   -  person shicky    schedule 07.10.2015


Ответы (2)


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

Обычно, когда программе требуется больше памяти от ОС, она берет его, но не может вернуть, пока не завершит работу. Вероятно, поэтому ваш процесс падает.

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

Надеюсь, это немного поможет.

person MikeEL    schedule 16.10.2015

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

С учетом сказанного: если вы собираетесь запускать огромные наборы данных или огромное количество программ, вам придется разбить то, что вы хотите сделать, чтобы оно соответствовало системе (системам), которую вы используете. Это первая часть.

Вторая часть заключается в том, что если вы хотите общаться между программами с другими программами или системами, вам необходимо настроить какой-то тип общего использования памяти. Я знаю, что в PHP есть такая вещь, поэтому я должен предположить, что в Python тоже есть такая вещь. Вы настраиваете общую область памяти, а затем отправляете информацию туда и обратно между различными программами. Обычно используются токены в той или иной форме для идентификации каждой программы и / или системы. Таким образом, вы можете настроить все так, чтобы после завершения одного набора тестов он мог сказать, что начинается следующий набор, и, таким образом, не захватил или не остановил вашу систему.

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

Если вы используете Windows / ОС, я бы посоветовал взглянуть на AutoIt. AutoIt может легко контролировать работу программы и запускать новую задачу после завершения старой. Он также позволяет вам полностью контролировать как вашу систему, так и удаленную систему и был разработан, чтобы помочь автоматизировать такие задачи, как та, которую вы пытаетесь выполнить. Я обнаружил (экспериментируя), что AutoIt также можно использовать с системами Unix / Linux, такими как Mac и другие. Хотя только тогда у вас есть команды, которые вы отправляете, а не доступ к функциям Windows.

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

person Mark Manning    schedule 13.10.2015