使用robotframework做接口测试4——搞定接口签名及密码加密

接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了。于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍。大致的心路历程就是这样了,签名其实没什么好讲的,每个公司实现都不一样,java代码转成python代码也要点时间,传参类型和格式一定要对,调试的时候有人帮忙会快很多。

写这篇文章的目的之一,是粗略介绍一下自定义关键字的写法。另一目的是给有接口签名的小伙伴提供一些思路,不至于被一个老是变的字段吓到不敢前行。

有些小伙伴可能对签名什么的没有概念,那稍微解释一下。签名主要的作用是保证接口传值的完整性,一致性和安全性,一般会将时间戳及重要字段做成一个签名,作为一个参数传入,服务端收到请求后,首先对签名字段做校验,校验通过才做请求处理。在安全要求比较高一些的公司,比如金融行业,就会使用接口数字签名。

由于我们不是设计签名的,而只是翻译开发代码,就不考虑诸多细节了。假设签名签的字段为时间戳timestamp,重点字段:data1,data2,设备id:imei,签名的key为一个客户端和服务端约定的一个常量,如’abcd’。

算法过程如下:

  1. 对约定key值进行md5处理
  2. 将规定字段拼接成一个长字符串,拼接时用&符号做为连接,拼接前把字符格式都转成了字符串
  3. 将第二步得到的字符串进行md5处理

 以下是胡七八诌的python代码,可运行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import hashlib
import json

class md5Enc(object):
    def get_sign(self,data1,data2,imei="",t=""):
        '''
        Examples:
        ${sign}  | Get Sign  | api.name | ${userinfo} | 357070058113616 | ${t_now}
        '''
        #key string
        key="abcd"
        #第一步,key md5
        keyMd5 = hashlib.md5()
        keyMd5.update(key)
        keyMd5= keyMd5.hexdigest()
        data2Str = json.dumps(data2)
        #第二步拼接签名
        signBefore =  data1 + "&" + data2Str + "&" + imei +  "&" +\
                      t + "&" + keyMd5
        #第三步sign md5
        sign = hashlib.md5()
        sign.update(signBefore)
        sign = sign.hexdigest()

        return sign

    def get_pw_encrpt(self,pwBefore):
        '''write your encrpt code here'''
        print 'your encrpt code'

我的具体做法是把这个py文件命名为md5Enc.py(与类名一致)。py文件放在rf的项目文件里,如果和suite同级,以library的形式导入:

library1.png


 
调用如下:

自定义签名.png


 
实际实践中,除了签名算法,还有密码加解密算法等,套路都差不多,有一些很简单的,只单纯一个md5的加密,应该用不到自定义关键字,稍微复杂一点的多层加密,什么AES啊,SHA256啊,base64啊,就考虑自己写写代码吧。

posted @ 2018-04-10 09:44  澄心  阅读(2277)  评论(0编辑  收藏  举报