【问题标题】:Robot Framework Database Library InterfaceError: not a query when combining with Builtin KeywordRobot Framework Database Library InterfaceError: not a query when combination with Builtin Keyword
【发布时间】:2017-01-24 23:23:37
【问题描述】:

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

问题:“Check if Exists in Database”关键字可单独使用,但与内置关键字“Run Keyword and Return Status”结合使用时不起作用.

得到错误:'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: not a query 10:14:40.984 DEBUG Traceback(最近一次通话最后): 文件“...Python\Python35\lib\site-packages\DatabaseLibrary\query.py”,第 56 行,查询中 allRows = cur.fetchall()

基本上,我尝试将删除命令与 Query 关键字一起使用,但发现未记录的关键字“Execute Sql String”有效

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

【问题讨论】:

  • 好像是形成的sql有问题。将 sql 分配给一个字符串变量,然后将其传递给 Check if Exists in Database ${sql}
  • 看起来Check if Exists in Database 和查询语句之间只有一个空格。另外,请显示完整和准确的错误消息。

标签: robotframework cx-oracle


【解决方案1】:
  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. 为什么要为每个关键字创建单独的测试用例?

我想您的测试用例可能如下所示:

***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

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

【讨论】:

    【解决方案2】:

    在下面提到的关键字“检查数据库中是否存在”之后添加4个空格制表符

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

    “检查数据库中是否存在”关键字将返回布尔值(通过/失败)。所以你不需要使用“运行关键字和返回状态”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 2017-10-27
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多