使用机器人框架进行SSH隧道-SSH LIbrary

时间:2015-05-15 01:40:36

标签: robotframework

我正在使用Robot Framework SSH Library进行自动化。

我需要使用Robot Framework建立到远程计算机的SSH隧道,然后在远程计算机上执行一组测试。

看起来RF SSH Library不支持此功能。

有人能指出我可用的其他选项吗?

谢谢!

4 个答案:

答案 0 :(得分:0)

您可以使用Robot Framework打开SSH连接,复制测试文件,运行它们并复制结果。

您需要两个文件,第一个是ssh.txt

*** Settings ***
Library           SSHLibrary
Suite Setup       Open Connection And Log In
Suite Teardown    Copy And Delete Files And Close Connections

*** Variables ***
${HOST}                your.server.here
${USERNAME}            username
${PASSWORD}            password

*** Testcases ***
Run Tests on remote server
    Put File                  real-test.txt
    Run Test In Server        real-test.txt
    Sleep    1s

*** Keywords ***
Open Connection And Log In
   Open Connection    ${HOST}
   Login              ${USERNAME}    ${PASSWORD}

Copy And Delete Files And Close Connections
    Copy Results From Server
    Clean Up Server    real-text.txt
    Close All Connections

Run Test In Server
    [Arguments]   ${filename}
    ${rc}=     Execute Command    pybot ${filename}    return_stdout=False  return_rc=True
    Should Be Equal As Numbers    ${rc}    0

Copy Results From Server
    GetFile    log.html
    GetFile    output.xml
    GetFile    report.html


Clean Up Server
    [Arguments]   ${filename}
    Write    rm log.html
    Write    rm output.xml
    Write    rm report.html
    Write    rm ${filename}

第二个文件是真实测试的地方,real-test.txt:

*** Settings ***
Library     OperatingSystem

*** Testcases ***
Test 1
    FileShouldExist    real-test.txt

通过指定输出文件来运行此操作,以避免在从服务器复制日志文件时发生文件名冲突:

  

pybot -o conn.xml -r conn.html -l connlog.html ssh.txt

答案 1 :(得分:0)

我最近做了类似的事情,但是在Python中创建了这个功能,然后我将其作为关键字导入到Robot。

它的主旨是:

SSHTunnel.py中的

from sshtunnel import SSHTunnelForwarder
(other imports)

class SSHTunnel:
    def create_ssh_tunnel(self):
        ssh_server = SSHTunnelForwarder(
            (host, int(port)),
            ssh_username=username,
            ssh_password=pass,
            remote_bind_address=(remote_bind_host, int(remote_bind_port))
        )
        ssh_server.start()

    def stop_ssh_tunnel(self):
        ssh_server.stop()

现在您将SSHTunnel.py文件添加到Robot Library并在测试用例的开头调用关键字Create SSH Tunnel(也可以在 Test Setup 中套件设置)和最后的Stop SSH Tunnel

希望有所帮助。

答案 2 :(得分:0)

您可以通过“本地端口转发”来实现这一目标。特征

参考:https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding

  1. 在实例中的测试服务器(运行机器人的位置)上使用此命令:

    ssh -4 -L <listening_port/forwarding_port>:<destination_ip>:destination_port> username@jump_box.com

  2. 例如) ssh -4 -L 50025:10.122.56.45:23 anishg@jumpbox.teski.com

    1. 在另一个实例中使用以下命令在目标服务器中工作:

      telnet localhost <listening port>

    2. 例如) telnet localhost 50025

      在此处,您可以像打开目标服务器一样执行命令,因为会话已打开。

      在机器人中,这也可以通过这种方式实现:

      1. 步骤(1) - 端口转发在shell脚本中完成,并在机器人框架中调用此shell脚本。
      2. 使用指定端口的localhost中的Telnet / other执行
      3. sample.sh:

        ssh -4 -L 50025:10.122.56.45:23 anishg@jumpbox.teski.com

        机器人代码:

        *** Test Cases *** Port Forwarding Start Process ./sample.sh shell=True #Port is opened Log To Console SHELL IS Executing Telnet.Open Connection localhost port=50025 #Normal op as in destn server

        注意:我使用了jump_box,因为我无法从我的测试实例访问目标服务器。

答案 3 :(得分:0)

Library    SSHLibrary

Open Connection   host_server

Login With Public Key test  /test.pem  test12345

Create Local SSH Tunnel  9191  remote_host  remote_port  bind_address=127.0.0.1

#Once the connection is made you can directly access the resources in remote_host, for eg : i am trying to connect mysql db in remote host

Connect To Database Using Custom Params   pymysql database='testDb', user='testuser', password='test123', host='127.0.0.1', port=9191