jmeter-ant为执行结果文件添加时间

jmeter可以使用ant自动化运行,运行结果可以通过html文件展示出来,并且可以生成日志jtl文件,文件名就是我们的jmx文件名。但是如果想知道运行开始和结束时间,就比较麻烦,写了个java脚本,解析jtl文件,取出其中的开始和结束时间戳,转化为日期格式,然后给jtl和html文件重命名。用到了dom4j jar包。

package com.yeetrack.jmeterAnt;

import java.io.File;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
* @author youthflies
* 处理jmeter jtl文件,解析里面的时间戳,为jtl文件和html文件加上运行时间
*/
public class TimeStamp
{

    private static String resultPath;
    private static List<File> fileList; 
    public static void main(String[] args)
    {
        //获取jtl文件列表
        resultPath=(new File(System.getProperty("user.dir"))).getPath()+File.separator+"results";
        fileList = new ArrayList<File>();

        readAllFile(resultPath);

        SAXReader reader = new SAXReader();
        Document document = null;

        //处理jtl文件
        for(File file : fileList)
        {
            //跳过非jtl文件
            if(!file.getName().endsWith("jtl"))
                continue;

            String starTest = null;
            String endTest = null;
            try
            {
                document = reader.read(file);
                Element rootElement = document.getRootElement();
                Iterator<Element> iterator = rootElement.elementIterator();
                starTest = iterator.next().asXML();
                while(iterator.hasNext())
                {
                    endTest = iterator.next().asXML();
                }

                int startIndex = starTest.indexOf("ts=\"");
                int endIndex = endTest.indexOf("ts=\"");
                String startTime = starTest.substring(startIndex+4, startIndex+17);
                String endTime = endTest.substring(endIndex+4, endIndex+17);

                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
                String startDate = simpleDateFormat.format(Long.parseLong(startTime));
                String endDate = simpleDateFormat.format(Long.parseLong(endTime));
                System.out.println(startDate);

                String oldName = file.getAbsolutePath();
                int startSite = oldName.indexOf(file.getName());
                String newName = oldName.substring(0, startSite)+startDate+"~"+endDate+"--"+file.getName();

                //重命名jtl文件
                file.renameTo(new File(newName));
                //重命名相应的html文件
                String htmlFileName = oldName.toLowerCase().replace("jtl", "html");
                File htmlFile = new File(htmlFileName);
                int startHtmlSite = htmlFileName.indexOf(htmlFile.getName());

                String newHtmlName = htmlFileName.substring(0, startHtmlSite)+startDate+"~"+endDate+"--"+file.getName();
                htmlFile.renameTo(new File(newHtmlName));

            } catch (Exception e)
            {
                // TODO: handle exception
            }
        }
        System.out.println("添加时间戳完毕");
    }

    private static void readAllFile(String path)
    {
        File dirFile = new File(path);
        File[] resultFiles = dirFile.listFiles();
        for(File file : resultFiles)
        {
            if(file.isDirectory())
                readAllFile(file.getAbsolutePath());
            else
            {
                if(!file.getName().contains("~"))
                fileList.add(file);
            }
        }
    }
}

将代码导成可执行jar包,放在libs文件夹中。

确认下,jmeter的jtl文件是xml文件格式的,build.xml文件,填上这一句<property name="jmeter.save.saveservice.output_format" value="xml"/>

<target name="test" >
<basename property="jmx.filename" file="${jmxfile}" suffix=".jmx"/>
<echo message="---------- Processing ${jmxfile} -----------"/>
<echo message="resultlogdir===${resultBase}/temp/${results.jtl}"/>
<jmeter jmeterhome="${jmeter-home}" resultlogdir="${resultBase}/temp/${results.jtl}" runremote="${runremote}" resultlog="${report.datestamp}${jmx.filename}.jtl"
        testplan="${jmxs.dir}/${jmx.filename}.jmx">
    <property name="jmeter.save.saveservice.output_format" value="xml"/>
    <!--<property name="jmeter.save.saveservice.response_data" value="true"/>-->
    <jvmarg value="-Xincgc"/>
    <jvmarg value="-Xms2048m"/>
    <jvmarg value="-Xmx2048m"/>  

build.xml中执行我们的jar包:

<target name="timestamp" depends="copy-images">
<java classname="com.baidu.jmeterAnt.TimeStamp">
<classpath>
    <path location="libs/timestamp.jar"></path>
</classpath>
</java >
</target> 

Ok,这样ant执行出来的文件名,2013-06-08-20-40-48~2013-06-08-20-40-48--baidu-10.jtl, 2013-06-08-21-16-38~2013-06-08-21-16-39--itebeta-10.html。方便知晓运行时间,监控服务器状态。

jenkins+ant+jmeter自动化性能测试平台

版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=587