zoukankan      html  css  js  c++  java
  • 自动化框框具体文件讲解 1

    首先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)


  • 相关阅读:
    Python解释器
    js子节点children和childnodes的用法
    添加jar包需注意
    Class.forName("com.mysql.jdbc.driver");
    java集合类总结
    interface思考练习一
    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    Struts2的配置文件中, <package>的作用,<action><result>重名?
    在Struts2的Action中获得request response session几种方法
    学习一直都是一个相见恨晚的过程,我希望我的相见恨晚不会太晚。
  • 原文地址:https://www.cnblogs.com/weilemeizi/p/14540210.html
Copyright © 2011-2022 走看看