zoukankan      html  css  js  c++  java
  • 使用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啊,就考虑自己写写代码吧。

  • 相关阅读:
    Spark SQL saveMode 方式
    Spark SQL 读取json 里面的数据 ,jason 是 结构的数据
    SPark SQL 从 DB 读取数据方法和方式 scala
    SPark SQL 从 DB 读取数据方法和方式
    spark parquet 从hdfs 上读 和写 scala 版本
    spark parquet 从hdfs 上读 和写
    Spark streaming 采用直接读kafka 方法获取数据
    Topbeat --Metricbeat 在Windows上设置 centos kafka 打数据 成功
    php代码加入frameset后框架不显示
    【TP5笔记】TinkPHP5中引入资源文件
  • 原文地址:https://www.cnblogs.com/changyou615/p/8776595.html
Copyright © 2011-2022 走看看