python学习接口测试

[python接口测试]生成验签

2019-10-10  本文已影响0人  freedom_smile

背景:

测试接口的时候,一般会有一个参数(如:sign)是对请求参数名及值按一定规则生成的加密串,后台会对接口请求的加密串做校验,如果对可以正常请求接口,如果不对就给与提示验签错误之类。(类似于登录的密码)

解决方案:

  1. 给研发要生成规则的包,导入到你的项目,你的参数也按包里的方法生成加密串
  2. 让研发对几个固定的数据不验证加密串,你用固定的参数进行测试
  3. 自己写一套和研发规则一样的代码,接口请求的时候调用自己写好的方法

研发使用的java语言,我使用的python语言,使用上面第三种方法比较适合,步骤如下:

1.写一套和后台规则一样的加密串方法

import hashlib

class md5Python(object):
    """MD5签名和验签"""

    @classmethod
    def data_processing(cls, data):
        """
        :param data: 需要签名的数据,字典类型
        :return: 处理后的字符串,格式为:参数名称=参数值,并用&连接
        """
        if "sign" in data:
            del data["sign"]
        dataList = []
        for key in sorted(data):
            if data[key] and key!= "imgData":
                dataList.append("%s=%s" % (key, data[key]))
        return "&".join(dataList).strip()

    @classmethod
    def md5_sign_str(cls, data, api_key):
        """
        MD5签名的完整字符串
        :param data: 需要签名的数据,字典类型
        :param api_key: MD5签名需要的字符串
        :return: 处理后的字符串,格式为:参数名称=参数值,并用&连接,最后用&连接'key=api_key'
        """
        data = cls.data_processing(data) + '&key=' + api_key.strip()
        return data

    @classmethod
    def md5_sign(cls, data, api_key):
        """
        MD5签名
        :param api_key: MD5签名需要的字符串
        :return: 签名后的字符串sign
        """
        data = cls.data_processing(data) + '&key=' + api_key.strip()
        md5 = hashlib.md5()
        md5.update(data.encode(encoding='UTF-8'))
        return md5.hexdigest()

    @classmethod
    def md5_verify(cls, data, signature):
        """
        md5验签
        :param data: 接收到的数据
        :param signature: 接收到的sign
        :return: 验签结果,布尔值
        """
        if cls.md5_sign(data) == signature:
            return True
        else:
            return False

2.测试同样信息自己代码生成加密串是否和后台的一致

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

from md5_python import md5Python

param = {
    'c':'ccccccccc',
    'd':'ddddddddd',
    'e':'eeeeeeeee'
}

key = 'kkkkkkkkkk'

print('加密参数:' + md5Python.data_processing(param))
print('加密的完整请求串:' + md5Python.md5_sign_str(param,key))
print('加密生成的sign:' + md5Python.md5_sign(param,key))
print('请求信息:' + md5Python.md5_sign_str(param,key)+'&sign='+md5Python.md5_sign(param,key))

3.进行接口测试,sign值调用上面方法生成进行请求

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

import requests
from md5_python import md5Python

# 基本地址
base_url = 'http://*******'

# 接口请求参数
param = {
    'c':'ccccccccc',
    'd':'ddddddddd',
    'e':'eeeeeeeee'
}

# 用于生成验签的唯一值
key="kkkkkkkkkk"

if __name__ == '__main__':
    print('加密的完整请求串:' + md5Python.md5_sign_str(param, key))
    print('加密生成的sign:' + md5Python.md5_sign(param, key))

    param["sign"] = md5Python.md5_sign(param, key)
    # 打印请求参数
    print('请求参数为:' + str(param))
    # 调用接口
    r = requests.post(base_url + '/***', data=param)
    # 打印返回参数
    print('返回参数为: ' + r.text)
上一篇 下一篇

猜你喜欢

热点阅读