我正在使用Robot Framework SSH Library进行自动化。
我需要使用Robot Framework建立到远程计算机的SSH隧道,然后在远程计算机上执行一组测试。
看起来RF SSH Library不支持此功能。
有人能指出我可用的其他选项吗?
谢谢!
答案 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。
在实例中的测试服务器(运行机器人的位置)上使用此命令:
ssh -4 -L <listening_port/forwarding_port>:<destination_ip>:destination_port> username@jump_box.com
例如)
ssh -4 -L 50025:10.122.56.45:23 anishg@jumpbox.teski.com
在另一个实例中使用以下命令在目标服务器中工作:
telnet localhost <listening port>
例如)
telnet localhost 50025
在此处,您可以像打开目标服务器一样执行命令,因为会话已打开。
在机器人中,这也可以通过这种方式实现:
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