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()); }
在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};注意在空一格那位置上空一格。。
持續更新。。。