接口测试 python2.7 (x64) 调用 java 代码实践

PEPSI · 2017年07月17日 · 最后由 尹全旺 回复于 2017年08月11日 · 1748 次阅读

背景:
公司实施接口自动化测试,使用的框架 python+unittest;因为开发使用的架构师 SpringBoot,在测试过程中难免需要使用到 python 调用 JAVA 的一些接口,所以需要用到 python 调用 java 代码的相关插件----Jpype,针对这个插件的安装且费了一番周折...,接下来我给大家一一道来。
说明:
1.开发环境:win7 和 win10,均为 X64;
2.python 版本:2.7.11(64 位)
3.Jpype:0.5.4.2
4.JDK:jdk1.6.0_45
问题:
最新的 jpype 是支持 python3.x 的,但目前笔者开发环境使用的是 python2.7,所以上网查找支持 2.7 的最新版本是 jpype 是 0.5.4.2(图 1),说是最新版本其实更新是 2011 年,安装完毕后在 pycharm 可以看到安装成功(图 2),但是启动 jvm 却报:ImportError: DLL load failed: %1 ������Ч�� Win32 Ӧ�ó���,乱码请无视....

(图 1)

(图 2)
解决之路:

上述问题已经说明,我针对问题上度娘和 BING 进行搜索,发现问题主要是由于 64 位 python 调用 32 位插件所造成的,通过卸载 64 位 python 安装 32 位 python 后可以解决这个问题,但是开发统一要求是装的 64 位 python,所以该解决方案直接 pass 掉;还得考虑在 64 位 python 上怎么调用该插件,在网上查到如下信息(图 3):

(图 3)
主要通过先安装 2.7 后 - 重命名 - 再安装 2.6-拷贝覆盖 DLL 等方式,该方式经过自己试验也不成,所以 PASS 掉,不知道是不是跟自己的机器有关。。。。
最后在快失去希望的时候,无意中发现了 JPype1(0.6.2)这个插件 (图 4),通过安装这个插件后,期盼已久的 helloworld 总算出来了(图 5)。

(图 4)

(图 5)
注意事项:
1.在引用 java 代码的过程中如果需要引用其他的 jar 包,一定提前将 jar 放入到 jdk 扩展库中(目录:C:\Java\jdk1.6.0_45\jre\lib\ext,根据 jdk 安装路径而定。)
2.在 win10 环境安装时,需要使用可编译版本进行安装,需要提前安装 visualcppbuildtools 工具才行
3.在调用 java 代码时一定将注意检查入参类型,否则可能会报如下错误:
RuntimeError: No matching overloads found. at native\common\jp_method.cpp:117
以上是自个的一些总结,不喜勿喷~,希望能给大家带来些帮助~

共收到 10 条回复 时间 点赞

多谢楼主,最近开发提供的一份 java 接口加密文档,正愁不知道怎么用 python 实现

楼主,我怎么在 pycharm 里搜索不到该插件呢

尹全旺 回复

在 pycharm 中搜索不到的,你可以直接去官网下载:https://sourceforge.net/projects/jpype/files/JPype/0.5.4/😀

调一个 java 开发的接口居然要执行 java 代码? 还真的是没碰到过 你们到底在测什么接口需要调用 java 代码???

Jay_ 回复

接口自动化测试时,入参需要用到 java 代码中的加密和签名算法;如果自己重写太花费时间,所以选择直接调用。🐹

感谢楼主,我最近也是需要 python 调用 java 的加密和签名算法实现接口自动化,看到这个回答简直是太感动了

请问你是如何导入 JPype1 这个包的,我安装后发现导入不成功,但是安装显示成功;环境和你的是一样的

yangqinyuan 回复

我也是 python 调用 java 的加签加密用的 python3.x,感觉挺好的

尹全旺 回复

你装的是哪个版本的 jdk 和 jpype?

yangqinyuan 回复

1.8 的 jdk 我把加签加密算法打个 jar 包,jpype 是在官网下载的最新的好像是 0.62

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册