【问题标题】:Saving class objects in robot framework在机器人框架中保存类对象
【发布时间】:2015-02-07 21:41:14
【问题描述】:

我是机器人框架的新手。我正在编写自己的库来使用 Robot,并且我想保存类对象。我希望在套件设置中创建并保存一次对象,并在整个测试套件中继续使用相同的对象。有没有办法做到这一点?

Aristalibrary.py

import pyeapi

active_conn = None


class AristaLibrary:
    def __init__(self, proto="https", hostname='localhost',
                 username="admin", passwd="admin", port="443"):
        self.hostname = hostname
        self.proto = proto
        self.port = port
        self.username = username
        self.passwd = passwd

    def connect_to(self, proto, hostname, username, passwd, port):
        proto = str(proto)
        hostname = str(hostname)
        username = str(username)
        passwd = str(passwd)
        port = str(port)
        active_conn = pyeapi.connect(proto, hostname, username, passwd, port)
        return active_conn

    def enable(self, conn, command):
        return conn.execute([command])

    def get_active_connection(self):
        return active_conn

loginsight_sshlib_demo.txt

*** Setting ***
Library    BuiltIn
Library    String
Library    AristaLibrary

*** Variables ***
${hostname}    192.168.117.20
${username}    admin
${password}    admin
${port}        80
${proto}       http

*** Test Cases ***

Test Aristalibrary
    ${node}=    Connect To     ${proto}    ${hostname}    ${username}         ${password}    ${port}
    LOG    ${node}    level=DEBUG

Test Persistance of variables
    ${node}=     Get Active Connection     
    ${output}=    Enable    ${node}    show version
    LOG    ${output}    level=DEBUG

*** Keywords ***
Open Connection and Login
    Open Connection    ${hostname}
    Login    ${username}    ${password}
    Write     enable
    ${Output}=    Read 
    Log    ${Output}    level=INFO

【问题讨论】:

    标签: python class object robotframework


    【解决方案1】:

    在测试用例中创建套件变量

    BuiltIn 库有一个名为 Set Suite Variable 的关键字,它允许您设置一个对整个套件来说是全局的变量。您需要做的就是在创建对象后调用它:

    ${node}=    Connect To     ${proto}    ${hostname}    ${username}         ${password}    ${port}
    Set Suite Variable   ${node}
    

    从那时起,${node} 将可用于所有测试用例。

    在 python 代码中创建套件变量

    如果您不希望测试用例中的额外步骤,您可以让您的库在库中调用相同的 Set Suite Variable 关键字。例如:

    from robot.libraries.BuiltIn import BuiltIn
    class AristaLibrary:
        ...
        def connect_to(self, proto, hostname, username, passwd, port):
            ...
            active_conn = pyeapi.connect(proto, hostname, username, passwd, port)
            BuiltIn().set_suite_variable("${node}", active_conn)
            return active_conn
    

    当您调用connect_to 关键字时,执行上述操作将设置变量${node}

    虽然这是一个有趣的解决方案,但它可能会导致混淆测试用例,因为仅通过阅读测试并不能看出 ${node} 的设置位置。

    有关从 python 代码调用关键字的更多信息,请参阅机器人框架用户指南中名为 Using Robot Framework's internal modules 的部分。

    【讨论】:

      【解决方案2】:

      您需要定义库生命周期以匹配测试套件生命周期。

      只需在库的开头定义以下内容:

      ROBOT_LIBRARY_SCOPE = 'TEST SUITE'
      

      例如,

      class ExampleLibrary:
      
      ROBOT_LIBRARY_SCOPE = 'TEST SUITE'
      
      def __init__(self):
          self._counter = 0
      
      def count(self):
          self._counter += 1
          print self._counter
      
      def clear_counter(self):
          self._counter = 0
      

      您在库中定义的每个全局变量都可用于整个测试套件中的库。

      【讨论】:

        猜你喜欢
        • 2018-09-22
        • 1970-01-01
        • 2015-10-23
        • 2019-10-12
        • 2018-04-25
        • 2021-08-04
        • 1970-01-01
        • 2021-06-23
        • 2022-11-11
        相关资源
        最近更新 更多