在 runtime/at 请求时间计算的变量值
Variable value calculated at runtime/at request time
我正在尝试找到一种方法来评估每次使用变量的值。这与 Robot Framework 的正常操作相反 - 变量在定义时设置。
考虑这个例子——一个 py 变量文件:
import random
MY_VAR = random.randint(1,100)
该变量将被设置为一个 int,然后在每次使用时保留它的值。因此在这个调用中使用时:
Log To Console Value ${MY VAR}, again ${MY VAR}
,将打印相同的数字。
我考虑过的:
- A keyword/method 计算 & returns 值,并在下一行使用它。不太可行,在我的用例中,这些变量被使用了数百次,这增加了样板和隐含知识 ("you must use the method before every usage!").
- 侦听器接口,
_start_suite
,或 case 或关键字 - 这是框架中最接近“构造函数”的; negatives - 在相应级别执行一次,增加运行时开销。
基本上,我需要一个 python 的 @property
装饰器(半)普通机器人框架变量,或者传递一个方法调用作为参数:)
您可以使用inline python evaluation 来执行变量中的函数。在下面的例子中,不同的随机数将被记录三次:
*** Test cases ***
Example
log ${{random.randint(1, 100)}}
log ${{random.randint(1, 100)}}
log ${{random.randint(1, 100)}}
如果调用是针对用户创建的方法(不在已安装的包中),则为 module_name.method_name()
。例如,如果模块 my_module.py
中有一个方法 my_method(param1)
,调用方法如下:
Log ${{my_modlue.my_method('arg')}}
如果目标是RF关键字,那就有点麻烦了——需要使用BuiltIn
class中的run_keyword()
方法。示例 - 调用关键字 My Keyword
:
Log ${{robot.libraries.BuiltIn.BuiltIn().run_keyword('argument1')}}
我正在尝试找到一种方法来评估每次使用变量的值。这与 Robot Framework 的正常操作相反 - 变量在定义时设置。
考虑这个例子——一个 py 变量文件:
import random
MY_VAR = random.randint(1,100)
该变量将被设置为一个 int,然后在每次使用时保留它的值。因此在这个调用中使用时:
Log To Console Value ${MY VAR}, again ${MY VAR}
,将打印相同的数字。
我考虑过的:
- A keyword/method 计算 & returns 值,并在下一行使用它。不太可行,在我的用例中,这些变量被使用了数百次,这增加了样板和隐含知识 ("you must use the method before every usage!").
- 侦听器接口,
_start_suite
,或 case 或关键字 - 这是框架中最接近“构造函数”的; negatives - 在相应级别执行一次,增加运行时开销。
基本上,我需要一个 python 的 @property
装饰器(半)普通机器人框架变量,或者传递一个方法调用作为参数:)
您可以使用inline python evaluation 来执行变量中的函数。在下面的例子中,不同的随机数将被记录三次:
*** Test cases ***
Example
log ${{random.randint(1, 100)}}
log ${{random.randint(1, 100)}}
log ${{random.randint(1, 100)}}
如果调用是针对用户创建的方法(不在已安装的包中),则为 module_name.method_name()
。例如,如果模块 my_module.py
中有一个方法 my_method(param1)
,调用方法如下:
Log ${{my_modlue.my_method('arg')}}
如果目标是RF关键字,那就有点麻烦了——需要使用BuiltIn
class中的run_keyword()
方法。示例 - 调用关键字 My Keyword
:
Log ${{robot.libraries.BuiltIn.BuiltIn().run_keyword('argument1')}}