1:最刚开始的原始脚本如下
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 跳过了远程连接中选择‘是’的环节,
ssh.connect(hostname='192.168.0.128', port=22, username='x', password='1')
stdin, stdout, stderr = ssh.exec_command('ls ')
print(stdout.read().decode('utf-8'))
stdin, stdout, stderr = ssh.exec_command('pwd')
print(ssh.exec_command('pwd')[1].read().decode('utf-8'))里插入代码片
从上面的可以看到完全是开发的编写方式,对于测试而言非常的不友好。而且可扩展性也比较差。我将会将其封装为一个没有代码基础的人也可以使用的框架。
第一个封装界面 base_api.py
在这里插入代码片
class BaseApi:
def ssh_exec_command(self,cmd):
'''
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='192.168.0.128', port=22, username='x', password='1')
stdin, stdout, stderr = ssh.exec_command('pwd')
print(stdout)
ssh.close()
'''
# 实例化一个transport对象
trans = paramiko.Transport(('192.168.0.128', 22))
# 建立连接
trans.connect(username='x', password='1')
# 将sshclient的对象的transport指定为以上的trans
ssh = paramiko.SSHClient()
ssh._transport = trans
# 执行命令,和传统方法一样
return ssh.exec_command(cmd)[1].read().decode()
# 关闭连接
trans.close()
第二次封装,比如ls的命令
def get_ls(self,cmd):
return self.ssh_exec_command(cmd)
在这里插入代码片
从这里可以看到
最后使用测试脚本,框架是pytest
在这里插入代码片
from IPC.ls import Ls
class Test_get_token:
def setup(self):
self.ls=Ls()
def test_ls(self):
print( self.ls.ssh_exec_command('ls'))
这是一个非常基本的封装,从上面可以看到是有很多不合理的地方。
后续还会继续封装。
很多封装的概念没有加入,后续加入
对于测试而言,只需要编写最后的测试脚本,但是依然不算友好。后续会继续改进。