2015-05-15 58 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我沒有從我的測試實例訪問目標服務器。