Hello for all RobotFramework用户
我们在不同的抽象层次上有很多关键字,并且正在寻找一种简单的方法来导入它们,同时在IDE中保持对自动完成等的支持。
继承可能如下所示:
/---------------------> basic_keywords.robot <---\
/ ^ \
/ | |
| advanced_keywords_1.robot --/ advanced_keywords_2.robot
| ^
| |
more_advanced_keywords_1.robot
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
。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
优点:
Advaned Keyword
的定义位置缺点:
advanced_keywords
。 ROBOT_LIBRARY_SCOPE = 'GLOBAL'
中的SomeLibrary.py
可以阻止图书馆的双重实例化,请参阅Robot Framework makes two instances from the class instead of one和Robot Framework User Guide
两个提案都有利有弊。有什么建议?你会提出什么样的结构?
答案 0 :(得分:0)
这是与PyCharm IDE相关的问题,我用RED Robot Editor做了一个例子,它正确处理了继承的资源:
project structure:
res/basic.robot contains basic kw
res/advanced.robot imports basic.robot -> all kws from basic are avaliable and validated
res/even_more_adv.robot imports advanced.robot -> all kw from advanced + all kw from basic
main_testsuite.robot imports res/even_more_adv.robot -> all kw from even_more + advanced + basic resources are visible
我很确定RIDE也会处理这种情况,尽管我没有安装它。
答案 1 :(得分:0)
解决方法在什么级别不起作用?
从常识(以及与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
引用advanced_keywords_1
中的关键字,那么B中会有什么?它会在运行时失败,因为此时关键字未定义(可访问)
这与IDE在编辑advanced_keywords_1
时无法解析basic
或more_advanced_keywords_1
中定义的关键字的原因相同 - 它在当前上下文中无法访问它们。
您有两种选择:
basic
导入advanced_keywords_1
和advanced_keywords_1
导入basic
;它可能听起来很可怕或错误,但机器人框架(实际上是py)管理它就好了。即使是循环导入也不会导致问题(导入b,b导入a)。过去我有一个像你一样的结构 - 一个主关键字文件,导入20多个二级资源文件,其中一些导入第三级。我使用了双重导入并没有遇到问题(唯一的请求 - 没有关键字名称冲突) 从那时起,我转向更破碎的结构 - 没有主文件,套件只导入他们需要的资源。原因 - 更轻和更快的初始加载,主要是 - 我厌倦了在当前命名空间中始终可用的1000多个关键字 - 例如出现在自我暗示中:)