API处理机器人和Python类



用机器人框架处理对象的最佳方法是什么?我开始编写一个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 NAMERobot 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对象。

最新更新