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