2015-05-15 57 views
0

我正在使用Robot Framework SSH库进行自动化。SSH隧道与机器人框架SSH SSH LIbrary

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

看起来像RF SSH Library不支持这个。

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

谢谢!

回答

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} 

第二个文件是真实的测试,实际的test.txt:

*** Settings *** 
Library  OperatingSystem 

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

来看,这种通过指定输出文件以避免日志文件从服务器复制回来时的文件名冲突:

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

0

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

它的JIST是:

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文件添加到机器人库,并调用关键字Create SSH Tunnel在测试用例的开始(也可以在测试设置Suite Setup)和Stop SSH Tunnel

希望有所帮助。

0

您可以借助'本地端口转发'功能实现此目的。

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

  1. 使用测试服务器上此命令(其中机器人正在运行)在一个实例:

    ssh -4 -L <listening_port/forwarding_port>:<destination_ip>:destination_port> [email protected]_box.com

例如) ssh -4 -L 50025:10.122.56.45:23 [email protected]

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

    telnet localhost <listening port>

  • 如) telnet localhost 50025

    在这里,你可以像你正在工作的目标服务器上,作为会话被打开执行命令。

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

    1. 步骤(1) - 端口转发在一个shell脚本完成,这个shell脚本调用你的机器人框架。与口本地主机
    2. 待办事项的Telnet /其他指定

    sample.sh:

    ssh -4 -L 50025:10.122.56.45:23 [email protected]

    机器人代码:

    *** 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我没有从我的测试实例访问目标服务器。