Python作为一种脚本语言,大量用于测试用例和测试代码的编写,尤其适用于交互式业务场景。实际应用中大多数方法以Java方法实现其功能,如Linux运维、客户端加解密方法等需要Python执行调用验证。Python可以作为一门胶水语言使用,可以用其它语言的优势来弥补自身如性能方面的不足,Jpype就是在Python中使用jvm的第三方库。
安装
依赖环境
Python
Java
Jpype
numpy
执行Python环境安装,其他环境请自行安装
pip install jpype1
pip install numpy
备注:如果通过命令无法完成安装,请下载对应版本的xxx.whl文件执行安装
下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
简单示例
学习编程“Hello World”走天下
Jpype程序执行顺序:
设置参数启动JAVA虚拟机
运行JAVA代码
关闭虚拟机
示例代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Benjamin
# @Time : 2018/8/27 23:32
fromjpypeimport*
startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll","-ea")
java.lang.System.out.println("hello World")
shutdownJVM()
深入示例
Python调用Java类型汇总:
直接调用Java API
调用Java 第三方 Jar 扩展包
调用Java Class文件
First Demo
使用Python直接调用Java默认API
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Benjamin
# @Time : 2018/8/3 16:09
# Demo 1
# 测试Python 调用 Java 代码
importjpype
# 启动JVM
jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll","-ea")
# 执行Java代码
jpype.java.lang.System.out.println("hello World")
# 关闭JVM
jpype.shutdownJVM()
Second Demo
使用Python调用Java第三方Jar扩展包
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Benjamin
# @Time : 2018/8/3 16:09
# Demo 2
# 应用第三方jar包
importjpype
# 启动JVM并加载jar包,并带入相应的库方法
jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll","-ea","-Djava.class.path=%s"%'C:\\Users\\Benjamin\Desktop\python\TestPro\helloworld.jar')
JDClass = jpype.JClass("org.na.HelloName")
# 实例化对象
jd = JDClass()
#两种创建jd的方法
#jd = JPackage("jpype").JpypeDemo()
# 调用java方法
jprint = jpype.java.lang.System.out.println
# 执行 Jar包字符串拼接解析方法
jprint(jd.HelloName("Benjamin"))
# 执行Jar包加法
jprint(jd.NumAdd(2,4))
# 关闭jvm
jpype.shutdownJVM()
小坑讲解:
1:public static String HelloName() 静态方法无法被调用,只能调用非静态方法
2:无法获取Java中的Print值,只能获取Return值
Third Demo
使用Python调用Java Class文件(Class文件带Package目录信息)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Benjamin
# @Time : 2018/8/3 16:09
# Demo 3
# 调用带路径同目录输出的java class文件
# java文件中带package信息,获取eclipse的编译文件必须带路径访问
importjpype
# 启动JVM
jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll","-ea")
# 添加指定class文件
JDClass = jpype.JClass("org.na.HelloName")
# 实例化对象
javaInstance = JDClass()
# 调用JAVA对象的方法,Python方法混用
print(javaInstance.HelloName("Benjamin"))
# 调用java calc 方法并赋值
NumAdd = javaInstance.NumAdd(3,4)
print(NumAdd)
# 关闭jvm
jpype.shutdownJVM()
Third Demo Pro
使用Python调用Java Class文件(Class文件不带Package目录信息)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Benjamin
# @Time : 2018/8/3 16:09
# Demo 4
# 调用不带路径同目录输出的java class文件
# java文件中不带package信息为空,编译命令为:javac HellName.java
importjpype
# 启动JVM
jpype.startJVM("C:\code_path\java\jre\\bin\server\jvm.dll","-ea")
# 添加指定class文件
JDClass = jpype.JClass("HelloName")
# 实例化对象
javaInstance = JDClass()
# 调用JAVA对象的方法,并与Python方法混用
print(javaInstance.HelloName("Benjamin"))
# 调用java calc方法,并赋值给指定名称
NumAdd= javaInstance.NumAdd(3,4)
print(NumAdd)
# 关闭jvm
jpype.shutdownJVM()
总结
Jpype提供了强大而灵活的Java虚拟机接口,使得Python的扩展性进一步提升,Python的优雅语法,配上Java的工程化性能,可以使测试开发更加高效。
赠言
“人与动物最本质的区别在于人能制造和使用工具"
领取专属 10元无门槛券
私享最新 技术干货