繁体   English   中英

在关键字中运行关键字的机器人框架

[英]Robot Framework running a Keyword within a keyword

我试图让一个关键字来运行其他关键字,而不必这么称呼它。

keyword_rp   {variable}    keyword_2  ${arg1}  ${arg2}  ${arg3}
keyword_rp   {variable}    ${return_data}=   keyword_3
keyword_rp   {variable}    keyword_4  {arg11}
etc.....

您可以看到这如何使您的机器人测试变得混乱,而不是我想要另一个您称之为 arguments 在整个测试中的关键字。 然后通过 python 为每一行调用关键字rp。

keyword_rp_once   {variable}    
...               keyword_2  ${arg1}  ${arg2}  ${arg3}
...               ${return_data}=   keyword_3
...               keyword_4  {arg11}

python 看起来像这样

def keyword_rp_once(self, variable, *argv):
    #parse arguments and use robot built in to run each keyword

或者也许有更好的方法来做到这一点?

问题是,机器人没有看到三行,它在实际必须运行关键字时看到一长串 arguments。 调用keyword_rp_once时,关键字看到的内容与您输入以下内容完全相同:

keyword_rp_once  {variable}  keyword2  ${arg1}  ${arg2}  ${arg3}  ${return_data}=  keyword_3  keyword_4  {arg11}

简而言之,您不可能直接在关键字中执行您想要的操作,因为机器人会丢弃关键信息 - 换行符 - 因此您的自定义关键字不可能知道一组 arguments 的结束位置和第二组的开始位置。

请注意,使用 3.2 中的新解析器,可以在内部使用换行符,但是您必须做很多工作才能通过侦听器和/或预运行修饰符从解析器中获取信息并进入关键字。

更简单的选择是完全按照机器人自己的Run Keywords所做的事情:它强制您添加一个标记来告诉它一个关键字在哪里结束,下一个关键字在哪里开始(特别是在那个关键字中,特殊参数AND )。 然后,您的关键字可以通过查找该标记将 arguments 的单个长列表拆分为 arguments 的多个列表。

例如,我曾经通过使用:将一组 arguments 与另一组分开来完成您尝试做的事情。 它看起来像这样:

keyword_rp_once  {variable}
...  :  keyword2  ${arg1}  ${arg2}  ${arg3}
...  :  ${return_data}=  keyword_3
...  :  keyword_4  {arg11}

它稍微容易阅读,但代价是必须编写复杂的关键字,并且了解机器人但对您的关键字了解不多的人会发现语法令人困惑。

这个解决方案需要大量的工作,特别是因为中间有一个变量赋值。 您的关键字必须有一堆代码来遍历 arguments,然后为任何看起来像:或匹配像${.*?|=?这样的正则表达式的参数添加特殊处理。 或类似的东西。

可以通过将关键字变量放在引号之间来做到这一点。 例如:

*** Test Cases ***
Example
    I execute "ls"
    Sleep for "2" seconds
    I print "ls" with "lah" with file "File"

*** Keywords ***
I execute "${cmd}"
    log to console    ${cmd}

I print "${cmd}" with "${opts}" with file "${input}"
    LOG TO CONSOLE    ${cmd}
    Sleep for "1" seconds
    LOG TO CONSOLE     ${opts}
    Sleep for "10" seconds
    LOG TO CONSOLE     ${input}

Sleep for "${input1}" seconds
    sleep    ${input1}

在您的情况下,如下所示:

keyword_rp "{variable}" keyword_2 "${arg1}" "${arg2}" "${arg3}"

您可以查看此页面: https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#embedding-arguments-into-keyword-name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM