如何使用python在机器人框架中导入和使用用户定义的类
Posted
技术标签:
【中文标题】如何使用python在机器人框架中导入和使用用户定义的类【英文标题】:How to import and use user defined classes in robot framework with python 【发布时间】:2015-02-20 14:02:22 【问题描述】:假设我在 python 中有一个类:
class TestClass(object):
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def print_args(self):
print arg1, arg2
我想使用robotframework
来实现我的测试场景。我想从上面的类中创建一个实例并调用它的方法。怎么做?我知道如何导入库;应该是这样的:
Library TestClass
我不知道如何从这个类初始化一个对象并通过这个对象调用类方法。如果我想用python实现它,我会写一些这样的代码:
import TestClass
test = TestClass('ARG1', 'ARG2')
test.print_args()
现在,我想知道如何在robotframework
中写这个。有什么帮助吗?
【问题讨论】:
【参考方案1】:要导入带参数的库,只需add them after the library name:
Library TestClass ARG1 ARG2
所以“导入”和实例化是一次性完成的。现在,可能比较棘手的是了解您的实例的范围。这在用户指南部分“Test Library Scope”中有很好的解释:
为每个测试用例创建一个新实例。 [...] 这是默认设置。
请注意,如果您想使用不同的参数多次导入同一个库,从而有不同的类实例,则必须在导入时为它们命名:
Library TestClass ARG1 ARG2 WITH NAME First_lib
Library TestClass ARG3 ARG4 WITH NAME Second_lib
然后在您的测试中,您必须为关键字添加前缀:
*** Test Cases ***
MyTest
First_lib.mykeyword foo bar
Second_lib.mykeyword john doe
this section of the User Guide 对此进行了解释。
【讨论】:
感谢您的回复。我真的了解如何使用我的课程。但是当我阅读文档时,我发现每个类只能有一个实例;因为框架没有为实例保存任何 ID 或名称,我只是调用类的方法而不引用任何内容,我做对了吗? 实际上可以有多个实例。我编辑了我的答案来解决这一点。 感谢您的全面回答。【参考方案2】:我已经能够按需实例化 python 类(即不仅仅是通过库技术硬编码的参数)。
我使用辅助方法来创建类。我无法让 Robot 脚本直接调用类构造函数,但是它可以在 Python 中调用函数,因此我们可以通过提供基于函数的接口来创建类或命名元组:
文件:resource_MakeMyClass.robot
*** Settings ***
Library myClass
*** Keywords ***
_MakeMyClass
[Arguments] $arg1 $arg2
$result = makeMyClass $arg1 $arg2
[Return] $result
文件:myClass.py
class MyClass(object):
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def makeMyClass(arg1, arg2):
return MyClass(arg1, arg2)
【讨论】:
如何在测试用例中使用它?我尝试了$c = _MakeMyClass z m
,它给了我Maximum limit of started keywords exceeded.
错误。似乎陷入了无限循环。以上是关于如何使用python在机器人框架中导入和使用用户定义的类的主要内容,如果未能解决你的问题,请参考以下文章
如何在 material-ui 主题中导入和使用自定义字体?