RobotFramework, создать несколько экземпляров для «запуска» - PullRequest
0 голосов
/ 07 июня 2019

У меня около 50 файлов «роботов», и я хочу запустить 4 файла роботов параллельно (используя многопоточность). Если один файл заканчивается, он должен выбрать следующий. Я использую следующий тип кода здесь.

from robot import run
myarray= [file1, file2, file3....file50]

for f in myarry: 
       SOME LOGIC WHICH HOLDS THE LOOP TILL FILE COUNT IS 4
       func1(f)

def func1(file)
     outputlogFile = open(fname , 'w')
     run(file, outputdir=reportdir, stdout=outputlogFile)

Проблемы, с которыми я сталкиваюсь: 1. Все outout записано только в одном файле 2. Это не создание журнала и результата 3. И output.xml не генерируется должным образом.

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

что-то вроде instance = robot.run ()

Ответы [ 2 ]

1 голос
/ 09 июня 2019

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

Также стоит упомянуть, что в ней даже есть библиотека (PaBotLib), которая позволяет вам реализовывать «блокировки» в ваших тестах, для случаев, когда у вас есть действия, которые не «поточнобезопасны»

0 голосов
/ 10 июня 2019

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

import collections
from robot import run
import os
import threading


def runConcurrent(dq):
    suit = dq.pop()
    if len(dq) != 0:
        os.mkdir(suit)
        run(suit,
            outputdir=suit
        )
        runConcurrent(dq)
    else:
        return 0

if __name__ == "__main__":
    all_suits = collections.deque(["file1.robot", "file2.robot", "file3.robot", "file4.robot"])
    t1 = threading.Thread(target=runConcurrent, args=(all_suits,))
    t2 = threading.Thread(target=runConcurrent, args=(all_suits,))
    t3 = threading.Thread(target=runConcurrent, args=(all_suits,))
    t4 = threading.Thread(target=runConcurrent, args=(all_suits,))
    t1.start()
    t2.start()
    t3.start()
    t4.start()
    t1.join()
    t2.join()
    t3.join()
    t4.join()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...