接口测试时遇到 java 代码加密请求数据,用 python 的我该怎么办?

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 接口测试时遇到 java 代码加密请求数据,用 python 的我该怎么办?前言自动化测试应用越来越多了,尤其是接口自动化测试。在接口测试数据传递方面,很多公司都会选择对请求数据进行加密处理。而目前为主,大部分公司的产品都是java语言实现的。

接口测试时遇到 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代码如下(看每一行代码的注释哦):

复制代码
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请教。

所以,在工作当中有什么问题,自己查资料的基础上,多与相关人员进行沟通,带着具体的问题去沟通和请教。

最后,希望大家也可以多多有自己解决问题的能力。
原文地址https://www.cnblogs.com/Simple-Small/p/11284110.html

相关文章
|
20天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
17天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
67 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
3天前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
8天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
38 6
|
18天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
25天前
|
Java API
Java中内置的函数式接口
Java中内置的函数式接口
23 2
|
28天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
81 1
|
28天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
64 1
|
5天前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
34 11
|
1月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
62 3