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

PEPSI · 发布于 2017年07月17日 · 最后由 yinquanwang 回复于 2017年08月11日 · 1322 次阅读

背景:
公司实施接口自动化测试,使用的框架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 条回复
A24049

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

A24049

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

16196
PEPSI · #3 · 2017年07月17日 作者
A24049yinquanwang 回复

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

C6cbef

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

16196
PEPSI · #5 · 2017年08月09日 作者
C6cbefhero 回复

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

14517

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

14517

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

A24049
14517nowhere 回复

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

14517
A24049yinquanwang 回复

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

A24049
14517nowhere 回复

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

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