RobotFramework中创建自定义Library的方法 (一)
看到网上的RobotFramework使用大多是借助Selenium库来进行测试,但由于工作需求要使用串口连接以及定制协议的方式执行自动化测试,找了半天没有很好的第三方库,因此自定义功能库来执行测试。
下面介绍一种方式使得自建方法得以在RF中被调用。
借鉴Selenium库的编写方法:
使用Selenium类似的方式创建自定义库需要注意几点:
1. 库的名称与初始化类的名称相同
2. 初始化类继承DynamicCore
3. 引入keyword方法
详细内容如下:
from base import DynamicCore
class TestLibrary(DynamicCore):
ROBOT_LIBRARY_SCOPE = "GLOBAL"
#指定库为全局使用
def __init__(self):
libraries = [
Connect(self),
]
# 1.将需要的自建类放入到library中,自建类当中需要使用@keyword来将方法放入列表中
DynamicCore.__init__(self, libraries)
# 2.此处的初始化使得在library中定义的类的方法被添加到字典中,后续得以被调用
对于注释1,在library中添加TestConnect类中的方法构造详见如下:
from base import keyword
class TestConnect:
# 在需要使用的方法前添加修饰器@keyword,目的是为了让RF知道方法的名称和标签
@keyword
def connect(self, connect_way):
self.serialobject.Open()
其中robot中keyword方法的详细实现如下,作用是将对应的方法在RF中创建相应的名称和标签说明:
def keyword(name=None, tags=()):
"""Decorator to set custom keyword names and tags to functions and methods.
This decorator creates the ``robot_name`` and ``robot_tags`` attributes on
the decorated keyword method or function. Robot Framework checks them to
determine the keyword's name and tags, respectively.
library.py::
@keyword(name='Login Via User Panel')
def login(username, password):
# ...
@keyword(name='Logout Via User Panel', tags=['example', 'tags'])
def logout():
# ...
tests.robot::
Login Via User Panel myusername mypassword
If ``name`` is not given, the actual name of the keyword will not be
affected, but the ``robot_name`` attribute will still be created.
This can be useful for marking methods as keywords in a dynamic library.
In this usage it is possible to also omit parenthesis when using the
decorator::
@keyword
def func():
# ...
"""
if callable(name):
return keyword()(name)
def decorator(func):
func.robot_name = name
func.robot_tags = tags
return func
return decorator
对于注释2,在TestLibrary初始化后,调用DynamicCore的init,DynamicCore是HybirdCore的子类,此处的初始化使得在library中定义的类名称和对应的实例化方法对象被添加到字典中,详见如下:
class HybridCore(object):
def __init__(self, library_components):
self.keywords = {}
self.attributes = {}
self.add_library_components(library_components)
self.add_library_components([self])
其中add_library_components的方法就是将类方法的名称和对应的实例化方法对象放入到字典中,返回的self.keywords中内容如下:
{'connect': <bound method TestConnect.connect of <SerialDevice.Test_Connect.Connect object at 0x00000000030DE6A0>>}
可见,在调用connect的名称时,即调用对应的connect方法。
通过这种方式构建自己需要的方法,并在初始化时加入到library中,就可以创建出自己想要的库了。
使用上述的方法构建自己定义的库,可以被RF识别并使用,可以使用RIDE或RED等各种工具尝试,查看自己的关键字是否已经被识别。
导入库的方法网上都有很多介绍,在此就不再复述了,希望上述内容能对你有所帮助。