接口测试时遇到 java 代码加密请求数据,用 python 的我该怎么办?
前言
自动化测试应用越来越多了,尤其是接口自动化测试。
在接口测试数据传递方面,很多公司都会选择对请求数据进行加密处理。
而目前为主,大部分公司的产品都是java语言实现的。所以加密处理也是java实现的。
作为用python做测试的我,要做接口自动化时,如何去对请求数据进行加密呢?
解决方法
基于此,首先去找开发了解一下具体的加密过程,甚至可以画一个加密流程图出来。
一种方法是:用python代码去实现加密流程。
对测试人员技术能力有所要求,对加密的实现也需要与开发人员密切进行交流。
另外一种便捷的方法就是:直接用python语言调java的加密方式,得到加密后的数据。
这种方式的好处:不用管加密的过程。只要知道如何调用、怎么传加密数据,怎么得到加密后的数据就可以。
使用python语言调用java加密代码 - 方式一
此处感谢歪歪大佬提供了java版加密代码。本篇文章中,歪歪大佬角色:开发GG
1、了解需要用到的加密信息
而我作为测试MM((有一点java基础的)做的第一件事情就是:
愉快的和开发GG聊起了天,咨询了在Java的加密方式中,调用哪个函数可以实现数据加密
第二件事情,就是让开发GG给我打了一个jar包。这样我用python代码直接调用jar包里的函数就可以了。
2、开始编写python代码,调用java包里的加密函数。
python是胶水语言,可以与很多语言一起使用。
python3有个第三方库Jpype1(下载地址:https://pypi.org/project/JPype1/)
将开发提供的jar包放在py工程的目录下面。
python代码如下(看每一行代码的注释哦):
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Name: use_jar
# Author: liyuan
# Time: 17:01 import jpype # 引入库 import os
jvmpath = jpype.getDefaultJVMPath() # 获取本地默认使用的java JVM路径。
# 获取jar包的位置。将jar包放在python的目录下面。
jarpath = os.path.join(os.path.split(os.path.abspath(__file__))[0],"jars/")
print(jarpath)
# 启动java环境。-Djava.class.path指定要应用的jar包。
jpype.startJVM(jvmpath,"-ea", "-Djava.class.path=%s" % (jarpath +
'encryption-0.0.1-SNAPSHOT-jar-with-dependencies.jar'))
# 通过jpype编写java的输出语句,打印hello world!
jpype.java.lang.System.out.println("hello World") # 使用jar包中的类。通过包名.类名。包名为:com.lemon.encryption.类名为:RSAManager.
# JDClass代表RSAManager类。
JDClass = jpype.JClass("com.lemon.encryption.RSAManager")
# 类的实例化。开发GG告诉我不需要实例化,直接调用就可以。是静态类。
# jd = JDClass()
# 调用类下的加密函数:encryptWithBase64,传的参数为:1234
# res用来接收加密函数的返回值。即加密后加密数据。
res = JDClass.encryptWithBase64("")
print(res) # 打印加密数据 # 关闭JVM
jpype.shutdownJVM()
运行此段代码之后,对数据1234的加密结果 为:
使用python语言调用java加密代码 - 方式二
在完成以上操作之后,我又开始和开发GG聊了起来,问了一句,我可以直接给jar包传参吗?不用去调用java的函数,在调用jar包的同时 给它传参,直接得到加密后的数据?
开发GG说,可以!等我改一下,我重新发一个jar给你。
于是,5分钟后,开发GG甩了我一个新的jar包,告诉我使用方式。我又愉快的开启了第二种使用模式。
使用方式是这样的:在命令行当中使用java命令行:java -jar jar包 -d 要加密的数据。命令行输出的就是加密后的数据了。
我在命令行试了一下,果真如此:
于是,我转换成了python代码(需要获取命令行执行的结果,所以要用到subprocess模块):
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Name: use_jar_os
# Author: liyuan
# Time: 17:32 import os
import subprocess
import chardet # 获取jar包路径
jarpath = os.path.join(os.path.split(os.path.abspath(__file__))[0],
"jars/encryption-0.0.1-SNAPSHOT-jar-with-dependencies-2.jar")
# 终端命令行命令。加密的数据为:hello,java
command = "java -jar {} -d {}".format(jarpath,"hello,java")
# 执行command的,并获取命令执行之后的输出数据。
stdout,stderror = subprocess.Popen(command,stdout=subprocess.PIPE
,stderr=subprocess.PIPE,shell=True).communicate()
# 编码处理
encoding = chardet.detect(stdout)["encoding"]
result = stdout.decode(encoding)
print(result)
执行结果如下:
综上,当我们在用python遇到 java加密的时候。可以使用以上2种方式来利用java加密得到加密后的数据。
当然,在这个过程中,我也会遇到问题。当有问题时,我会向开发GG咨询,因为从启动JVM之后,都是java了,运行出错了或者整不明白的,我都会向开发GG请教。
所以,在工作当中有什么问题,自己查资料的基础上,多与相关人员进行沟通,带着具体的问题去沟通和请教。
最后,希望大家也可以多多有自己解决问题的能力。
接口测试时遇到 java 代码加密请求数据,用 python 的我该怎么办?的更多相关文章
- Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...
- 在本地开启了代理,postman可以正常发起外部请求,但Java代码却请求失败,已解决
在本地开启了代理,postman可以正常发起外部请求,但Java代码却请求失败,已解决 现象:开了vpn访问公司服务器,postman可以正常发起服务器请求,但是java代码请求失败,连接超时.包括在 ...
- 接口测试中模拟post四种请求数据
https://www.jianshu.com/p/3b6d7aa2043a 一.背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟. Fidd ...
- 对Java代码加密的两种方式,防止反编译
使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...
- Java代码实现excel数据导入到Oracle
1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码 import java.io.File; import java.io.Fi ...
- Java代码加密与反编译(一):利用混淆器工具proGuard对jar包加密
Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候.所以一个按照正常方式编译的 Java .class 文件可以非常轻易地被反编译.通 ...
- 接口测试中读取excel中的请求数据含有中文问题,UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position
错误信息:UnicodeEncodeError: 'latin-1' codec can't encode character '\u5c0f' in position 31: Body ('小') ...
- java代码实现mock数据
废话不多说,直接上代码. /** * 发get请求,获取文本 * * @param getUrl * @return 网页context */ public static String sendGet ...
- Java代码批量插入数据到MySQL
1.批量插入 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundExc ...
随机推荐
- MyBatis无限级分类实现的两种方法--自关联与map集合
1.这回先创建数据库吧 下表cid是CategoryId的缩写,cname是CategoryName的缩写,pid是parentId的缩写 无限级分类一般都包含这三个属性,至少也要包含cid和pid才 ...
- Centos7.3搭建DNS服务器--BIND
1.系统环境说明 [root@dns-server etc]# cat /etc/redhat-release CentOS Linux release (Core) 防火墙和Selinux关闭 [r ...
- SQL Server温故系列(4):SQL 查询之集合运算 & 聚合函数
1.集合运算 1.1.并集运算 UNION 1.2.差集运算 EXCEPT 1.3.交集运算 INTERSECT 1.4.集合运算小结 2.聚合函数 2.1.求行数函数 COUNT 2.2.求和函数 ...
- seo外链发布之论坛外链
目前最常见的seo外链方式有5种,之前大发迹创业项目网写文章分享过,详情可以查看文章<[网站SEO优化]最常见的五种软文外链发布方式!>,这篇文章不说其他的几种发外链,就来讲讲通过论坛建设 ...
- HDU 4819:Mosaic(线段树套线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=4819 题意:给出一个矩阵,然后q个询问,每个询问有a,b,c,代表(a,b)这个点上下左右c/2的矩形区域内的( ...
- Ural 2070:Interesting Numbers(思维)
http://acm.timus.ru/problem.aspx?space=1&num=2070 题意:A认为如果某个数为质数的话,该数字是有趣的.B认为如果某个数它分解得到的因子数目是素数 ...
- POI 设置Excel单元格背景色(setFillForegroundColor)
背景介绍:使用Java开发信息系统项目,项目中往往会涉及到报表管理部分,而Excel表格首当其冲称为最合适的选择,但是对单元格操作时对于设置单元格的背景颜色却很少提及,本文旨在方便单元格背景颜色设计. ...
- 剑指offer第二版-6.从尾到头打印链表
描述:输入一个链表的头节点,从尾到头打印每个节点的值. 思路:从尾到头打印,即为“先进后出”,则可以使用栈来处理:考虑递归的本质也是一个栈结构,可递归输出. 考点:对链表.栈.递归的理解. packa ...
- Spring MVC源码(三) ----- @RequestBody和@ResponseBody原理解析
概述 在SpringMVC的使用时,往往会用到@RequestBody和@ResponseBody两个注解,尤其是处理ajax请求必然要使用@ResponseBody注解.这两个注解对应着Contro ...
- CitusDB Multi-node Install and Test
Multi-node setup on CentOS 参考官网:https://docs.citusdata.com/en/v6.2/installation/production_rhel.html ...