使用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啊,就考慮自己寫寫代碼吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM