我正在使用Robot Framework SSH庫進行自動化。SSH隧道與機器人框架SSH SSH LIbrary
我需要使用Robot Framework建立到遠程機器的SSH隧道,然後在遠程機器上執行一組測試。
看起來像RF SSH Library不支持這個。
有人能指點我可用的其他選項嗎?
謝謝!
我正在使用Robot Framework SSH庫進行自動化。SSH隧道與機器人框架SSH SSH LIbrary
我需要使用Robot Framework建立到遠程機器的SSH隧道,然後在遠程機器上執行一組測試。
看起來像RF SSH Library不支持這個。
有人能指點我可用的其他選項嗎?
謝謝!
您可以使用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
我最近做了這樣的事情,但創建了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
。
希望有所幫助。
您可以藉助'本地端口轉發'功能實現此目的。
參考文獻:https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding。
使用測試服務器上此命令(其中機器人正在運行)在一個實例:
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
在這裏,你可以像你正在工作的目標服務器上,作爲會話被打開執行命令。
機器人,可以通過這種方式也可以實現:
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我沒有從我的測試實例訪問目標服務器。