首页 > 解决方案 > RobotFramework 使用自定义参数连接到数据库的问题

问题描述

遇到错误 OperationalError: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝。(17) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]ConnectionOpen (Connect()).(53)'

    *** Settings ***
Documentation     Simple example using DBLibrary.
Library           SeleniumLibrary
Library           DatabaseLibrary 
*** Variables ***
${DBHost_ConnectionString}  'DRIVER={SQL Server};SERVER="hostname";UID="uname";PWD="******";DATABASE="dbname"'   

*** Test Cases ***

Connect Database
    Connect To Database Using Custom Params    pyodbc    ${DBHost_ConnectionString}

我尝试了互联网上的所有解决方案,例如将端口添加到连接字符串,在服务器名之前附加 tcp 等,遵循 dbapi https://github.com/franz-see/Robotframework-Database-Library/的源代码中提到的实现blob/master/src/DatabaseLibrary/connection_manager.py

 elif dbapiModuleName in ["pyodbc", "pypyodbc"]:
            dbPort = dbPort or 1433
            logger.info('Connecting using : %s.connect(DRIVER={SQL Server};SERVER=%s,%s;DATABASE=%s;UID=%s;PWD=%s)' % (dbapiModuleName, dbHost, dbPort, dbName, dbUsername, dbPassword))
            self._dbconnection = db_api_2.connect('DRIVER={SQL Server};SERVER=%s,%s;DATABASE=%s;UID=%s;PWD=%s' % (dbHost, dbPort, dbName, dbUsername, dbPassword))

任何帮助都应该不胜感激。

标签: sql-serverpython-3.xautomationrobotframeworkpyodbc

解决方案


作为猜测,您不应该用单引号将连接字符串括起来,因为它们会成为连接字符串的一部分。Robot 不是 python,robot 不是 shell,所以你通常不需要引用字符串。

*** Variables ***
${DBHost_ConnectionString}  DRIVER={SQL Server};SERVER="hostname";UID="uname";PWD="******";DATABASE="dbname"

目前尚不清楚您是在字面上使用字符串hostnameanduname等,还是出于问题的目的,这只是样板文件。您需要传递实际的主机名和实际的用户名和密码。

您可能不需要其他值的引号,在这种情况下,它看起来像这样:

*** Variables ***
${DBHost_ConnectionString}  DRIVER={SQL Server};SERVER=hostname;UID=uname;PWD=******;DATABASE=dbname

推荐阅读