1. 目的:
    使用Locust+Python压测账号资料接口,使用JPype调用java代码,缩短压测脚本编写
  2. 前提条件:
    进行性能压测过程中,需要压测账号相关接口,由于账号相关接口设计到加密解密,用Python重新编写加解密方式过于繁重,介于后台已开发完账号系统加解密方法,顾产生使用JPype1(用JPype1调用Java类里面的方法)
  3. 环境:
    系统:Centos
    Python版本:2.7.3
  4. 步骤
    • 安装JPype1
      pip install JPype1报如下错误:

      原因解析:缺失gcc相关配置,以及python库
      解决方式:
      Python 2.7
      $ sudo yum -y install gcc gcc-c++ kernel-devel
      $ sudo yum -y install python-devel libxslt-devel libffi-devel openssl-devel
      $ pip install JPype1
      Python 3
      $ sudo apt-get install python3-dev
      $ pip install JPype1
    • 安装java 1.6.0_41
      1. 以前有安装过java,版本且版本不对,先删除已安装的版本:
        使用rpm -qa | grep jdk,可以找到已经安装的jdk:
             java-1.8.0-openjdk-headless-1.8.0.191.b12-0.el7_5.x86_64
             java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64
             copy-jdk-configs-3.3-10.el7_5.noarch
        依次删除上面已安装的文件
            命令:yum -y remove + jdk名
            例:yum -y remove java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64
      2. 安装java 1.6.0_41使用下面命令可以查找yum库中有哪些版本的jdk
            yum search java | grep jdk
        选择java-1.6.0-openjdk.x86_64进行安装
            yum install java-1.6.0-openjdk.x86_64
        默认的安装目录为:
            /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.41.x86_64
        设置环境变量:
           vim /etc/profile
        在profile文件中添加如下内容  
            #set java environment 
           JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.41.x86_64
           JRE_HOME=$JAVA_HOME/jre
           CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
           PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin 
           export JAVA_HOME JRE_HOME CLASS_PATH PATH
         更新修改:
           source /etc/profile 
        命令行输入java会出现提示则说明安装成功
      3. 将需要调用的jar包和依赖jar包放在程序的同一目录
  5. 使用JPype:(此处遇到的问题比较多)
    • 使用jvmPath=jpype.getDefaultJVMPath(),无法获取到JVM.dll文件,改问题在centos中不会出现

      解决方式:
      在安装的Java路径下找到jvm.dll,我本机安装的jvm路径是:C:/Program Files/Java/jdk1.6.0_45/jre/bin/server/jvm.dll
      windows下替换jpype.getDefaultJVMPath()自动获取即:
      jvmPath = "C:/Program Files/Java/jdk1.6.0_45/jre/bin/server/jvm.dll"
    • Python奔溃问题:

      逻辑:
      (1)本次涉及到依据方法1返回的盐等信息,
      (2)再使用JPype调用java的加密方法
      (3)再赋予方法2的请求体值
      原因解析:从上图中框出来的代码可以看出,是在JPype调用shutdownJVM()后,调用打印函数,答应了shoutdownJVM()前的signMandA变量
      解决方式:将逻辑1返回回来的数据,通过逻辑2去调用,再将上面的逻辑3放入到逻辑2内,目的在于避免shoutdownJVM()后原逻辑2返回的数据被释放
    • 找不到jar包中的class

      原因分析如下:
      (1)打包jar包时,java版本不统一,导致数据解析时出现问题
      (2)python与JDK位数不一致,64/32,打包前确认使用哪个位数的
      (3)打包的jar包内类内的函数使用了static方法、private修饰符,导致调用失败
      解决方式:统一打包和使用环境jdk版本和位数,统一python和jdk位数
    • 压测时JVM只正常执行一次里面的内容

      原因分析:上图中打印了JVM is already started,说明在压测的时候重复去打开Jave的JVM虚拟机,导致不执行
      解决方式:打开JVM前,判断JVM状态是否为打开,配上判断JVM状态代码:
      if not jpype.isJVMStarted():
      jpype.startJVM(jvmPath, "-ea", "-Djava.class.path=%s" % jarpath)

JPype1使用总结的更多相关文章

  1. python3.6安装jpype1后引入jpype报“ImportError: numpy.core.multiarray failed to import”问题

    jpype是调用java接口的第三方库,通过该库,python可以运行java程序,从而解决一些调用java的问题,比如:java开发的接口,测试时, 有java的加密算法就不用python写一遍重复 ...

  2. python的java胶水(jpype1)

    1.直接使用pip安装jpype1 命令 pip install jpype1 但是,很不幸,提示报错,缺少VC++组件. 2.使用其他方法安装 在  https://www.lfd.uci.edu/ ...

  3. Python 3.5安装JPype

    使用命令pip install jpype1可安装jpype. 如果出现如下情况: creating build\lib.win-amd64-3.5\jpypex copying jpypex\__i ...

  4. selenium自动化过程中如何操作Flash动画

    最近在看python的爬虫框架(scrapy),一个词概括就是:"酸爽"!等把selenium自动化版块讲完后,打算写一写关于scrapy相关的知识,打算从源码角度解析下scrap ...

  5. 使用Python查询JMX

    一.介绍 我们知道 java 项目中的 JMX 接口信息是十分有用的,我们可以提取这些信息来分析或告警.但是 JMX 的 API 只在 java 中实现,因此,找到一个 Python 代码调用 Jav ...

  6. 文本离散表示(三):TF-IDF结合n-gram进行关键词提取和文本相似度分析

    这是文本离散表示的第二篇实战文章,要做的是运用TF-IDF算法结合n-gram,求几篇文档的TF-IDF矩阵,然后提取出各篇文档的关键词,并计算各篇文档之间的余弦距离,分析其相似度. TF-IDF与n ...

  7. 使用Python的http.server实现一个简易的Web Api对外提供HanLP拼音转换服务

    由于采集省市区镇数据需要对地名进行拼音转换,由于第三方高准确度接口对IP进行了限制,处理大量数据变得异常缓慢. 使用了一个折中的办法,省市区 3级(3千+)用高准确度接口(几乎没有拼错的地名),镇级( ...

  8. python2.7 (x64) 调用 java 代码实践

    背景:公司实施接口自动化测试,使用的框架python+unittest:因为开发使用的架构师SpringBoot,在测试过程中难免需要使用到python调用JAVA的一些接口,所以需要用到python ...

  9. Python的JAVA胶水——jpype

    Python的JAVA胶水--jpype python可以作为一门胶水语言使用,可以用其它语言的优势来弥补自身如性能方面的不足,jpype就是在Python中使用jvm的第三方库 文档在这里 安装 s ...

随机推荐

  1. MySQL安装脚本0104-亲试ok

    #!/bin/bash export host_ip=192.168.7.79 export password=123456   echo '#1.取master主机ip的后三位作为master的se ...

  2. 未在本地计算机上注册microsoft.ace.12.0的解决办法

    (1)去http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabase ...

  3. OO的奇妙冒险——OOP入门与字符串处理

    OO的奇妙冒险 ~OOP入门与字符串处理~ 总体分析 公测 中测(基础与进阶): 其实在我看来,从完成作业的角度来说,中测的基础与进阶并没有任何区别,都不能挂,都不太难,都对得分没有什么影响.中测的样 ...

  4. package.json和npm install、cnpm install 的問題

    問題:最近使用cnpm安装项目依赖后,运行项目出现样式错乱问题. 描述:最近项目开发,需求参插了很多个版本,所以在前端项目的主干上拉好几套分支代码.拉的分支并不会把node_modules也拉过去,所 ...

  5. css的em是根据什么来写的

    em是要依靠父元素的值来计算的 1.字体计算公式依旧 1 ÷ 父元素的font-size × 需要转换的像素值 = em值 转自:https://zhidao.baidu.com/question/7 ...

  6. window.opener和window.open

    window.open (URL,name,specs,replace)方法用于打开一个新的浏览器窗口或查找一个已命名的窗口. URL:可选.打开指定的页面的URL.如果没有指定URL,打开一个新的空 ...

  7. DCOMP——分散式计算

    新型网络DCOMP 据国外媒体2017年11月7日报道,曾经发明互联网的秘密机构“美国国防部高级研究计划局(DARPA)”如今正致力于研发能够完胜互联网的新网络,并且启动了一项链接物联网.智能手机.智 ...

  8. oralce执行计划

    看懂Oracle执行计划   最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing… 一:什么是Oracle执行计划? 执行计划是一条查询语句在 ...

  9. ERROR: Cannot load message class for [speech_control/command]. Are your messages built?

    ubuntu14.04 ROS indigo 问题: 执行查看指定消息的命令,出现下面的错误提示,找不到该消息类型. ~$ rostopic echo /speech/command ERROR: C ...

  10. jquery实现本地图片上传预览和限流处理

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...