同步、异步测试——ssh、scp

本文介绍如何使用Python进行SSH和SCP操作的同步与异步测试,包括使用paramiko库进行连接、传输文件,并结合pytest进行测试用例设计。
摘要由CSDN通过智能技术生成

coding: utf-8

import time
import socket
import paramiko
import pytest
import hashlib
import os
from concurrent.futures import ThreadPoolExecutor

待测试代码

_executor = ThreadPoolExecutor(max_workers=10)

SSHRunError = SCPRunError = paramiko.SSHException


class MessageError(Exception):

    def __init__(self, msg):
        super(MessageError, self).__init__(msg)


class Executor(object):
    """
    远程命令执行器,支持异步方式
    """

    def __init__(self, stdin, stdout):
        self._stdin = stdin
        self._stdout = stdout

        self.finish = 'ANT_EXECUTE_DONE'
        self.echo_finish = 'echo {} $?'.format(self.finish)

    def write(self, cmd):
        self._stdin.write(cmd + '\n')

    def flush(self):
        self._stdin.flush()

    def execute(self, cmd, stdin=None, sync=False, all_output=False):
        if sync:
            future = self._execute(cmd, stdin, all_output)
        else:
            future = _executor.submit(self._execute, cmd, stdin, all_output)
        return future

    def _execute(self, cmd, stdin=None, all_output=False):
        """
        远程执行命令时,多条命令之间需要有一定的间隔,确保前一条执行命令已经执行,通过
        强制time.sleep实现,以防前一条命令还未开始执行后续命令就发送过去。
        :param cmd: execute cmd
        :param stdin: input something when execute cmd need interaction
        :return: execute result
        """
        self.write(cmd)
        time.sleep(0.1)
        if stdin:
            self.write(stdin)
            time.sleep(0.1)
        self.write(self.echo_finish)
        self.flush()

        out, err = [], []
        for line in self._stdout:
            # logger.debug(line)
            line = line.strip()
            if not line:
                continue
            if cmd in line or self.echo_finish in line:
                continue
            
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值