Ну, это зависит от того, насколько вы хотите изменить структуру вашего текущего файла / тестов. Поскольку у вас есть одиночные переменные ${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 для следующего подхода:
- создать файл ресурсов с информацией для входа на все машины, на которых я хочу запустить эти тесты. Если бы это могло быть что-то вроде этого:
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) файлах, что мне лично не нравится.