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
类定义中,xs
是CLanguage
类的一个实例。
要使得其他模块能够引入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: