1. 程式人生 > >robotframework 介面測試+RSA加密

robotframework 介面測試+RSA加密

java版的加密函式如下:

public static String sign(byte[] data, final String privateKey) throws Exception {
	byte[] keyBytes = Base64Utils.decrypt(privateKey);
	PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
	KeyFactory keyFactory = KeyFactory.getInstance("RSA");
	PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
	Signature signature = Signature.getInstance("MD5withRSA");
	signature.initSign(privateK);
	signature.update(data);
	return Base64Utils.encrypt(signature.sign());
}
具體的python函式如下:


在robotframework中匯入自己寫的py檔案就可以呼叫sign了,但是這個簽名結果後面多了一個‘=’,需要加一步替換,把=替換為空,


在python內建的base64庫中,可以直接進行編碼,base64.b64encode,但是編碼後的資料可能會出現‘+’或者‘/’,這在rul中是不能作為引數的,而base64.rulsafe_b64encode則把‘+’或‘/’轉換成‘-‘或者’_‘。具體編碼函式看需求,如果是做url則必須用urlsafe

Base64是一種通過查表的編碼方法,不能用於加密,即使使用自定義的編碼表也不行。
Base64適用於小段內容的編碼,比如數字證書籤名、Cookie的內容等。
由於=字元也可能出現在Base64編碼中,但=用在URL、Cookie裡面會造成歧義,所以,很多Base64編碼後會把=去掉,這也就是上面提到的為什麼多了一個’=‘。

get。

介面測試第一步是建立session,第一個引數是alias,也就是命名,識別用的,第二個引數為url,第二行為rsa加密,看需要,第五行是建立標頭檔案(具體引數看公司需求),第六行是引數變數,第八行即為連線api,第一個引數是alias,需要跟上面的保持一致,第二個引數是uri,第三第四為標頭檔案跟引數變數


post

post跟get基本一致,在post需要注意介面傳參是json格式還是普通格式(跟get一樣),如果是json格式,則post request後面應該用data,如果是普通格式則用params


在我這裡,rsa加密,如果引數是json格式,那麼在加密的時候是不需要加引數的,引數直接在post request用data進行傳輸,資料在這裡有一個需要注意的地方,那就是

{
  "accountNumber": "IFA20160701000000464",
  "corporateUserCode": 50,
  "investorPayId": 288,
  "merchantNumber": "IFA2017112100003",
  "password": "ifast123",
  "payMethod": 0,
  "purchaseFunds": [
    {
      "currency": "156",
      "fundCode": "040008",
      "investmentAmount": 10
    }
  ],
  "riskConfirmed": 1
}

json裡面有沒有出現數組,即有沒有出現中括號’[’,‘ ]‘,有的話,需要先進行create dictionary 之後再進行create list,這樣傳輸的資料才能正確。

時間戳:

獲取當前時間的時間戳為:${date}  get time  epoch;get time 是內建庫BuiltIn的關鍵字

把時間轉成時間戳:${date}  Convert Date  2017-11-22 10:00:00 epoch;Convert Date是Date Time庫的關鍵字

把時間戳轉成時間:${date}  get time ‘空一格’ ${time};注意在空一格那位置上空一格。。

持續更新。。。