2026/1/12 4:34:19
网站建设
项目流程
可以做线路板网站的背景图,微信公众号小说网站怎么做,太原正规的网站制作,我想在百度发布信息在日常工作中我们经常会跟Linux打交道#xff0c;对于测试同学来说#xff0c;使用Linux的场景还是比较多的#xff0c;比如#xff1a;搭建测试环境、查看日志信息、修改配置文件、监控服务资源等。
本篇将介绍一个Python的第三方库Paramiko#xff0c;使用Paramiko对于测试同学来说使用Linux的场景还是比较多的比如搭建测试环境、查看日志信息、修改配置文件、监控服务资源等。本篇将介绍一个Python的第三方库Paramiko使用Paramiko我们可以在Python脚本中进行SSH连接Linux服务器并远程执行Linux命令。那么我们为何要学习Paramiko呢它可以解决什么问题呢又能给我们日常工作带来什么呢在前文中说过职场打工人学习技能和工具的很大原因是为了解决工作中遇到的某些具体问题我们学习Paramiko当然也是为了解决某些问题。例如要想在Linux服务器上进行测试环境的部署传统的做法是使用SSH工具例如Xshell、Xftp、FinalShell、secureCRT、PuTTY等连接远程服务器然后手动在Linux服务器上输入一条一条的命令最终完成测试环境的搭建。其实每次搭建环境所用的Linux命令几乎都是相同的于是我们就可以借助Paramiko将这些命令编写成Python脚本进而实现自动搭建测试环境。并且还可以结合接口自动化以及UI自动化完成部署、激活、数据初始化、自动化测试等一条龙服务实现整个流程的自动化。安装及使用安装Paramiko库pip install paramiko安装完成后可以使用以下代码进行远程操作Linux服务器# author: 咖啡加剁椒 # datetime: 2023/5/28 17:16 # function: 远程操作Linux服务器demo import paramiko # 创建SSH客户端 client paramiko.SSHClient() # 设置自动添加主机密钥 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 client.connect(hostname服务器地址, port端口, username用户名, password密码) # 执行远程命令 # 使用exec_command()方法执行远程命令并使用stdout对象获取命令的输出、stderr对象获取命令的报错信息可以根据需要对输出进行处理和显示 stdin, stdout, stderr client.exec_command(你要执行的命令) # 获取命令输出 output stdout.read().decode(utf-8) print(output) # 关闭连接 client.close()一些坑运行时报错ModuleNotFoundError: No module named _cffi_backend出现这个错误通常是由于缺少cffi模块导致的cffi是Paramiko库的一个依赖项在安装Paramiko时会附带安装。但是当我们尝试使用pip install cffi重新安装cffi模块时又提示我们cffi库已经存在此时的做法可以先使用pip uninstall cffi卸载已存在的库然后重新执行pip install cffi。使用cd命令进行目录切换时不生效当使用Paramiko库远程执行命令时cd命令无法直接切换目录这是因为cd是一个shell内置命令无法直接通过Paramiko执行此时可以通过在执行命令时添加额外的命令前缀来模拟cd命令的行为。PSshell内置命令就是有bash shell自身提供的命令而不是文件系统中的可执行脚本文件。可以使用type命令来确定一个命令是否是内置命令二者的区别在于内置命令执行速度快内置命令是当前shell环境的一部分就在当前进程内执行减少了上下文切换外部脚本文件执行速度慢需要磁盘I/O操作并且fork一个新的进程运行脚本文件导致进行之间上下文切换。对于这种内置命令不生效的问题我们的解决方案如下# 切换目录 command cd /opt your_command # 在目标目录中执行其他命令 stdin, stdout, stderr client.exec_command(command)在上述示例中使用了 运算符来在单个命令中组合 cd 命令和其他命令。 运算符表示只有在前一个命令成功执行后才会执行后续的命令。因此我们将 cd 命令和需要在目标目录中执行的其他命令连接在一起。在实际应用中将 /opt 替换为想要切换到的实际目录并将 your_command 替换为需要在该目录中执行的实际命令例如cd /opt pwd。通过类似的方法可以模拟其他shell内置命令的行为但并非所有的shell内置命令都能以这种方式执行因为某些命令可能依赖于shell的上下文环境。使用wget命令下载文件时文件为0KB刚开始使用wget http://XXX/file.tar.gz下载文件时发现下载下来的文件为0KB原因是在执行wget命令时Python脚本挂起解决方案就是在wget命令中添加一个超时如下wget -q -T90 http://XXX/file.tar.gz使用tar命令解压文件时报错gzip: stdin: unexpected end of file通常在使用wget命令下载文件压缩包后会使用tar命令对文件进行解压但是在解压时报错。解决方案就是在wget和tar命令之间添加等待时间如下client.exec_command(wget -q -T90 http://XXX/file.tar.gz) time.sleep(5) # 添加等待时间 client.exec_command(tar -zxvf file.tar.gz -C /xxx)将Paramiko封装成工具类为了方便在不同的项目中引用我们可以将Paramiko封装成工具类如下# author: 咖啡加剁椒 # datetime: 2023/5/25 20:45 # function: 远程连接Linux服务器工具类封装 import paramiko class SSHUtils(): def __init__(self): try: # 创建SSH客户端 self.ssh paramiko.SSHClient() # 允许连接不在known_hosts文件中的主机 self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程服务器 self.ssh.connect(hostname, port22, username, password) except: print(SSH连接异常……) def __del__(self): self.ssh.close() print(SSH connection closed.) def exe_cmd(self, cmd, infoTrue, errorTrue): 执行远程命令 :param cmd: 要执行的命令 :param info: 是否打印正确信息默认为True :param error: 是否打印错误信息默认为True :return: print(\n 开始执行命令 \n str(cmd)) stdin, stdout, stderr self.ssh.exec_command(cmd) stdout stdout.read().decode(utf-8) stderr stderr.read().decode(utf-8) if stdout and info: print(stdout) elif stderr and error: print(stderr) print(\n 命令执行完成 \n str(cmd))以上完。最后作为一位过来人也是希望大家少走一些弯路在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈这些资料希望能给你前进的路上带来帮助。视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。