在机器人框架中保存 class 个对象
Saving class objects in robot framework
我是机器人框架的新手。我正在编写自己的库来使用 Robot,我想保存 class 对象。我希望在套件设置中创建并保存一次对象,并在整个测试套件中继续使用同一对象。有办法吗?
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
在测试用例中创建套件变量
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 的部分。
您需要定义库生命周期以匹配测试套件生命周期。
只需在库的开头定义以下内容:
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
您在库中定义的每个全局变量都可用于整个测试套件中的库。
我是机器人框架的新手。我正在编写自己的库来使用 Robot,我想保存 class 对象。我希望在套件设置中创建并保存一次对象,并在整个测试套件中继续使用同一对象。有办法吗?
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
在测试用例中创建套件变量
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 的部分。
您需要定义库生命周期以匹配测试套件生命周期。
只需在库的开头定义以下内容:
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
您在库中定义的每个全局变量都可用于整个测试套件中的库。