Фреймворк робота: как запустить все тестовые примеры несколько раз - PullRequest
0 голосов
/ 20 июня 2020

Я использую SSHLibrary для подключения к компьютеру и запуска тестовых примеров. Следующим образом:

*** Test Cases ***
Check CPU Temperature
    Check that the CPU temperature is less than ? °C    ${CPU tem}
Check CPU Usage
    Check if any application is using CPU more than ? percent    ${CPU usage percent}
Check TCP transmission
    Check TCP transmission > ? MBytes    ${tcp transmission}

*** Keywords ***
Open Connection & Login
    Open Connection    ${HOST}
    Login    ${ACCOUNT}    ${PASSWORD}
  
#(The following is omitted)

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

1 Ответ

3 голосов
/ 20 июня 2020

Ну, это зависит от того, насколько вы хотите изменить структуру вашего текущего файла / тестов. Поскольку у вас есть одиночные переменные ${HOST}, ${ACCOUNT} и ${PASSWORD}, и из вашего вопроса не видно, что вы перебираете некоторую структуру данных, в которой вы храните различную информацию для входа в систему для нескольких разных хостов, тогда более простой способ запустить это просто для запуска нескольких команд:

$ robot --variable HOST:host1 --variable ACCOUNT:a --variable PASSWORD:secret * && robot --variable HOST:host2 --variable ACCOUNT:a --variable PASSWORD *

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

$ robot --timestampoutput --output host1 --log host1 --report host1 --variable HOST:host1 --variable ACCOUNT:a --variable PASSWORD:secret * && robot --timestampoutput --output host2 --log host2 --report host2 --variable HOST:host2 --variable ACCOUNT:a --variable PASSWORD:secret *

Это создаст отдельные выходные данные для каждой команды в следующем формате: host{n}-{date}-{time}.

Поскольку это уже длинная команда, лучше использовать файл аргументов, содержащий все эти параметры командной строки, позже вы можете ссылаться только на этот файл из команды, например: $ robot --argumentfile <path_to_argument_file>. Подробнее об этом здесь .

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

Я бы, скорее всего, использовал go для следующего подхода:

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

Resources / machines.py

MACHINES = [
    {
        "host": "host1",
        "account" "a",
        "password": "secret"
    },
    {
        "host": "host2",
        "account" "b",
        "password": "secret"
    }
]
Я бы перебирал эти тестовые данные в каждом тестовом примере, вызывая ключевые слова с этими значениями, например:
*** Test Cases ***
Check Temperature
    FOR    ${machine}    IN    @{MACHINES}
        # you would need to assing values from the dict into ${host}, ${account},
        # and ${pwd} here, you want to check Collections library for this
        Check CPU Temperature    ${host}    ${account}    ${pwd}
    END

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

Другой способ сделать это - подход, основанный на данных:

*** Test Cases ***
Check Temperature
    [Template]    Check CPU Temperature
    host1    a    secret
    host2    a    secret
    host3    a    secret

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...