首先Log文件我们封装一个类
from loguru import logger
import sys
from conf.settings import LOG_LEVEL,LOG_FILE
class Log:
logger.remove()#清除它的默认设置设置
fmt = '[{time}][{level}][{file.path}:line:{line}:function_name:{function}] ||msg={message}'
#level file function module time message
logger.add(sys.stdout,level=LOG_LEVEL,format=fmt)#咱们本地运行的时候,在控制台打印
logger.add(LOG_FILE,level=LOG_LEVEL,format=fmt,encoding='utf-8',enqueue=True,rotation='1 day',retention='10 days')#写在日志文件里面
debug = logger.debug
info = logger.info
warning = logger.warning
error = logger.error
if __name__ == "__main__":
Log.info("日志测试")
这样做的方法 别人调用 直接
from loguru import logger
log.debug xxx等等直接调用 、
conf目录下的setting的文件的讲解
import os
#取到彩虹的这层绝对路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_FILE = os.path.join(BASE_PATH,'logs','rainbow.log') #拼接日志文件,base就是彩虹的目录
REPORT_PATH = os.path.join(BASE_PATH,'report') #拼接报告存放的目录
CASE_PATH = os.path.join(BASE_PATH,'biz','cases') #拼接测试用例的目录
CASE_DATA_PATH = os.path.join(BASE_PATH,'biz','data') #拼接测试数据的目录
CONFIG_FILE = os.path.join(BASE_PATH,'conf','config.ini') #拼接配置文件的目录
LOG_LEVEL = 'INFO' #默认日志级别
dd_template = '''本次测试共运行%s条用例,通过%s条,失败%s条'''
mail_template = '''
各位好!
本次测试共运行%s条用例,通过%s条,失败%s条,具体情况请查看附件。
'''
if __name__ == "__main__":
pass
MYSQL的处理操作
发现数据库都不一样的时候在配置文件里,连接数据库这个脚本该如何处理?
在common下写一个处理脚本,默认写mysql方法,这样是为了你想调用那个就传那个连接方法取值,还解决了mysql多次连接问题
import redis
import time
import hmac
import base64
import hashlib
from urllib.parse import quote
from common.config_parse import parse_ini
from common.operate_db import MySQL
ddconfig = parse_ini('dingding') #取钉钉的配置信息
secret = ddconfig.get("secret")
mysql_conn_mapper = {} #{mysqlNone:Mysql,mysql2None:Mysql2}
redis_mapper = {}
def get_mysql(node='mysql',db=None):#定义一个默认函数传一个db默认值
key = '%s%s'%(node,db) #mysql2None
if not key in mysql_conn_mapper:
mysql_info = parse_ini(node)
if db:
mysql_info['db'] = db
mysql = MySQL(**mysql_info)
mysql_conn_mapper[key] = mysql
else:
mysql = mysql_conn_mapper[key]
return mysql
def get_redis(node='redis',db=None):
key = '%s%s'%(node,db) #mysql2None
if not key in redis_mapper:
redis_info = parse_ini(node)
if db:
redis_info['db'] = db
r = redis.Redis(**redis_info,decode_responses=True)
redis_mapper[key] = r
else:
r = redis_mapper[key]
return r
def create_sign():
timestamp = int(time.time() * 1000)
sign_before = '%s %s' % (timestamp,secret)
hsha265 = hmac.new(secret.encode(),sign_before.encode(),hashlib.sha256)
sign_sha256 = hsha265.digest()
sign_b64 = base64.b64encode(sign_sha256)
sign = quote(sign_b64)
return {"timestamp":timestamp,"sign":sign}
if __name__ == "__main__":
c = get_mysql()#调用
发送http请求的类这块的操作脚本
取数据优化脚本用ces.这种方法写一个脚本?
或者使用key,value方法?
在Bin下test文件下
#魔法方法,在一些特定情况下会自动执行这个方法
#访问某个不存在的属性,他会调用__getattr__方法
class NbDict(dict):
def __getattr__(self, item):
value = self[item]
if type(value) == dict:
value = NbDict(value) # 如果是字典类型,直接返回DictToObject这个类的对象
elif isinstance(value, list) or isinstance(value, tuple):
# 如果是list,循环list判断里面的元素,如果里面的元素是字典,那么就把字典转成DictToObject的对象
value = list(value)
for index, obj in enumerate(value):
if isinstance(obj, dict):
value[index] = NbDict(obj)
return value
if __name__ == "__main__":
d = {"name":"xiaohei","age":18,'money':666}
new_d = MyDict(d)
print(new_d.name)