接口測試時遇到 java 代碼加密請求數據,用 python 的我該怎麼辦?

前言

自動化測試應用愈來愈多了,尤爲是接口自動化測試。java

在接口測試數據傳遞方面,不少公司都會選擇對請求數據進行加密處理。python

而目前爲主,大部分公司的產品都是java語言實現的。因此加密處理也是java實現的。shell

做爲用python作測試的我,要作接口自動化時,如何去對請求數據進行加密呢?

jvm

 

解決方法

基於此,首先去找開發瞭解一下具體的加密過程,甚至能夠畫一個加密流程圖出來。函數

一種方法是:用python代碼去實現加密流程。測試

對測試人員技術能力有所要求,對加密的實現也須要與開發人員密切進行交流。編碼

另一種便捷的方法就是:直接用python語言調java的加密方式,獲得加密後的數據。加密

這種方式的好處:不用管加密的過程。只要知道如何調用、怎麼傳加密數據,怎麼獲得加密後的數據就能夠。spa

 


使用python語言調用java加密代碼 - 方式一

此處感謝歪歪大佬提供了java版加密代碼。本篇文章中,歪歪大佬角色:開發GG命令行

一、瞭解須要用到的加密信息

而我做爲測試MM((有一點java基礎的)作的第一件事情就是:

愉快的和開發GG聊起了天,諮詢了在Java的加密方式中,調用哪一個函數能夠實現數據加密

第二件事情,就是讓開發GG給我打了一個jar包。這樣我用python代碼直接調用jar包裏的函數就能夠了。

 

 

 

二、開始編寫python代碼,調用java包裏的加密函數。

python是膠水語言,能夠與不少語言一塊兒使用。

python3有個第三方庫Jpype1(下載地址:https://pypi.org/project/JPype1/)

將開發提供的jar包放在py工程的目錄下面。

 

 

python代碼以下(看每一行代碼的註釋哦):

 1 #!/usr/bin/python3
 2 # -*- coding: utf-8 -*-
 3 # Name: use_jar
 4 # Author: liyuan
 5 # Time: 17:01
 6 
 7 import jpype # 引入庫
 8 
 9 import os
10 jvmpath = jpype.getDefaultJVMPath() # 獲取本地默認使用的java JVM路徑。
11 # 獲取jar包的位置。將jar包放在python的目錄下面。
12 jarpath = os.path.join(os.path.split(os.path.abspath(__file__))[0],"jars/")
13 print(jarpath)
14 # 啓動java環境。-Djava.class.path指定要應用的jar包。
15 jpype.startJVM(jvmpath,"-ea", "-Djava.class.path=%s" % (jarpath + 
16 'encryption-0.0.1-SNAPSHOT-jar-with-dependencies.jar'))
17 # 經過jpype編寫java的輸出語句,打印hello world!
18 jpype.java.lang.System.out.println("hello World")
19 
20 # 使用jar包中的類。經過包名.類名。包名爲:com.lemon.encryption.類名爲:RSAManager.
21 # JDClass表明RSAManager類。
22 JDClass = jpype.JClass("com.lemon.encryption.RSAManager")
23 # 類的實例化。開發GG告訴我不須要實例化,直接調用就能夠。是靜態類。
24 # jd = JDClass() 
25 # 調用類下的加密函數:encryptWithBase64,傳的參數爲:1234
26 # res用來接收加密函數的返回值。即加密後加密數據。
27 res = JDClass.encryptWithBase64("1234")
28 print(res) # 打印加密數據
29 
30 # 關閉JVM
31 jpype.shutdownJVM()

 


運行此段代碼以後,對數據1234的加密結果 爲:

 



使用python語言調用java加密代碼 - 方式二

在完成以上操做以後,我又開始和開發GG聊了起來,問了一句,我能夠直接給jar包傳參嗎?不用去調用java的函數,在調用jar包的同時 給它傳參,直接獲得加密後的數據?

開發GG說,能夠!等我改一下,我從新發一個jar給你。

因而,5分鐘後,開發GG甩了我一個新的jar包,告訴我使用方式。我又愉快的開啓了第二種使用模式。

使用方式是這樣的:在命令行當中使用java命令行:java -jar jar包 -d 要加密的數據。命令行輸出的就是加密後的數據了。

我在命令行試了一下,果然如此:

 


因而,我轉換成了python代碼(須要獲取命令行執行的結果,因此要用到subprocess模塊):

 1 #!/usr/bin/python3
 2 # -*- coding: utf-8 -*-
 3 # Name: use_jar_os
 4 # Author: liyuan
 5 # Time: 17:32
 6 
 7 import os
 8 import subprocess
 9 import chardet
10 
11 # 獲取jar包路徑
12 jarpath = os.path.join(os.path.split(os.path.abspath(__file__))[0],
13 "jars/encryption-0.0.1-SNAPSHOT-jar-with-dependencies-2.jar")
14 # 終端命令行命令。加密的數據爲:hello,java
15 command = "java -jar {} -d {}".format(jarpath,"hello,java")
16 # 執行command的,並獲取命令執行以後的輸出數據。
17 stdout,stderror = subprocess.Popen(command,stdout=subprocess.PIPE
18 ,stderr=subprocess.PIPE,shell=True).communicate()
19 # 編碼處理
20 encoding = chardet.detect(stdout)["encoding"]
21 result = stdout.decode(encoding)
22 print(result)

 

 

執行結果以下:

 

 

 

綜上,當咱們在用python遇到 java加密的時候。能夠使用以上2種方式來利用java加密獲得加密後的數據。

固然,在這個過程當中,我也會遇到問題。當有問題時,我會向開發GG諮詢,由於從啓動JVM以後,都是java了,運行出錯了或者整不明白的,我都會向開發GG請教。

因此,在工做當中有什麼問題,本身查資料的基礎上,多與相關人員進行溝通,帶着具體的問題去溝通和請教。

最後,但願你們也能夠多多有本身解決問題的能力。

相關文章
相關標籤/搜索