Python自动化 开发丢给你一个 jar 包,但你只会 Python,你要认怂吗?阅读本文 99.99%的人都收藏了

kouyou · 2020年03月13日 · 最后由 zzh_1991 回复于 2020年04月13日 · 440 次阅读

一、思考❓❔

1.如果一个接口需要使用内部的加密方式(jar包中的Java类)加密之后,才能请求,怎么办呢?

  • 向开发认怂?不,不,不,这不是我们的风格
  • 国内外各种搜索引擎神器一顿狂搜,“Jmeter如何加载jar包?”、“Python中如何运行Java程序?”


2.要用Python做自动化测试,那么Python中执行java程序,难不难呢?

  • 不难不难,学会了就不难了,,,滚滚滚出去!!!
  • 用JPype模块真的不难



二、案例前景📐

1.前景介绍

  • 小优优同学现在负责公司的自动化测试工作
  • 公司的项目都是java开发的
  • 小优优学过Python,Python编程有几把刷子,但Java却是一窍不通
  • 现在需要使用Python来对接口进行自动化测试
  • 但问题来了,公司里的接口需要使用内部专用的加密方式来对请求参数进行加密,这该如何是好?


2.用于接口请求参数加密的jar包源码(部分)

  • 开发丢给了她一个jar包,她一脸懵逼,无奈,只好请教开发哥哥
  • 开发哥哥给她解释了一下源码,她,嗯嗯嗯嗯,貌(yi)似(ran)懂(meng)了(bi)
package com.lemon;

import 各种依赖包;

public class EncryptUtils {
    private static RSAPublicKey publicKey;
    private static final String DEFAULT_PUBLIC_KEY = "xxx公钥";
    ...
    // rsaEncrypt为加密的方法,参数为待加密的字符串数据
    public static String rsaEncrypt(String string) {
        byte[] binaryData = null;
        ...
        String base64String = (new BASE64Encoder()).encodeBuffer(binaryData);
        return base64String;
    }



三、案例实操🔨🔨

1.安装Jpype模块

  • Python版本要求
    • Python 2.6以上版本都可以(包含Python3)
  • Java版本要求
    • Java 7到Java 11都支持
pip install -i https://pypi.douban.com/simple JPype1


2.操作步骤

  • 导入相关模块
# a. 导入模块
import jpype

# b. 开启java导入
import jpype.imports

# c. 导入Java中的类型
# 会导入'JBoolean', 'JByte', 'JChar', 'JShort', 'JInt', 'JLong', 'JFloat', 'JDouble'
# 与Java中的类型一一对应
# 可以全部导入,也可以按需导入
from jpype.types import *
  • 导入jar包
# 假设:jar包存放在项目根目录下的libs目录中
# a. 从指定目录(libs)下导入多个jar包文件
# b. 路径名最后要使用*号
# jpype.addClassPath("libs/*")

# 或者导入指定的某一个jar包
jpype.addClassPath("libs/lemoner.jar")
  • 开启Java虚拟机
# convertStrings设为False,关闭警告信息
# 开启java虚拟机
jpype.startJVM(convertStrings=False)
  • 导入jar包中的类
# 创建Java中的字符串变量
srcText = JString("待加密的参数")

# 导入Jar包中的EncryptUtils(真正用于加密的Java类)
# 方法一: 使用JClass
# a. JClass需要接收jar包中类所在的包路径(需要使用 逆序域名.包名)
# b. JClass("com.lemon.EncryptUtils")会创建一个Java中EncryptUtils类
# c. 调用EncryptUtils类中的rsaEncrypt静态方法,同时给其传参(Java中的字符串)
result = JClass("com.lemon.EncryptUtils").rsaEncrypt(srcText)

# 方法二: 使用JPackage
# a. 给JPackage传递Jar包中Java类所在域名(顶级域名)
# b. jpype.JPackage("顶级域名").下一级域名.类名.静态方法名(参数)
# c. 或者jpype.JPackage("顶级域名").下一级域名.类名().实例方法名(参数)
# result = jpype.JPackage("com").lemon.EncryptUtils.rsaEncrypt(srcText)

# 方法三: 使用registerDomain注册顶级域名
# a. 注册顶级域名
# b. 从顶级域名开始导入(IDE工具,Pycharm会标红,可忽略)
# jpype.domains.registerDomain("com")
# from com.lemon.EncryptUtils import rsaEncrypt
# result = rsaEncrypt(srcText)

# 打印加密之后的数据result
# 方法一:使用java中的println打印
# jpype.java.lang.System.out.println(result)

# 方法二:使用Python中的print打印
print(result)

  • 关闭Java虚拟机
jpype.shutdownJVM()



四、总结💡💡

  • 本文介绍了在Python中调用Java类的方法
  • 对于做Python自动化测试要调用Java模块的人有较大帮助
  • 本文为可优原创,有不足之处,请多指教!

共收到 4 条回复

这是自动化执行发布的评论!2020_04_12_15_35_13

这是自动化执行发布的评论!2020_04_12_15_37_44

这是自动化执行发布的评论!2020_04_12_15_39_37

可优大佬讲的东西很有价值!点个赞!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册