【问题标题】:Problems while using ANT for creating HTML (junit style) report使用 ANT 创建 HTML(junit 样式)报告时的问题
【发布时间】:2016-12-28 10:11:26
【问题描述】:

我正在尝试使用 ANT 为 jMeter 测试生成 HTML/Junit 样式报告。我为此创建了一个构建文件,并完成了所有先决条件,例如: 设置所需的变量,如 java home、ant home、路径变量;将 ant 构建文件和所需的 .jmx 文件(用于 jmeter 执行)放在一个文件夹中,并调用指向同一文件夹的“ant”命令。 我尝试通过将命令作为 antant -Dtest="Sample Workload Script" 来调用 ant 构建文件。

我遇到的问题是,当我运行此命令时,它会执行测试计划,然后给出 java 平台错误(如附图所示)并停止构建。任何可能导致这种情况的指针?

Java Platform Error when running the ANT Build file

我在某处读到 ANT 版本可能与 java 1.8 不兼容。说到我正在使用 Ant 1.9.7 和 java 1.8.73

我的构建文件:

<?xml version="1.0"?>
<!--
   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.
-->
<project name="ant-jmeter" default="all">
    <description>

        Sample build file for use with ant-jmeter.jar
        See http://www.programmerplanet.org/pages/projects/jmeter-ant-task.php

    To run a test and create the output report:
        ant -Dtest=script

    To run a test only:
        ant -Dtest=script run

    To run report on existing test output
        ant -Dtest=script report

    The "script" parameter is the name of the script without the .jmx suffix.

    Additional options:
        -Dshow-data=y - include response data in Failure Details
        -Dtestpath=xyz - path to test file(s) (default user.dir).
                         N.B. Ant interprets relative paths against the build file
        -Djmeter.home=.. - path to JMeter home directory (defaults to parent of this build file)
        -Dreport.title="My Report" - title for html report (default is 'Load Test Results')

        Deprecated:
        -Dformat=2.0 - use version 2.0 JTL files rather than 2.1

    </description>

    <property name="testpath" value="${user.dir}"/>                 <!--<property name="testpath" value="${user.dir}"/>-->
    <property name="jmeter.home" value="C:\apache-jmeter-3.0"/>
    <property name="report.title" value="Load Test Results"/>

    <!-- Name of test (without .jmx) -->
    <property name="test" value="Test"/>

    <!-- Should report include response data for failures? -->
    <property name="show-data" value="n"/>

    <property name="format" value="2.1"/>

    <condition property="style_version" value="">
        <equals arg1="${format}" arg2="2.0"/>
    </condition>

    <condition property="style_version" value="_21">
        <equals arg1="${format}" arg2="2.1"/>
    </condition>

    <condition property="funcMode">
        <equals arg1="${show-data}" arg2="y"/>
    </condition>

    <condition property="funcMode" value="false">
      <not>
        <equals arg1="${show-data}" arg2="y"/>
      </not>
    </condition>

    <!-- Allow jar to be picked up locally -->
    <path id="jmeter.classpath">
        <fileset dir="${basedir}">
          <include name="ant-jmeter*.jar"/>
        </fileset>
    </path>

    <taskdef
        name="jmeter"
        classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
    <!--classpathref="jmeter.classpath"-->
    <!--classpathref="C:\apache-jmeter-3.0\extras"-->

    <target name="all" depends="run,report"/>

    <target name="run">
        <echo>funcMode = ${funcMode}</echo>
        <delete file="${testpath}/${test}.html"/>
        <jmeter
            jmeterhome="${jmeter.home}"
            testplan ="${basedir}/${test}.jmx"          
            resultlog="${basedir}/${test}.jtl">
        <!--
            <jvmarg value="-Xincgc"/>
            <jvmarg value="-Xmx128m"/>
            <jvmarg value="-Dproperty=value"/>
            <jmeterarg value="-qextra.properties"/>
        -->
            <!-- Force suitable defaults -->
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
            <property name="jmeter.save.saveservice.assertion_results" value="all"/>
            <property name="jmeter.save.saveservice.bytes" value="true"/>
            <property name="file_format.testlog" value="${format}"/>
            <property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
        </jmeter>
    </target>

    <property name="lib.dir" value="${jmeter.home}/lib"/>

    <!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ -->
    <path id="xslt.classpath">
        <fileset dir="${lib.dir}" includes="xalan*.jar"/>
        <fileset dir="${lib.dir}" includes="serializer*.jar"/>
    </path>

    <target name="report" depends="xslt-report,copy-images">
        <echo>Report generated at ${report.datestamp}</echo>
    </target>

    <target name="xslt-report" depends="_message_xalan">
        <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
        <xslt
            classpathref="xslt.classpath"
            force="true"
            in="${basedir}/${test}.jtl"
            out="${basedir}/${test}.html"
            style="${basedir}/jmeter-results-detail-report${style_version}.xsl">
            <param name="showData" expression="${show-data}"/>
            <param name="titleReport" expression="${report.title}"/>
            <param name="dateReport" expression="${report.datestamp}"/>
        </xslt>
    </target>

    <!-- Copy report images if needed -->
    <target name="copy-images" depends="verify-images" unless="samepath">
        <copy file="${basedir}/expand.png" tofile="${testpath}/expand.png"/>
        <copy file="${basedir}/collapse.png" tofile="${testpath}/collapse.png"/>
    </target>

    <target name="verify-images">
        <condition property="samepath">
                <equals arg1="${testpath}" arg2="${basedir}" />
        </condition>
    </target>

    <!-- Check that the xalan libraries are present -->
    <condition property="xalan.present">
          <and>
              <!-- No need to check all jars; just check a few -->
            <available classpathref="xslt.classpath" classname="org.apache.xalan.processor.TransformerFactoryImpl"/>
            <available classpathref="xslt.classpath" classname="org.apache.xml.serializer.ExtendedContentHandler"/>
          </and>
    </condition>

    <target name="_message_xalan" unless="xalan.present">
          <echo>Cannot find all xalan and/or serialiser jars</echo>
        <echo>The XSLT formatting may not work correctly.</echo>
        <echo>Check you have xalan and serializer jars in ${lib.dir}</echo>
    </target>


</project>

【问题讨论】:

    标签: file ant build jmeter


    【解决方案1】:

    更新build.xml 文件的“jmeter”部分,如下所示:

    <jmeter
        jmeterhome="${jmeter.home}"
        testplan ="${basedir}/${test}.jmx"          
        resultlog="${basedir}/${test}.jtl"
        jmeterlogfile="${basedir}/jmeter.log"> <!-- add this line to enabled logging-->
    

    重新运行您的测试并查看您的C:\workspace\CPT 文件夹下的jmeter.log 文件 - 它应该包含足够的故障排除信息,以便您能够找出原因。如果您在解释日志文件时遇到问题 - 将其添加到您的问题中。

    参考资料:

    【讨论】:

    • 我添加了该行并运行它。它没有在基本目录中提供任何 jmeter.log 文件。
    • 顺便说一句,当我检查java版本时有一个歧义。
    • 当我执行 java -version 时,它显示java version "1.8.0_73" Java(TM) SE Runtime Environment (build 1.8.0_73-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)。当我执行 javac -version 时,它显示javac 1.8.0_60。这会是核心问题吗?
    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多