Robot Framework:通过 SSH 隧道连接到 PostgreSQL 数据库

Posted

技术标签:

【中文标题】Robot Framework:通过 SSH 隧道连接到 PostgreSQL 数据库【英文标题】:Robot Framework: Connect to PostgreSQL Database via SSH Tunnel 【发布时间】:2021-12-02 21:54:42 【问题描述】:

我面临以下问题。 我在远程服务器上有一个 PostgreSQL 数据库。为了访问它,我需要通过 SSH 隧道。

所以,我的测试步骤是:

    创建隧道 连接到数据库 执行查询/查询

我可以使用 SSHLibrary 创建隧道,并且可以正常工作:

SSHLibrary.Open Connection    10.xxx.xxx.xx  
SSHLibrary.Login     MySSH_User    MySSH_Password    delay=1      
SSHLibrary.Create Local SSH Tunnel    9191    $IP_DATABASE    22

所以我继续使用 DatabaseLibrary 执行连接(并且我检查了所有字段是否正确):

DatabaseLibrary.Connect To Database    psycopg2    $DB_NAME    $USER_DB    $PASSWORD_DB    $IP_DATABASE    $PORT_DB

但我收到以下错误:

OperationalError: could not connect to server: Connection timed out (0x0000274C/10060)
        Is the server running on host "10.xxx.xxx.xx" and accepting
        TCP/IP connections on port 5432?

我该如何解决?我想我需要以某种方式指定必须使用隧道完成数据库连接,但我不知道该怎么做。 这是完整的测试代码:

*** Settings ***
Library    DatabaseLibrary
Library    SSHLibrary

*** Variables ***
$IP_DATABASE    10.xxx.xxx.xx
$PORT_DB    5432
$DB_NAME    MyNameDB
$SCHEMA_DATABASE    MySchemaDB
$USER_DB    MyUserDB
$PASSWORD_DB    MyPasswordDB

*** Keywords ***
    
*** Test Cases ***
Connect To DB Via SSH
    SSHLibrary.Open Connection    10.xxx.xxx.xx  
    SSHLibrary.Login     MySSH_User    MySSH_Password    delay=1      
    SSHLibrary.Create Local SSH Tunnel    9191    $IP_DATABASE    22
    Sleep    2s
    DatabaseLibrary.Connect To Database    psycopg2    $DB_NAME    $USER_DB    $PASSWORD_DB    $IP_DATABASE    $PORT_DB

我想用射频来做,有人可以帮忙吗? 非常感谢

【问题讨论】:

【参考方案1】:

Ssh 隧道应该以这样一种方式工作,即您建立与另一台主机的 SSH 连接并在 localhost 中公开一个 PORT,然后将流量从 localhost 中的该端口隧道传输到隧道端点的 IP/PORT ..

因此,假设您在 192.168.100.10 有一个主机,您的机器人框架正在其中运行,它需要连接到 192.168.50.100 中的数据库:

如果 postgres 可以通过 ssh 直接访问:

Connect To DB Via SSH
    $IP_DATABASE=  192.168.50.100
    $DB_PORT=  5432
    SSHLibrary.Open Connection    $IP_DATABASE  
    SSHLibrary.Login     MySSH_User    MySSH_Password    delay=1      
    SSHLibrary.Create Local SSH Tunnel    $DB_PORT    $IP_DATABASE    $DB_PORT
    DatabaseLibrary.Connect To Database    psycopg2    $DB_NAME    $USER_DB    $PASSWORD_DB    127.0.0.1    $PORT_DB

现在,如果您必须使用 ssh 跳转主机,例如,连接到一个 ssh 服务器,然后该服务器将连接到另一个正在运行 postgres 的服务器,您所需要做的就是更改将转发流量的隧道 IP 地址到:

Connect To DB Via SSH
    $IP_DATABASE=  192.168.50.100
    $IP_SSH_JUMPHOST=   192.168.50.1
    $DB_PORT=  5432
    SSHLibrary.Open Connection    $IP_JUMPHOST  
    SSHLibrary.Login     MySSH_User    MySSH_Password    delay=1      
    SSHLibrary.Create Local SSH Tunnel    $DB_PORT    $IP_DATABASE    $DB_PORT
    DatabaseLibrary.Connect To Database    psycopg2    $DB_NAME    $USER_DB    $PASSWORD_DB    127.0.0.1    $PORT_DB

【讨论】:

感谢它真的很有帮助,现在它可以工作了!真的很赞!周末愉快!

以上是关于Robot Framework:通过 SSH 隧道连接到 PostgreSQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Robot Framework 测试用例的命令行参数中传递 Tab?

Robot Framework 通过pyodbc连接Mysql

通过 Robot Framework 更改浏览器功能

Robot framework学习笔记

Robot Framework重点

SSH隧道及其使用