怎样从0开始搭建一个测试框架_11——支持方法

比如有时候请求需要加密、签名,还有一些支持方法,可以在utils中建个support.py放进去。

在utils中创建一个support.py文件,里面可以放需要的一些支持方法,我们示例一个加密和签名的方法及排序:

# -*- coding: utf-8 -*-

"""
@author: lucas
@Function: 一些支持方法,比如加密、排序
@file: support.py
@time: 2021/9/22 11:04 上午
"""
import hashlib
import os
import datetime
import time
import json

from utils.log import logger


class EncryptError(Exception):
    pass


def sign(sign_dict, private_key=None, encrypt_way='MD5'):
    """传入待签名的字典,返回签名后字符串
    1.字典排序
    2.拼接,用&连接,最后拼接上私钥
    3.MD5加密"""
    dict_keys = sign_dict.keys()
    dict_keys.sort()

    string = ''
    for key in dict_keys:
        if sign_dict[key] is None:
            pass
        else:
            string += '{0}={1}&'.format(key, sign_dict[key])
    string = string[0:len(string) - 1]
    string = string.replace(' ', '')

    return encrypt(string, salt=private_key, encrypt_way=encrypt_way)


def encrypt(string, salt='', encrypt_way='MD5'):
    u"""根据输入的string与加密盐,按照encrypt方式进行加密,并返回加密后的字符串"""
    string += salt
    if encrypt_way.upper() == 'MD5':
        hash_string = hashlib.md5()
    elif encrypt_way.upper() == 'SHA1':
        hash_string = hashlib.sha1()
    else:
        logger.exception(EncryptError('请输入正确的加密方式,目前仅支持 MD5 或 SHA1'))
        return False

    hash_string.update(string.encode())
    return hash_string.hexdigest()


def get_newest_file_of_path(path):
    """
    :param path: 文件夹路径
    :return path中创建日期最新的一个文件的文件名与创建时间
    """
    return sorted([(x, os.path.getctime(os.path.join(path, x))) for x in os.listdir(path)
                   if os.path.isfile(os.path.join(path, x))], key=lambda i: i[1])[-1]


def get_files_by_createtime(path):
    """ 按照创建时间由新到旧排列路径下所有文件 """
    return sorted([(x, os.path.getctime(os.path.join(path, x))) for x in os.listdir(path)
                   if os.path.isfile(os.path.join(path, x))], key=lambda i: i[1], reverse=True)


def save_time():
    """:return 可用于文件名的时间日期字符串"""
    return time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))


def save_date():
    """:return 可用于文件名的日期字符串"""
    return time.strftime('%Y-%m-%d', time.localtime(time.time()))


def jprint(jstr, indent=2):
    """ 将符合json格式字符串以缩进的方式打印 """
    try:
        print(json.dumps(json.loads(jstr), sort_keys=True, ensure_ascii=False, indent=indent))
    except json.JSONDecodeError:
        print(jstr)


def timestamp_to_time(timestamp, ft='%Y-%m-%d %H:%M:%S'):
    """ 将时间戳转换成固定格式的日期时间字符串 """
    time_local = time.localtime(timestamp)
    return time.strftime(ft, time_local)


def time_to_timestamp(dtime, ft='%Y-%m-%d %H:%M:%S'):
    """ 将日期时间字符串转换成时间戳 """
    try:
        time_array = time.strptime(dtime, ft)
    except ValueError:
        time_array = time.strptime(dtime, '%Y-%m-%d')
    return int(time.mktime(time_array))


def days(d=3):
    """ 取 d 天前(负值)或 d 天后(正)的时间戳 """
    day_cal = datetime.datetime.now() + datetime.timedelta(days=d)
    # 转换为时间戳
    return int(time.mktime(day_cal.timetuple()))


if __name__ == '__main__':
    print(encrypt('100000307111111'))
    print(encrypt('100000307111111', encrypt_way='SHA1'))
    print(get_newest_file_of_path(os.path.join(os.path.dirname(os.path.abspath(".")), "report")))
    print(get_files_by_createtime(os.path.join(os.path.dirname(os.path.abspath(".")), "report")))
    t = '2017-12-09'
    tm = time_to_timestamp(t)
    print(tm)
    print(timestamp_to_time(tm))

    print(timestamp_to_time(days(3)))
    print(timestamp_to_time(days(-3)))

输出结果:

177a1e7ef4cd10bcb022db335a402262
a6a2779b08ea00640f620513d8e87872310651b6
('Report.html', 1631929166.7027018)
[('Report.html', 1631929166.7027018), ('screenshot_20210910\\test_baidu_170842.png', 1631264922.7633045)]
1512748800
2017-12-09 00:00:00
2021-09-25 11:21:16
2021-09-19 11:21:16

Process finished with exit code 0

根据你实际情况的不同,在其中添加其他支持方法。

上一篇:如何在Ubuntu 16.04上使用Let‘s Encrypt保护Apache2


下一篇:免费 SSL Certify The Web