自动化测试应用愈来愈多了,尤为是接口自动化测试。java
在接口测试数据传递方面,不少公司都会选择对请求数据进行加密处理。python
而目前为主,大部分公司的产品都是java语言实现的。因此加密处理也是java实现的。shell
做为用python作测试的我,要作接口自动化时,如何去对请求数据进行加密呢?
jvm
基于此,首先去找开发了解一下具体的加密过程,甚至能够画一个加密流程图出来。函数
一种方法是:用python代码去实现加密流程。测试
对测试人员技术能力有所要求,对加密的实现也须要与开发人员密切进行交流。编码
另一种便捷的方法就是:直接用python语言调java的加密方式,获得加密后的数据。加密
这种方式的好处:不用管加密的过程。只要知道如何调用、怎么传加密数据,怎么获得加密后的数据就能够。spa
此处感谢歪歪大佬提供了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的加密结果 为:
在完成以上操做以后,我又开始和开发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请教。
因此,在工做当中有什么问题,本身查资料的基础上,多与相关人员进行沟通,带着具体的问题去沟通和请教。
最后,但愿你们也能够多多有本身解决问题的能力。