用机器人框架处理对象的最佳方法是什么?我开始编写一个python类来处理API交互,因此我可以将其用作机器人框架(RF)中的关键字。我的问题是如何将数据从一个方法传递到另一个方法?我是否必须将对象传递回每个函数以获取数据?
在下面的例子中,我调用类并初始化它,但是如果我想的话,我可以引用类的实例吗?还是我应该编写每个方法来处理从另一个方法返回的整个对象?希望这是有意义的,我基本上想像平常一样使用python,但是在RF中。
更具体地说,如果我一次调用它们,区分几个实例是否可行?
测试python foo.py:class foo:
def intialize(self, api):
self.api_item = api
def get_api():
return self.api_item
def do_something_with_api
# doing something with an API, then return results
def do_something_else_with_api
# doing something with an API, then return results
Test Robot文件:
*** Settings ***
Library /path/foo.py
*** Variables ***
${api_url} "https://apiurl.com/"
*** Tasks ***
Setup Initialize Settings
${session}= MgsRestApiHandler.intialize ${api_url}
在RF中,当一个类作为Library加载时,总会为它创建一个实例对象。因此,如果你在它里面有状态变量,它们将出现在你的RF源中的所有类方法(关键字)中。换句话说,在您的示例中,所有方法都可以访问self.api_item
(在调用initialize()
之后);顺便说一下,为什么不添加一个普通的构造函数__init()__
并在那里定义变量,甚至使用None
值,这样更干净?
是否可以区分多个实例
您可以通过多次导入并使用WITH NAME
Robot Framework语法来实例化同一个类("Library")的多个实例:
*** Settings ***
Library /path/foo.py WITH NAME o1
Library /path/foo.py WITH NAME o2
"drawback"你现在必须在方法调用前加上实例名——否则框架不知道你想调用哪个对象:
*** Tasks ***
Setup Initialize Settings
${session1}= o1.intialize ${api_url}
${session2}= o2.intialize ${api_url2}
如果我正确理解你的一个问题(或者如果不是-把这当作一般的琐事)-在RF中无论方法/关键字返回-从原语到复杂对象(例如nclass实例)被分配给调用前的变量。
所以如果你有一个方法/关键字需要一个复杂的对象,你可以传递返回值——框架不会以任何方式破坏它,它将传递一个普通的python对象。