python接口自动化之接口签名参数化

接口签名规则

python接口自动化之接口签名参数化_第1张图片

handle_transactionId_sign.py

import uuid
import datetime
import hashlib


class GenerateTransactionIdSign:
    # 系统编码,由生产系统分配
    sysCode = 'S00101'
    # 应用编码,由生产系统分配
    appCode = 'A00101'

    def generate_transaction_id(self):
        '''
        报文流水号,请求方生成。
        规则:系统编码(6位)+应用编码(6位)+时间(yymmddhhmm,10位)+GUID(32位),共54位
        :return: transaction_id:报文流水号
        '''
        # 生成随机32位GUID
        generate_uuid = ''.join(str(uuid.uuid1()).split('-'))
        # 获取当前时间year-month-day-hour
        get_time = '{:%Y%m%d%H}'.format(datetime.datetime.now())
        # 进行拼接生成本次接口请求的报文流水号
        transaction_id = self.sysCode + self.appCode + get_time + generate_uuid
        return transaction_id

    def generate_sign(self, data):
        '''
        生成sign方法
        :param data:transactionId:报文流水号
        :return:
        '''
        # 秘钥
        private_key = "0FDE05C42CD0F318D913B1F5A18BCD30"
        # 创建md5对象
        md5_obj = hashlib.md5()
        # 对字符串进行加密操作
        md5_obj.update((private_key + data).encode(encoding='utf-8'))
        # 生成sign并转换成32位小写的字符串
        sign = md5_obj.hexdigest().lower()
        return sign


if __name__ == '__main__':
    test = GenerateTransactionIdSign()
    print(test.generate_sign(test.generate_transaction_id()))

handle_context.py

import re
from scripts.handle_transactionId_sign import GenerateTransactionIdSign


class HandleParametric:
    '''Excel用例中的变量参数化设计'''
    '''sign参数化模式'''
    sign_pattern = r"\${sign}"
    '''transactionId参数化模式'''
    transactionId_pattern = r'\${transactionId}'

    #  创建GenerateTransactionIdSign生成动态签名类实例对象
    generate_transactionId_sign = GenerateTransactionIdSign()

    @classmethod
    def generate_sign(cls, data):
        '''
        sign参数化
        :param data: 传入的需要进行替换的请求数据data
        :return:替换成参数化完成请求数据data
        '''
        # 先通过re.search()去data中查找,若找到参数化模式就开始进行替换操作
        if re.search(cls.sign_pattern, data):
            # 将读取到的未进行参数化的sign值data进行替换操作后,再返回的值赋值给data
            data = re.sub(cls.sign_pattern, cls.generate_transactionId_sign.generate_sign(
                cls.generate_transactionId_sign.generate_transaction_id()), data)
        return data

    @classmethod
    def generate_transactionId(cls, data):
        '''
        transactionId参数化
        :param data: 传入的需要进行替换的请求数据data
        :return:替换成参数化完成请求数据data
        '''
        # 先通过re.search()去data中查找,若找到参数化模式就开始进行替换操作
        if re.search(cls.transactionId_pattern, data):
            # 将读取到的未进行参数化的sign值data进行替换操作后,再返回的值赋值给data
            data = re.sub(cls.transactionId_pattern, cls.generate_transactionId_sign.generate_transaction_id(), data)
        return data

    @classmethod
    def sign_parameter(cls, data):
        '''
        签名批量参数化方法
        :param data: 传入的需要进行替换的请求数据data
        :return: 返回参数化替换完成的请求数据data/原值data
        '''
        data = cls.generate_sign(data=data)
        data = cls.generate_transactionId(data=data)
        return data


if __name__ == '__main__':
    test = HandleParametric()
    data1 = "{'sign': '${sign}', 'transactionId': '${transactionId}'}"
    print(test.sign_parameter(data1))

备注:

1.data1模拟的是从Excel用例里边读取出来的请求体数据python接口自动化之接口签名参数化_第2张图片
2.sysCode和AppCode都是固定的写死即可

3.小菜狗一枚,正在努力学习中

你可能感兴趣的:(#,Python基础,python接口自动化)