前言

自动化测试应用越来越多了,尤其是接口自动化测试。

在接口测试数据传递方面,很多公司都会选择对请求数据进行加密处理。

而目前为主,大部分公司的产品都是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 的我该怎么办?的更多相关文章

  1. Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密

    Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...

  2. 在本地开启了代理,postman可以正常发起外部请求,但Java代码却请求失败,已解决

    在本地开启了代理,postman可以正常发起外部请求,但Java代码却请求失败,已解决 现象:开了vpn访问公司服务器,postman可以正常发起服务器请求,但是java代码请求失败,连接超时.包括在 ...

  3. 接口测试中模拟post四种请求数据

    https://www.jianshu.com/p/3b6d7aa2043a 一.背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟. Fidd ...

  4. 对Java代码加密的两种方式,防止反编译

    使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...

  5. Java代码实现excel数据导入到Oracle

    1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码   import java.io.File; import java.io.Fi ...

  6. Java代码加密与反编译(一):利用混淆器工具proGuard对jar包加密

    Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候.所以一个按照正常方式编译的 Java .class 文件可以非常轻易地被反编译.通 ...

  7. 接口测试中读取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 ('小') ...

  8. java代码实现mock数据

    废话不多说,直接上代码. /** * 发get请求,获取文本 * * @param getUrl * @return 网页context */ public static String sendGet ...

  9. Java代码批量插入数据到MySQL

    1.批量插入 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundExc ...

随机推荐

  1. 跟我学SpringCloud | 第三篇:服务的提供与Feign调用

    跟我学SpringCloud | 第三篇:服务的提供与Feign调用 上一篇,我们介绍了注册中心的搭建,包括集群环境吓注册中心的搭建,这篇文章介绍一下如何使用注册中心,创建一个服务的提供者,使用一个简 ...

  2. Java 中无返回值的方法在使用时应该注意的问题

    Java 中的方法是形态多样的.无返回值的方法在使用时应该规避哪些问题呢? 一.不可以打印调用或是赋值调用,只能是单独调用(非常重要): 二.返回值没有,不代表参数就没有: 三.不能return一个具 ...

  3. Centos7 系统初试化脚本

    系统初始化设置 # 设置主机名,永久修改,再次登陆生效 hostnamectl set-hostname xxxxx # 安装eprl源,常用命令 yum install -y wget && ...

  4. 自己挖的坑跪着也要填完---mapper配置文件和java源文件在同一包下

    本来准备研究下mybatis源码执行流程的,就随意搭建了个项目,所有配置如下: 一切看似都是那么的正常,然而执行的时候:Exception in thread "main" org ...

  5. .Net之Layui多图片上传

    前言: 多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解.对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的up ...

  6. 跟我学SpringCloud | 第十篇:服务网关Zuul高级篇

    SpringCloud系列教程 | 第十篇:服务网关Zuul高级篇 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程全 ...

  7. HDU 1811:Rank of Tetris(并查集+拓扑排序)

    http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description   自从Lele开发了Rating系 ...

  8. 计算机以及Python的初始

    电脑的介绍 CPU:中央处理器,相当于人类的大脑 内存:暂时储存数据,速度快,造价高,断电后丢失 硬盘:长期储存数据.速度相对慢,造价相对低 操作系统:一个软件,连接计算机硬件和系统中的软件. Pyt ...

  9. shell脚本常见错误一二三

    1.$'\r': 未找到命令的解决 2.: 不是有效的标识符h: 3.cd "$path"/webapps/ROOT 不能正常进入ROOT文件夹,$path并未与后面的字符结合起来 ...

  10. mybatis-generator生成数据表中注释

    0.git clone https://github.com/backkoms/mybatis-generator-comments.git,编译打包,install到本地或delopy私服库中均可. ...