Robot Framework数据库库InterfaceError:与Builtin关键字组合时不是查询

时间:2017-01-23 19:53:00

标签: robotframework cx-oracle

在尝试将其作为测试设置的一部分删除之前,我正在尝试检查项目是否在数据库中。

问题:“检查数据库中是否存在”关键字可以自行运行,但与内置关键字“运行关键字和返回状态”结合使用时则无效

收到错误:' InterfaceError:not a query '

代码如下:

***Settings***

Documentation     RF DB Test

Library    DatabaseLibrary


***Variables***
${token}    '<token>'

***Test Cases***

Set Log Level
    Set Log Level     TRACE

Connect to DB
     Connect To Database Using Custom Params     cx_Oracle  <connection details>

Cleanup DB
    ${EntryExists}=     Run Keyword and Return Status       Check if Exists in Database select * from MY_TABLE where token=${token}

修改

感谢您的格式化答案和建议人员。 我也收到了这一行的错误

Query       delete from MY_TABLE where token=${token}

10:14:40.984 FAIL InterfaceError:不是查询 10:14:40.984 DEBUG Traceback(最近一次调用最后一次):   在查询中文件“... Python \ Python35 \ lib \ site-packages \ DatabaseLibrary \ query.py”,第56行     allRows = cur.fetchall()

基本上,我试图将delete命令与Query关键字一起使用,但发现未记录的关键字'Execute Sql String'正常工作

Execute Sql String       delete from MY_TABLE where token=${token}

2 个答案:

答案 0 :(得分:0)

  1. 保持缩进一致。我建议使用4个空格(设置你的IDE和那个#)。我可以看到4个空格,5个空格,2个空格,最重要的是:Check if Exists in Databaseselect * from MY_TABLE where token=${token}之间只有一个空格。 请注意,RF需要两个以上的空格作为分隔符(请参阅:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#plain-text-format),但一个空间是不够的。
  2. 为什么要为每个关键字创建单独的测试用例?
  3. 我认为你的测试用例看起来像:

    ***Test Cases***
    Nice Name Of My Test Case
        [Documentation]    Let's not forget to describe
        [Setup]    Set Log Level    TRACE
        [Teardown]    Disconnect From Database
        Connect To Database Using Custom Params    cx_Oracle    <connection_details>
        ${entry_exists}    Run Keyword And Return Status       Check If Exists In Database    select * from MY_TABLE where token=${token}
        Run Keyword If    '${entry_exists}' == 'True'    DB Cleanup
    

    显然,目前所有步骤都不足以应对任何有意义的测试用例,它们最终可能最终成为测试设置,但我相信,这就是你的意思。

答案 1 :(得分:0)

在关键字&#34后添加 4个空格标签;检查数据库中是否存在&#34;如下所述。

${EntryExists}=     Run Keyword and Return Status       Check if Exists in Database     select * from MY_TABLE where token=${token}

&#34;检查数据库中是否存在&#34; keyword将返回布尔值(通过/失败)。因此,您不需要使用&#34;运行关键字和返回状态&#34;