zoukankan      html  css  js  c++  java
  • Jenkins 对项目持续集成的配置之二 API接口自动化 Ant+Jmeter

    先介绍一下Ant+Jmeter

    我的另一篇文章有讲在linux上部署ant + jmeter以满足CI持续化集成

    https://www.cnblogs.com/qianjinyan/p/9067212.html 

     ##########################################################################################################################################################

    今天琢磨了一下,可以不用ant吗?

    直接Jmeter执行jmx工程,然后发送测试结果到指定邮箱

    从理论上讲感觉是可行的,

    毕竟windows下进入jmeter的bin目录后,用下面N0-GUI屡试不爽啊

    jmeter -n -t /home/jasqia/apache-jmeter4.0/jmxfile/ikea/*.jmx -l /home/jasqia/apache-jmeter4.0/jmxfile/ikea  -e -o /home/jasqia/apache-jmeter4.0/jmxfile/ikea02/

    • -h 帮助 -> 打印出有用的信息并退出
    • -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
    • -t 测试文件 -> 要运行的 JMeter 测试脚本文件
    • -l 日志文件 -> 记录结果的文件
    • -r 远程执行 -> 启动远程服务
    • -H 代理主机 -> 设置 JMeter 使用的代理主机
    • -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号

            例如:jmeter -n -t test1.jmx -l logfile1.jtl -H xx.xx.xx.xx -P 8080

    为什么不能在Linux上试一下呢

    Step1: 设置了Linux上的环境变量,jdk8以上,因为我用的Jmter4.0,必须高版本的JDK

    [root@ntgsrv11 etc]# java -version
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
    

    Step2: 我遇到的各种问题,目前正在填坑中

    [root@ntgsrv11 bin]# sudo ./jmeter -n -t /home/jasqia/apache-jmeter4.0/jmxfile/ikea/*.jmx -l /home/jasqia/apache-jmeter4.0/jmxfile/ikea  -e -o /home/jasqia/apache-jmeter4.0/jmxfile/ikea02/
    sudo: ./jmeter: command not found
    [root@ntgsrv11 bin]# sudo ./jmeter.sh -n -t /home/jasqia/apache-jmeter4.0/jmxfile/ikea/*.jmx -l /home/jasqia/apache-jmeter4.0/jmxfile/ikea  -e -o /home/jasqia/apache-jmeter4.0/jmxfile/ikea02/
    Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
    At least one of these environment variable is needed to run this program

      

    # /etc/profile
    
    # System wide environment and startup programs, for login setup
    # Functions and aliases go in /etc/bashrc
    
    # It's NOT a good idea to change this file unless you know what you
    # are doing. It's much better to create a custom.sh shell script in
    # /etc/profile.d/ to make custom changes to your environment, as this
    # will prevent the need for merging in future updates.
    
    pathmunge () {
        case ":${PATH}:" in
            *:"$1":*)
                ;;
            *)
                if [ "$2" = "after" ] ; then
                    PATH=$PATH:$1
                else
                    PATH=$1:$PATH
                fi
        esac
    }
    
    
    if [ -x /usr/bin/id ]; then
        if [ -z "$EUID" ]; then
            # ksh workaround
            EUID=`id -u`
            UID=`id -ru`
        fi
        USER="`id -un`"
        LOGNAME=$USER
        MAIL="/var/spool/mail/$USER"
    fi
    
    # Path manipulation
    if [ "$EUID" = "0" ]; then
        pathmunge /sbin
        pathmunge /usr/sbin
        pathmunge /usr/local/sbin
    else
        pathmunge /usr/local/sbin after
        pathmunge /usr/sbin after
        pathmunge /sbin after
    fi
    
    HOSTNAME=`/bin/hostname 2>/dev/null`
    HISTSIZE=1000
    if [ "$HISTCONTROL" = "ignorespace" ] ; then
        export HISTCONTROL=ignoreboth
    else
        export HISTCONTROL=ignoredups
    fi
    
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
    
    # By default, we want umask to get set. This sets it for login shell
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
        umask 002
    else
        umask 022
    fi
    
    for i in /etc/profile.d/*.sh ; do
        if [ -r "$i" ]; then
            if [ "${-#*i}" != "$-" ]; then
                . "$i"
            else
                . "$i" >/dev/null 2>&1
            fi
        fi
    done
    
    unset i
    unset pathmunge
    HISTTIMEFORMAT="%F %R "
    export HISTSIZE=10000
    export TMOUT=0
    
    #set Ant enviroment
    
        export ANT_HOME=/home/jasqia/apache-ant-1.10.3
        export PATH=$PATH:$ANT_HOME/bin
    
    #set jmeter enviroment
    export JMETER_HOME=home/jasqia/apache-jmeter4.0
    export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH
    
    export JAVA_HOME=/opt/jdk1.8.0_131
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
    alias vi='vim'
    

      

     目前的Jmeter文件

    #! /bin/sh
    
    ##   Licensed to the Apache Software Foundation (ASF) under one or more
    ##   contributor license agreements.  See the NOTICE file distributed with
    ##   this work for additional information regarding copyright ownership.
    ##   The ASF licenses this file to You under the Apache License, Version 2.0
    ##   (the "License"); you may not use this file except in compliance with
    ##   the License.  You may obtain a copy of the License at
    ##
    ##       http://www.apache.org/licenses/LICENSE-2.0
    ##
    ##   Unless required by applicable law or agreed to in writing, software
    ##   distributed under the License is distributed on an "AS IS" BASIS,
    ##   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    ##   See the License for the specific language governing permissions and
    ##   limitations under the License.
    
    ##   ==============================================
    ##   Environment variables:
    ##   JVM_ARGS - optional java args, e.g. -Dprop=val
    ##
    ##   e.g.
    ##   JVM_ARGS="-Xms1g -Xmx1g" jmeter etc.
    ##
    ##   Do not set the variables in this script. Instead put them into a script
    ##   setenv.sh in JMETER_HOME/bin to keep your customizations separate.
    ##
    ##   JAVA_HOME        Must point at your Java Development Kit installation.
    ##                    Required to run the with the "debug" argument.
    ##
    ##   JRE_HOME         Must point at your Java Runtime installation.
    ##                    Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
    ##                    are both empty, JMeter will try to guess JAVA_HOME.
    ##                    If JRE_HOME and JAVA_HOME are both set, JAVA_HOME is used.
    ##
    ##   GC_ALGO          (Optional) Java runtime options to specify JVM garbage collection
    ##                    algorithm
    ##                    Defaults to "-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20"
    ##
    ##   HEAP             (Optional) Java runtime options for memory management
    ##                    used when JMeter is started.
    ##                    Defaults to "-Xms1g -Xmx1g -X:MaxMetaspaceSize=256m"
    ##
    ##   JMETER_HOME      (Optional) May point to your JMeter install dir. If empty
    ##                    it will be set relativ to this script.
    ##
    ##   JMETER_LANGUAGE  (Optional) Java runtime options to specify used language
    ##                    Defaults to "-Duser.language=en -Duser.region=EN"
    ##
    ##   JMETER_OPTS      (Optional) Java runtime options used when JMeter is started.
    ##                    Special options for operating systems might be added by JMeter.
    ##
    ##   ==============================================
    
    # resolve links - $0 may be a softlink (code as used by Tomcat)
    # N.B. readlink would be a lot simpler but is not supported on Solaris
    PRG="$0"
    
    while [ -h "$PRG" ]; do
      ls=`ls -ld "$PRG"`
      link=`expr "$ls" : '.*-> (.*)$'`
      if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
      else
        PRG=`dirname "$PRG"`/"$link"
      fi
    done
    
    PRGDIR=`dirname "$PRG"`
    
    # Only set JMETER_HOME if not already set
    [ -z "$JMETER_HOME" ] && JMETER_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
    
    if [ -r "${JMETER_HOME}/bin/setenv.sh" ]; then
      . "${JMETER_HOME}/bin/setenv.sh"
    fi
    
    # Make sure prerequisite environment variables are set
    if [ -z "$JAVA_HOME" -a -z "$JRE_HOME" ]; then
      if [ "`uname`" = "Darwin" ]; then
        #
        if [ -x '/usr/libexec/java_home' ] ; then
          export JAVA_HOME=`/opt/jdk1.8.0_131`
        #
        elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then
          export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
        fi
      else
        JAVA_PATH=`which java 2>/dev/null`
        if [ "x$JAVA_PATH" != "x" ]; then
          JAVA_PATH=`dirname $JAVA_PATH 2>/dev/null`
          JRE_HOME=`dirname $JAVA_PATH 2>/dev/null`
        fi
        if [ "x$JRE_HOME" = "x" ]; then
          # XXX: Should we try other locations?
          if [ -x /usr/bin/java ]; then
            JRE_HOME=/usr
          fi
        fi
      fi
      if [ -z "$JAVA_HOME" -a -z "$JRE_HOME" ]; then
        echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
        echo "At least one of these environment variable is needed to run this program"
        exit 1
      fi
    fi
    if [ -z "$JAVA_HOME" -a "$1" = "debug" ]; then
      echo "JAVA_HOME should point to a JDK in order to run in debug mode."
      exit 1
    fi
    if [ -z "$JRE_HOME" ]; then
      JRE_HOME="$JAVA_HOME"
    fi
    if [ -z "$JAVA_HOME" ]; then
      JAVA_HOME="$JRE_HOME"
    fi
    
    #--add-modules java.activation if JAVA 9
    JAVA9_OPTS=
    
    # Minimal version to run JMeter
    MINIMAL_VERSION=8
    
    # Check if version is from OpenJDK or Oracle Hotspot JVM prior to 9 containing 1.${version}.x
    CURRENT_VERSION=`"${JAVA_HOME}/bin/java" -version 2>&1 | awk -F'"' '/version/ {gsub("^1[.]", "", $2); gsub("[^0-9].*$", "", $2); print $2}'`
    
    # Check if Java is present and the minimal version requirement
    if [ "$CURRENT_VERSION" -gt "$MINIMAL_VERSION" ]; then
        JAVA9_OPTS="--add-modules java.activation --add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.swing=ALL-UNNAMED --add-opens java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED"
    fi
    
    : "${JMETER_OPTS:=""}"
    case `uname` in
       Darwin*)
       # Add Mac-specific property - should be ignored elsewhere (Bug 47064)
       JMETER_OPTS="${JMETER_OPTS} -Xdock:name=JMeter -Xdock:icon="${PRGDIR}/../docs/images/jmeter_square.png" -Dapple.laf.useScreenMenuBar=true -Dapple.eawt.quitStrategy=CLOSE_ALL_WINDOWS"
       ;;
    esac
    
    
    #
    # Original page has disappeared, it is now only available at:
    # https://web.archive.org/web/20060614151434/http://www.atg.com/portal/myatg/developer?paf_dm=full&paf_gear_id=1100010&detailArticle=true&id=9606
    #
    # JMeter objects can generally be grouped into three life-length groups:
    #
    # - Per-sample objects (results, DOMs,...). An awful lot of those.
    #   Life length of milliseconds to a few seconds.
    #
    # - Per-run objects (threads, listener data structures,...). Not that many
    #   of those unless we use the table or tree listeners on heavy runs.
    #   Life length of minutes to several hours, from creation to start of next run.
    #
    # - Per-work-session objects (test plans, GUIs,...).
    #   Life length: for the life of the JVM.
    
    # This is the base heap size -- you may increase or decrease it to fit your
    # system's memory availability:
    : "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=512m"}"
    
    # Set language
    # Default to en_EN
    : "${JMETER_LANGUAGE:="-Duser.language=en -Duser.region=EN"}"
    
    # Uncomment this to generate GC verbose file with Java prior to 9
    # VERBOSE_GC="-verbose:gc -Xloggc:gc_jmeter_%p.log -XX:+PrintGCDetails -XX:+PrintGCCause -XX:+PrintTenuringDistribution -XX:+PrintHeapAtGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintAdaptiveSizePolicy -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps"
    
    # Uncomment this to generate GC verbose file with Java 9 and above
    # VERBOSE_GC="-Xlog:gc*,gc+age=trace,gc+heap=debug:file=gc_jmeter_%p.log"
    
    # Uncomment this if you run JMeter in DOCKER (need Java SE 8u131 or JDK 9)
    # see https://blogs.oracle.com/java-platform-group/java-se-support-for-docker-cpu-and-memory-limits
    # RUN_IN_DOCKER="-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
    
    # Finally, some tracing to help in case things go astray:
    # You may want to add those settings:
    # -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem
    : "${GC_ALGO:="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20"}"
    
    
    # Always dump on OOM (does not cost anything unless triggered)
    DUMP="-XX:+HeapDumpOnOutOfMemoryError"
    SYSTEM_PROPS="-Djava.security.egd=file:/dev/urandom"
    SERVER="-server"
    
    if [ -z "${JMETER_COMPLETE_ARGS}" ]; then
        ARGS="$JAVA9_OPTS $SERVER $DUMP $HEAP $VERBOSE_GC $GC_ALGO $SYSTEM_PROPS $JMETER_LANGUAGE $RUN_IN_DOCKER"
    else
        ARGS=""
    fi
    
    "$JAVA_HOME/bin/java" $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"
    

      

     

     [xslt] /home/jasqia/apache-jmeter4.0/jmxfile/ikea/Test.jtl:1:1: Fatal Error! Premature end of file.

    如果我活过来,我会补上我的埋坑神药 

    2018年5月22日 10:43:51  还没有活过来

    这个时间点还没有搞清楚,最近活儿多,一个测试好多开发,

    目前项目又增加里两个开发,只有我一个测试,心累。

  • 相关阅读:
    IdentityServer4系列 | 资源密码凭证模式
    IdentityServer4系列 | 客户端凭证模式
    IdentityServer4系列 | 快速搭建简易项目
    Java9系列第九篇-对HTTP2协议的支持与非阻塞HTTP-API
    跨站资源共享CORS原理深度解析
    Java9系列第8篇-Module模块化编程
    Java9系列第7篇:Java.util.Optional优化与增强
    Kubernetes的Local Persistent Volumes使用小记
    CoProcessFunction实战三部曲之三:定时器和侧输出
    CoProcessFunction实战三部曲之二:状态处理
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/9067686.html
Copyright © 2011-2022 走看看