机器人框架:测试用例无法在导入测试套件的父测试套件文件夹的资源文件中加载关键字

robot framework: test case cannot load keyword in resource file that import in the test suite's parent test suite folder

你好,我正在使用robot framework对一个网站进行自动化测试,上图是RIDE中测试的结构:

我的问题是:在测试用例"test"中,机器人无法识别导入到"Test"测试套件文件夹中的关键字,因为会有更多的子测试套件,如sub2、sub3 ,如何在一个地方导入资源?我不想在每个测试套件中导入资源文件,有没有办法做到这一点?

您可以链接导入。下面是这样一个链和重用的例子。在此示例中,我们有一个 resources.robot 导入所有不同的 sub*.robot 文件。这是唯一导入这些文件的文件。

然后有两个 testcases*.robot 文件继续导入 resources.robot 并且能够访问 sub*.robot 关键字的内容。

resources.robot

*** Settings ***
Resource    ../resources/sub1.robot
Resource    ../resources/sub2.robot
Resource    ../resources/sub1.robot

testcases1.robot

*** Settings ***
Resource    ../resources/resources.robot

*** Test Cases ***
TC
   No Operation

testcases2.robot

*** Settings ***
Resource    ../resources/resources.robot

*** Test Cases ***
TC
   No Operation

如评论中所述,__init__.robot 文件中导入的任何关键字在该文件之外不可用。 Initialization files.

的 Robot Framework 用户指南部分对此进行了清楚的描述

也就是说,如果不希望在每个套件文件中包含主资源文件,那么另一种方法是在每个套件开始时使用侦听器加载资源文件。可以在此处找到关于监听器的文档:Docs

一个新例子:

AddResourceListener.py

from robot.libraries.BuiltIn import BuiltIn

class AddResourceListener(object):
    ROBOT_LISTENER_API_VERSION = 2

    def __init__(self):
        pass

    def start_suite(self, name, attributes):
        BuiltIn().import_resource('${EXECDIR}/resource.robot')

resource.robot

*** Keywords ***
Resource Keyword
    Log    "Keyword Executed from Resource File"

TestCase.robot

*** Test Cases ***
TC
    Resource Keyword

然后 运行 您的常规机器人命令带有附加参数 --listener AddResourceListener.py,您将能够使用该关键字,无论它是否被导入。