python自动化——自动化框架常用封装代码复习

日志模块:

import logging
import os


def creat_log(name="mylog", level="DEBUG", filename="log.log", sh_level="DEBUG", fh_level="DEBUG"):
    log = logging.getLogger(name)

    log.setLevel(level)

    fh = logging.FileHandler(filename, encoding="utf-8")
    fh.setLevel(sh_level)
    log.addHandler(fh)

    sh = logging.StreamHandler()
    sh.setLevel("DEBUG")
    log.addHandler(sh)

    formats = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"

    log_format = logging.Formatter(formats)

    fh.setFormatter(log_format)
    sh.setFormatter(log_format)

    return log


my_log = creat_log()

其他模块如何引入日志模块:

from hander_log import my_log

my_log.error("hao")
my_log.debug("buhao")

 ========================================================

 读取配置文件模块:

import os
from configparser import ConfigParser

class ReadConfig(ConfigParser):

    def __init__(self,conf_file):
        super().__init__()

        self.read(conf_file,encoding="utf-8")

conf = ReadConfig(r"D:\project\pythonProject\config.ini")

from hander_config import conf

from hander_log import my_log

# my_log.error("hao")
# my_log.debug("buhao")


print(conf.get("data","user"))
print(conf.get("data","password"))

print(conf.get("mysql","password"))
print(conf.getint("mysql","port"))

================================================================

读取excel中的用例:

import openpyxl


class HanderExcel:

    def __init__(self,filename,sheetname):

        self.filename = filename
        self.sheetname = sheetname

    def read_data(self):
        workbook = openpyxl.load_workbook(self.filename)
        sh = workbook[self.sheetname]
        res = list(sh.rows)

        #获取第一行的表头
        title = [i.value for i in res[0]]
        cases = []

        #遍历第一行之外的其他行
        for item in res[1:]:
            data = [i.value for i in item]
            dic = dict(zip(title,data))
            cases.append(dic)


        return cases

from hander_config import conf
from hander_log import my_log
from hander_excel import HanderExcel


# my_log.error("hao")
# my_log.debug("buhao")


# print(conf.get("data","user"))
# print(conf.get("data","password"))
#
# print(conf.get("mysql","password"))
# print(conf.getint("mysql","port"))



excel = HanderExcel(r"D:\project\pythonProject\abc.xlsx","SH")
cases = excel.read_data()
print(cases)

============================================================================

DDT数据驱动:

import unittest
# 导入ddt,list_data
from unittestreport import ddt, list_data

# 用例数据
cases = [
    {'expected': {'code': 0, 'msg': '登录成功'}, 'params': {"username": "duanxc", "password": 123456}},
    {'expected': {'code': 1, 'msg': '账号和密码不正确'}, 'params': {"username": "duanxc", "password": 12345}}
]

# 在类前@ddt
@ddt
class test_login(unittest.TestCase):

    # 在方法面前@list_data()括号里面传入用例数据
    @list_data(cases)
    # 方法参数里面,写一个变量去接受cases的数据
    def test_login_01(self, item):
        # 准备用例数据
        data = item["params"]
        expected = item["expected"]
        print(data)
        print("===================")
        print(expected)
        print("+++++++++++++++++++++")

 ========================================================================

数据库封装:

 =========================================================================

答疑解惑:

在您给出的CLanguage类定义中,xsCLanguage类的一个实例。

要使得其他模块能够引入xs并调用其方法,您需要在xs对象被创建和初始化后,确保它是可以被其他模块访问的。

通常,这意味着您需要把xs放在一个所有模块都可以访问的位置,比如一个全局变量,或者把它作为一个模块级别的对象。

这里有一个简单的例子,说明如何在一个模块中创建CLanguage的实例,并在另一个模块中引入和使用它:

首先,我们有一个名为clanguage_module.py的模块,它定义了CLanguage类并创建了一个实例xs

python# clanguage_module.py

class CLanguage:
def __init__(self):
self.name = "ninhao"
self.number = 100

def info(self):
print("我正在学 Python")

def fanhui(self):
return self.name

# 创建CLanguage类的实例
xs = CLanguage()

然后,在另一个模块中,我们可以引入xs并调用它的方法,但需要注意的是,xs必须是一个全局变量,或者通过某种方式(比如函数返回值)暴露给其他模块:

python# another_module.py

# 引入clanguage_module模块中的xs对象
from clanguage_module import xs

# 调用xs的方法
xs.info() # 输出: 我正在学 Python
print(xs.fanhui()) # 输出: ninhao

在这个例子中,another_module.py通过from clanguage_module import xs语句引入了xs对象。然后,它就可以像调用普通对象的方法一样调用xs的方法了。

然而,通常我们不推荐在模块级别创建类的实例,因为这违反了面向对象编程的封装原则,并且可能导致代码难以测试和维护。

更好的做法是在需要的时候在函数或方法中创建类的实例,或者提供一个工厂函数来创建和返回类的实例。

这样,其他模块可以通过调用这个工厂函数来获得类的实例,而不是直接访问模块级别的对象。

=========================================================================

PS:

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ensp是一款嵌入式网络模拟平台,可以用于模拟网络设备的运行环境。在ensp中玩转Python自动化,可以实现批量修改交换机的登录密码。 首先,我们可以使用Python的Paramiko库来连接交换机,并通过SSH协议进行远程操作。在开始之前,需要确保已经安装了Paramiko库。 接下来,首先需要创建一个函数来连接交换机。在函数中,可以指定交换机的IP地址、登录用户名和密码,并通过SSH协议进行连接。 在连接成功后,可以通过发送指令来修改交换机的登录密码。使用Paramiko库提供的SSHClient对象的`exec_command`方法,可以向交换机发送指令,并接收返回结果。 具体的操作步骤如下: 1. 导入所需的库: ```python import paramiko import time ``` 2. 创建连接函数: ```python def connect_switch(ip, username, password): ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(ip, username=username, password=password) return ssh_client ``` 3. 修改登录密码函数: ```python def change_password(ip, username, password, new_password): ssh_client = connect_switch(ip, username, password) command = f"passwd {username}\n" # 发送修改密码的指令 stdin, stdout, stderr = ssh_client.exec_command(command) stdin.write(password + "\n") # 输入旧密码 stdin.write(new_password + "\n") # 输入新密码 stdin.write(new_password + "\n") # 再次输入新密码 time.sleep(1) output = stdout.read() + stderr.read() ssh_client.close() return output ``` 4. 调用修改密码函数: ```python if __name__ == '__main__': ip = "交换机IP" username = "登录用户名" password = "登录密码" new_password = "新密码" output = change_password(ip, username, password, new_password) print(output) ``` 以上就是使用Python自动化批量修改交换机登录密码的方法。在ensp中,可以通过编写Python脚本,实现自动化的操作,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值