Robot Framework 从类中创建两个实例而不是一个

Zei*_*zar 3 python import robotframework

我有一个 python 类:

from robot.api import logger
class TestClass(object):
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2
        logger.info('initialized', also_console=True)

    def print_arg1(self):
        print self.arg1

    def print_arg2(self):
        print self.arg2
Run Code Online (Sandbox Code Playgroud)

我写了一个名为“CommonKeywords.robot”的关键字文件:

*** Settings ***
Library     ../Libs/TestClass.py     arg1   arg2        WITH NAME    class1

*** Keywords ***
print arg1 class1
    class1.print_arg1

print arg2 class1
    class1.print_arg2
Run Code Online (Sandbox Code Playgroud)

我的场景文件是“scenario.robot”:

*** Settings ***
Resource    ../Keywords/CommonKeywords.robot

*** Test Cases ***
Test Prints
    print arg1 class1
Run Code Online (Sandbox Code Playgroud)

这是我的项目结构:

Test
---- Keywords
     ---- CommonKeywords.robot
---- Scenarios
     ---- scenario.robot
---- Libs
     ---- TestClass.py
Run Code Online (Sandbox Code Playgroud)

我将目录更改为Test/Scenariospybot scenario.robot在命令行中键入。脚本打印两个initialized,这意味着它已经初始化了对象两次:

在此处输入图片说明

问题是什么??

我这样改变了我的班级:

from robot.api import logger
class TestClass(object):
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2
        logger.info('initialized', also_console=True)

    def print_arg1(self):
        print self.arg1

    def print_arg2(self):
        print self.arg2
Run Code Online (Sandbox Code Playgroud)

这就是我想要的,并且在应用 Bryan 的回答后得到了:

在此处输入图片说明

Bry*_*ley 5

您需要设置库的范围。

机器人框架用户指南(强调我的):

Robot Framework 尝试使测试用例相互独立:默认情况下,它为 每个测试用例创建测试库的新实例。然而,这种行为并不总是可取的,因为有时测试用例应该能够共享一个公共状态。此外,所有库都没有状态,根本不需要创建它们的新实例。

如果您想为每个测试套件创建一次类,您可以像这样设置范围:

class TestClass(object):

    ROBOT_LIBRARY_SCOPE = 'TEST SUITE'

    def __init__(self, arg1, arg2):
        ...
Run Code Online (Sandbox Code Playgroud)

如果你想在类在整个测试来看,你可以设置的生活实例只是一次ROBOT_LIBRARY_SCOPE'GLOBAL'