gpt4 book ai didi

robotframework - 机器人框架 : Multiple Resource-Files accessing the same Library

转载 作者:行者123 更新时间:2023-12-04 06:41:12 24 4
gpt4 key购买 nike

向所有 RobotFramework 用户问好

问题

我们有许多不同抽象级别的关键字,并且正在寻找一种简单的方法来导入它们,同时在 IDE 中保持对自动完成等的支持。

继承可能如下所示:

   /---------------------> basic_keywords.robot <---\
/ ^ \
/ | |
| advanced_keywords_1.robot --/ advanced_keywords_2.robot
| ^
| |
more_advanced_keywords_1.robot

建议1:导入 all_keywords.robot中的所有关键字
all_keywords.robot :
*** Settings ***
Library SomeLibrary.py
Resource basic_keywords.robot
Resource advanced_keywords_1.robot
Resource more_advanced_keywords_1.robot
Resource advanced_keywords_2.robot
more_advanced_keywords_1.robot :
# No Import of basic_keywords.robot here!!!
*** Keywords ***
My More Advanced Keyword
Advanced Keyword # from advanced_keywords.robot
Basic Keyword # from basic_keywords.robot

导入测试套件:
*** Settings ***
Resource all_keywords.robot

好处:
  • 这在执行时起作用。
  • 使用任何测试套件中的同一行,我们可以访问所有关键字。
  • 我们不需要在每个高级关键字文件中导入必要的关键字,这会导致双重导入。

  • 缺点:
  • 不支持自动完成等,因为 advanced_keywords.robot不知道basic_keywords.robot .
  • 在测试套件中导入许多(通常不使用)关键字,降低性能 (?)

  • 提案2:引用 basic_keywords ... 在 advanced_keywords
    由@Todor 提出
    advanced_keywords.robot :
    *** Settings ***
    Resource basic_keywords.robot
    *** Keywords ***
    Advanced Keyword
    Basic Keyword # from basic_keywords.robot
    more_advanced_keywords_1.robot :
    Resource    advanced_keywords.robot
    # basic_keywords is imported here by advanced_keywords.robot
    *** Keywords ***
    My More Advanced Keyword
    Advanced Keyword # from advanced_keywords.robot
    Basic Keyword # from basic_keywords.robot

    双重导入由 Robot Framework 处理。

    导入测试套件:
    *** Settings ***
    Resource more_advanced_keywords_1.robot
    Resource advanced_keywords_2.robot

    好处:
  • 这适用于执行
  • 支持自动完成等,因为 IDE 知道 Advaned Keyword已定义
  • 更好地控制哪些关键字可用,速度更快

  • 缺点:
  • 您必须明确决定/导入哪个 advanced_keywords您在测试套件中使用。
  • ROBOT_LIBRARY_SCOPE = 'GLOBAL' 可以防止库的双重实例化在 SomeLibrary.py ,见 Robot Framework makes two instances from the class instead of oneRobot Framework User Guide

    其他提案?

    这两种提议各有利弊。有什么建议吗?你会建议什么结构?

    最佳答案

    解析在什么级别不起作用?

    从常识(以及 PyCharm 的个人经验)来看,在仅导入 basic.robot 的套件中, 关键字来自 more_advanced_keywords_1.robot 将是 可解析 - 它们通过 basic 间接导入,因此在当前上下文中。

    编辑时more_advanced_keywords_1 ,我认为没有一个 IDE 可以解析来自 advanced_keywords_1 的关键字。或 basic .原因是当前文件无法单独访问它们。

    在一个使用上下文(套件 A)中,消费者可能已经导入了这个文件(more_advanced_keywords_1)和另一个(advanced_keywords_1)并且可以访问后者的关键字;但在另一种情况下(套件 B),消费者可能只导入了 more_advanced_keywords_1。
    那么如果 more_advanced_keywords_1 在 B 中会发生什么?正在引用来自 advanced_keywords_1 的关键字?它会在运行时失败,因为此时未定义(可访问)关键字。
    这与 IDE 不解析 advanced_keywords_1 中定义的关键字的原因相同。或 basic编辑时more_advanced_keywords_1 - 在当前上下文中无法访问它们。

    您有两个选择:

  • 咬紧牙关,不要让 IDE 在更深的关键字文件中解析;它仍然可以在套房中使用,所以这是可以忍受的。
  • 使用双重进口 - basic进口advanced_keywords_1 , 和 advanced_keywords_1进口basic ;这听起来可能很可怕或错误,但 Robot Framework(实际上是 py)管理得很好。即使是循环导入也不会引起问题(a 导入 b,b 导入 a)。

  • 过去我有一个和你一样的结构 - 一个主关键字文件,它本身导入了 20 多个 2 级资源文件,其中一些导入了 3 级资源文件。我使用了双重导入并且没有遇到问题(唯一的要求 - 没有关键字名称冲突)。
    从那以后,我转向了更加分解的结构——没有主文件,套件只导入他们需要的资源。原因 - 更轻、更快的初始加载,主要是 - 我厌倦了在当前命名空间中持续可用的 1000 多个关键字 - 例如存在于自动建议中 :)

    关于robotframework - 机器人框架 : Multiple Resource-Files accessing the same Library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48524292/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com