机器人框架:测试用例无法在导入测试套件的父测试套件文件夹的资源文件中加载关键字
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:测试套件文件夹,我这里导入资源文件,在
文件夹下的“init.robot”
- Sub1:一个子测试套件,什么都不导入
- test:一个测试用例
我的问题是:在测试用例"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
,您将能够使用该关键字,无论它是否被导入。
你好,我正在使用robot framework对一个网站进行自动化测试,上图是RIDE中测试的结构:
- Test:测试套件文件夹,我这里导入资源文件,在 文件夹下的“init.robot”
- Sub1:一个子测试套件,什么都不导入
- test:一个测试用例
我的问题是:在测试用例"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.
也就是说,如果不希望在每个套件文件中包含主资源文件,那么另一种方法是在每个套件开始时使用侦听器加载资源文件。可以在此处找到关于监听器的文档: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
,您将能够使用该关键字,无论它是否被导入。