创建RobotFramework可使用的自定义Library(一)

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等各种工具尝试,查看自己的关键字是否已经被识别。
导入库的方法网上都有很多介绍,在此就不再复述了,希望上述内容能对你有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值