嗯,这取决于您想要更改当前文件/测试的结构的程度。由于您有单个变量 ${HOST}、${ACCOUNT} 和 ${PASSWORD},并且从您的问题看来,您似乎没有迭代一些数据结构,在其中为多个不同的主机存储不同的登录信息,那么更直接的方法是运行它只是为了运行几个命令:
$ robot --variable HOST:host1 --variable ACCOUNT:a --variable PASSWORD:secret * && robot --variable HOST:host2 --variable ACCOUNT:a --variable PASSWORD *
编辑: 正如我在 cmets 中正确提醒的那样,执行上一个示例中的第二个命令将覆盖由第一个命令创建的输出,因此是一种更好的方法(到保留两次执行的日志)是这样的:
$ 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>。更多关于 here.
这种方法不需要更改您的测试/关键字文件,但如果您有很多机器来运行这些测试,它就不能很好地扩展。
我很可能会采用以下方法:
- 为我要运行这些测试的所有机器创建一个包含登录信息的资源文件。如果可能是这样的:
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) 文件中,我个人不喜欢这样。