【问题标题】:Connect to SQL Server in Robot framework | Maven Dependency在 Robot 框架中连接到 SQL Server | Maven 依赖
【发布时间】:2021-04-09 11:58:50
【问题描述】:

我正在尝试连接到机器人框架中的 SQL 服务器,所以我在 pom.xml 文件中添加了以下代码:

    <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>8.4.1.jre14</version>
</dependency>

我有以下机器人文件:

    *** Settings ***
    Documentation  Testing connection to the database!
    Library     SeleniumLibrary
    Library     DatabaseLibrary
    Library     OperatingSystem  
    #I'm not sure if we need OperatingSystem Library!!
    
    
    Suite Setup        Connect To Database      pymssql      ${DBName}    ${DBUser}     ${DBPass}    ${DBHost} 
    
   # Suite Setup        Connect To Database Using Custom Params   pymssql            ${DBName}    ${DBUser}     ${DBPass}    ${DBHost} 
    
    
    
    *** Variables ***
    ${DBName}         DatabaseName
    ${DBUser}         Username
    ${DBPass}         Password
    ${DBHost}         xx.xx.xx.xx
    
    
    
    *** Test Cases ***
    Testing Connect to SQL Server
        ${queryTest}=    Execute SQL String     select * from Users where Id=1
        log to console   ${queryTest} 

我收到以下错误:

NoSectionError: 没有部分:'default'

我花了几天时间尝试连接到数据库,但没有成功!

【问题讨论】:

    标签: java maven robotframework


    【解决方案1】:

    您可能缺少./resources/db.cfg 文件,如Connect To Database 关键字的官方文档中所述。

    您可以选择指定一个 dbConfigFile,其中它将加载 dbapiModuleName、dbName dbUsername 和 dbPassword 的默认属性值(注意:直接指定 dbapiModuleName、dbName dbUsername 或 dbPassword 将覆盖 dbConfigFile 中相同键的属性)。如果未指定 dbConfigFile,则默认为 ./resources/db.cfg。

    您没有指定任何其他内容,因此它希望在我提到的位置中使用默认值。

    类似的问题已在 SO 上得到解答:Error: No section: 'default' in Robot Framework using DatabaseLibrary


    编辑:

    因为还是不行(见cmets),所以我加了这部分。

    Connect To Database在代码中是这样的:https://github.com/franz-see/Robotframework-Database-Library/blob/master/src/DatabaseLibrary/connection_manager.py#L37,函数的开头是这样的(注释省略):

    def connect_to_database(self, dbapiModuleName=None, dbName=None, dbUsername=None, dbPassword=None, dbHost=None, dbPort=None, dbCharset=None, dbConfigFile="./resources/db.cfg"):       
            config = ConfigParser.ConfigParser()
            config.read([dbConfigFile])
    
            dbapiModuleName = dbapiModuleName or config.get('default', 'dbapiModuleName')
            dbName = dbName or config.get('default', 'dbName')
            dbUsername = dbUsername or config.get('default', 'dbUsername')
            dbPassword = dbPassword if dbPassword is not None else config.get('default', 'dbPassword')
            dbHost = dbHost or config.get('default', 'dbHost') or 'localhost'
            dbPort = int(dbPort or config.get('default', 'dbPort'))
    

    你得到这个错误:

    NoSectionError: 没有部分:'default'

    发生在第 81 行:https://github.com/franz-see/Robotframework-Database-Library/blob/master/src/DatabaseLibrary/connection_manager.py#L81

    那是因为 dbapiModuleName 是 None (默认情况下,您不会为其分配任何其他值),所以代码转到同一行上的 or config.get('default', 'dbapiModuleName')。这就是您缺少 ./resources/db.cfg 文件的地方,它试图从中获取此变量的值。

    因此,您要么必须提供所有值,要么将文件放在那里。

    文档中确实都提到了关键字:https://franz-see.github.io/Robotframework-Database-Library/api/1.2.2/DatabaseLibrary.html#Connect%20To%20Database第一句话是:

    加载给定 dbapiModuleName 的 DB API 2.0 模块,然后使用它通过 dbName、dbUsername 和 dbPassword 连接到数据库。

    可以在此处找到有关为 dbapiModuleName 提供什么值的其他信息:How to use database library with Robot Framework on temporary sql server 但它不能像现在的配置一样为 None。

    【讨论】:

    • dbapiModuleName 应该是什么?我已经创建了 db.cfg,然后我导入了:Resource ../../default.cfg 然后我像下面这样使用它:Suite Setup Connect To Database dbConfigFile=default.cfg 它显示:Invalid resource file扩展名“.cfg”。支持的扩展名有“.resource”、“.robot”、“.txt”、“.tsv”、“.rst”和“.rest”。
    • 我认为你不需要导入它,它是一个仅用于关键字的文件。
    • 仍然显示“NoSectionError: No section: 'default'” 我阅读了文档,我了解到如果列出了参数,则不需要配置文件!知道如何解决它!
    • 我更新了我的答案。您并没有真正提供所有配置值,因此它会查找配置文件并尝试从中加载缺少的配置值。但是文件丢失了,所以会抛出这个错误。
    【解决方案2】:

    我对我的代码做了一个简单的修改,它成功了!!

    Suite Setup    Connect To Database Using Custom Params    pymssql    '${DBHost}','${DBUser}','${DBPass}','${DBName}'
    

    请注意它应该是: “主机”>“用户名”>“密码”>“数据库名称”

    参数安排很重要!

    注意:我不需要使用配置文件!

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 2011-10-20
      • 2010-10-13
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      相关资源
      最近更新 更多