zoukankan      html  css  js  c++  java
  • JPype1使用总结

    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)
  • 相关阅读:
    leetcode33. Search in Rotated Sorted Array
    pycharm 设置sublime text3 monokai主题
    django class Meta
    leetcode30, Substring With Concatenation Of All Words
    Sublime text3修改tab键为缩进为四个空格,
    sublime text3 python打开图像的问题
    安装上imesupport输入法依然不跟随的解决办法,
    sublime text3 的插件冲突弃用问题,
    sublime text3 BracketHighlighter括号匹配的设置
    windows 下wget的使用
  • 原文地址:https://www.cnblogs.com/cmnz/p/10157253.html
Copyright © 2011-2022 走看看