51Testing软件测试论坛

标题: Python连接SSH的相关操作,当Web测试存在图片验证时怎么办? [打印本页]

作者: 钚枉今生    时间: 2017-12-21 13:14
标题: Python连接SSH的相关操作,当Web测试存在图片验证时怎么办?
我们经常做Web自动化测试时,会遇到图片验证登录的尴尬情形,这里提供一种解决思路和方法,对于我们自己公司的产品来说,是可以通过修改配置文件的方式将图片识别功能干掉的,所以我想到了写一个Python脚本,用以实现对服务器(Linux)中的配置文件的相关内容删除,然后进行命令重启的操作,进而实现将图片验证的功能干掉,下面我贴出我的代码,并作出解释


# coding = utf-8
import sys,os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
print(sys.path)

#上传批量文件到远程主机
import paramiko       #这句话是关键,引入SSH操作类
import os,re,time
# 从配置文件读取配置信息
import configparser
config = configparser.ConfigParser()
file_path = os.path.dirname(os.path.abspath('.')) + '/config/config.ini'
config.read(file_path)

#从配置文件获取网站地址
hostname = config.get("testServer", "hostname")
username = 'root'
password = '123456'
port = 22
local_path = 'F:\jiagou'
dir_path = '/opt/local/bin/VOS/cur/INM-8086/webapps/INM/WEB-INF/'  #这句话是我们将要操作的远端服务器相关文件所在的路径
execmd = ["cd /opt/local/bin/VOS/cur/INM-8086/bin/\n","ls\n","./shutdown.sh\n","./startup.sh\n"]    #这个是替换文件后我们将要执行的相关命令,用来重启服务
# local_dir = '/tmp/'
# remote_dir = '/tmp/test/'


class SSH_Connect(object):
    """将文件保存到本地"""
    def save_file(self):
        t = paramiko.Transport((hostname, port))
        t.connect(username=username, password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        #将SSH路径下的指定文件"web.xml"下载到本地指定路径下
        sftp.get(os.path.join(dir_path,"web.xml"),os.path.join(local_path,"web.xml"))
        new_txt = []
        regex1="<!-- JCaptcha`s filter -->"
       regex2="</web-app>"
       file_object=sftp.open(dir_path+"web.xml",'r+')
        all_the_text = file_object.readlines( )
        for line in all_the_text:                          #此处的循环是为了删除配置文件中的相关内容,搞程序的研究研究就能看懂了,这里不多解释
            if re.search(regex1, line):                    #这里的re.search是一个正则表达式的用法,逐行搜索regex1的内容,找到后返回一个布尔值,这里纯在一个重写文件的过程,重写内容保存在new_txt中
                new_txt.append("</web-app>")
                break
            else:
                new_txt.append(line)
        file_object.seek(0)
        file_object.truncate(0)
        file_object.writelines(new_txt)                   #将new_txt写入新的配置文件
        file_object.close()
        t.close()
    """发送命令重新启动服务"""
    def sshclient_execmd(self):#hostname, port, username, password, execmd):
        s = paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.connect(hostname=hostname, port=port, username=username, password=password)
        ssh=s.invoke_shell()
        for commend in execmd:
            ssh.send(commend)
            out = ssh.recv(1024)
            print(out)
            time.sleep(2)
        ssh.close()
        s.close()
"""后面这部分#sftp.put(os.path.join(local_dir, f), os.path.join(remote_dir, f))这一句可以用来将本地文件上传到远端指定路径下,注意for循环,原本的程序可以将指定路径的所有文件上传到指定路径下的,f即是文件名"""    #        files=sftp.listdir(dir_path)
    #files = t.listdir(dir_path)
    # for f in files:
    #     '#########################################'
    #     'Beginning to upload file %s ' % datetime.datetime.now()
    #     'Uploading file:', os.path.join(local_path, f)

        #sftp.put(os.path.join(local_dir, f), os.path.join(remote_dir, f))
        # 'Upload file success %s ' % datetime.datetime.now()
    # t.close()
# SSH=SSH_Connect()
# SSH.save_file()
# SSH.sshclient_execmd()

作者: 海海豚    时间: 2017-12-21 14:22
谢谢分享~
作者: jingzizx    时间: 2017-12-21 15:41

作者: 梦想家    时间: 2017-12-25 09:02
赞一个




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2