Robotframework robot框架:测试用例无法加载在测试套件中导入的资源文件中的关键字';s父测试套件文件夹

Robotframework robot框架:测试用例无法加载在测试套件中导入的资源文件中的关键字';s父测试套件文件夹,robotframework,robotframework-ide,Robotframework,Robotframework Ide,您好,我正在使用robot framework对网站进行自动化测试,上图是测试过程中的结构: 测试:一个测试套件文件夹,我在这里导入资源文件,它位于文件夹下的“init.robot”中 Sub1:子测试套件,不导入任何内容 测试:一个测试用例 我的问题是:在测试用例“test”中,robot无法识别在“test”测试套件文件夹中导入的关键字,因为将有更多的子测试套件,如sub2、sub3,如何在一个位置导入资源?我不想在每个测试套件中导入资源文件,有没有办法做到这一点?您可以链接导入。下面是

您好,我正在使用robot framework对网站进行自动化测试,上图是测试过程中的结构:

  • 测试:一个测试套件文件夹,我在这里导入资源文件,它位于文件夹下的“init.robot”中
  • Sub1:子测试套件,不导入任何内容
  • 测试:一个测试用例

我的问题是:在测试用例“test”中,robot无法识别在“test”测试套件文件夹中导入的关键字,因为将有更多的子测试套件,如sub2、sub3,如何在一个位置导入资源?我不想在每个测试套件中导入资源文件,有没有办法做到这一点?

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

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

资源。机器人

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

*** Test Cases ***
TC
   No Operation
*** Settings ***
Resource    ../resources/resources.robot

*** Test Cases ***
TC
   No Operation
*** Keywords ***
Resource Keyword
    Log    "Keyword Executed from Resource File"
*** Test Cases ***
TC
    Resource Keyword
测试用例1.机器人

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

*** Test Cases ***
TC
   No Operation
*** Settings ***
Resource    ../resources/resources.robot

*** Test Cases ***
TC
   No Operation
*** Keywords ***
Resource Keyword
    Log    "Keyword Executed from Resource File"
*** Test Cases ***
TC
    Resource Keyword
测试用例2.机器人

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

*** Test Cases ***
TC
   No Operation
*** Settings ***
Resource    ../resources/resources.robot

*** Test Cases ***
TC
   No Operation
*** Keywords ***
Resource Keyword
    Log    "Keyword Executed from Resource File"
*** Test Cases ***
TC
    Resource Keyword
正如注释中所讨论的,在
\uuuu init\uuuuu.robot
文件中导入的任何关键字在该文件之外都不可用。这在上的Robot Framework User Guide(机器人框架用户指南)一节中有明确描述

也就是说,如果在每个套件文件中包含主资源文件的工作不需要,那么另一种方法是在每个套件的开头使用侦听器加载资源文件。有关侦听器的文档可在此处找到:

一个新的例子:

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')
资源机器人

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

*** Test Cases ***
TC
   No Operation
*** Settings ***
Resource    ../resources/resources.robot

*** Test Cases ***
TC
   No Operation
*** Keywords ***
Resource Keyword
    Log    "Keyword Executed from Resource File"
*** Test Cases ***
TC
    Resource Keyword
TestCase.robot

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

*** Test Cases ***
TC
   No Operation
*** Settings ***
Resource    ../resources/resources.robot

*** Test Cases ***
TC
   No Operation
*** Keywords ***
Resource Keyword
    Log    "Keyword Executed from Resource File"
*** Test Cases ***
TC
    Resource Keyword

然后用额外的参数运行常规的robot命令--listener AddResourceListener.py,你就可以使用关键字了,不管它是否被导入。

根据用户,他不想在每个套件中导入资源文件,我不确定是否有其他方法可以做到。@pankajmishra是的,这就是重点,顶层是一个测试套件目录,在这个顶层测试套件目录下是一些测试套件,我想在顶层测试套件目录中导入我的资源文件,这样我就不需要逐个导入所有子测试套件中的资源文件one@yyzhang14922. 初始化文件不是一个解决方案,因为文档清楚地表明,在那里加载的任何关键字在实际测试用例中都不可用。@pankajmishra抱歉,错过了这一点。