如何使用通过变量文件传递的额外参数 - 机器人框架

6
在Robot Framework用户指南中,有一节描述了如何传递变量文件以及如果需要的话可能的变量。
例如:
pybot --variablefile taking_arguments.py:arg1:arg2
我的问题是,我能否在taking_arguments.py文件中稍后使用这些可能的变量arg1和arg2,如果可以的话,怎么做呢?
目前我有这个: pybot --variablefile taking_arguments.py:arg1:arg2 taking_arguments.py内容为: IP_PREFIX = arg1 但是会导致 NameError: name 'arg1' is not defined
2个回答

6

只有通过使用--variablefile filename.py:arg1:arg2语法在参数文件中使用变量的唯一方法是让您的变量文件实现函数 get_variables 。该函数将传递您在命令行上指定的参数,并必须返回一个包含变量名称和值的字典。

例如,考虑以下名为“variables.py”的变量文件:

def get_variables(arg1, arg2):
    variables = {"argument 1": arg1,
                 "argument 2": arg2,
                }
    return variables

这个文件创建了两个机器人变量,名为${argument 1}${argument 2}。这些变量的值将是传入的参数的值。您可以像这样使用此变量文件:

pybot --variablefile variables.py:one:two ...

在这种情况下,字符串"one"和"two"将作为两个参数传递给get_variables。然后,它们将与两个变量相关联,导致${argument 1}被设置为one,而${argument 2}被设置为two

当我尝试上面的例子时,收到了TypeError: get_variables() takes exactly 2 arguments (0 given)。这是我的设置:一个带有open browser和这两个参数${argument 1}${argument 2}的机器人文件。我还在Settings中调用.py文件,我的命令行执行看起来像这样pybot -v variables.py:username:password file.robot。我正在尝试使用此方法通过命令行传递用户名和密码到表单,但没有成功。 - Freddy
1
@Freddy 你可能使用了错误的参数。你应该使用小写的 -v 来定义单个变量。对于变量文件,请使用大写的 -V--variablefile - sjudǝʊ
@sjudǝʊ 谢谢您的澄清。实际上,我传递了错误的标志。使用-V可以按预期工作。然而,在日志中仍然收到以下错误Error in file '.../_robot/file.robot': Processing variable file '.../_robot/variables.py' failed: TypeError: get_variables() takes exactly 2 arguments (0 given),但是进程已经正常工作。不确定日志中的错误是否只是RF难以处理的问题。 - Freddy

2

我从未尝试在变量文件中传递初始值......所以我不确定这是否可能......

我可以提供一种替代方法......

您可以手动定义一些变量及其值,然后在pybot命令中使用。

pybot -variablefile taking_arguments.py -v IP_PREFIX:arg1 -v Varibale:Value 

如果我没记错的话,这些手动初始化的变量优先级比变量文件中的变量要高。因此,即使它们在变量文件中初始化,使用 -v 选项传递的值也会在测试用例中被使用。
希望这可以帮到您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接