zoukankan      html  css  js  c++  java
  • Jmeter+maven+Jenkins构建云性能测试平台(二)

    继上篇Blog,本篇将重点介绍利用Maven并开发插件解析Jmeter生成的报告,于是就有Jmeter-analysis-maven-plugin这个插件,这个插件是由Aren Franka开发的,但是当你使用这个插件的时候会发现,它只能解析Http request请求的报告,不能解析如Webservice request请求的报告以及其他请求的报告,这是由于这个插件的代码中存在一个bug,于是自己动手修改了这个bug,因为通过Nongui生成的Jmeter报告是以.jtl结尾的类似于xml的文件,因此在Jmeter-analysis-maven-plugin这个插件中会采用SAX来解析报告文件。具体来看一下Jmeter报告文件的格式:

    <?xml version="1.0" encoding="UTF-8"?>
    <testResults version="1.2">
    <sample t="49" lt="0" ts="1339404299860" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-1" dt="text" by="713"/>
    <sample t="45" lt="0" ts="1339404301064" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-13" dt="text" by="713"/>
    <sample t="45" lt="0" ts="1339404301166" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-14" dt="text" by="713"/>
    <sample t="53" lt="0" ts="1339404301266" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-15" dt="text" by="713"/>
    <sample t="49" lt="0" ts="1339404301362" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-16" dt="text" by="713"/>
    <sample t="129" lt="0" ts="1339404301465" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-17" dt="text" by="713"/>
    <sample t="51" lt="0" ts="1339404301564" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-18" dt="text" by="713"/>
    <sample t="55" lt="0" ts="1339404301665" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-19" dt="text" by="713"/>
    <sample t="53" lt="0" ts="1339404301764" s="true" lb="PoscPaymentServiceImplService" rc="200" rm="OK" tn="posc 1-20" dt="text" by="713"/>
    
    </testResults>

    这是一个webservice请求所得到的测试结果,所以每个请求都是以sample开始的,如果是http请求的话,会以httpsample开始,大家可以在我的代码中看到我用了一个hashset将这两种element都放在里面,然后通过判断是否存在相关的element来解析报告,原代码中只考虑了http这种情况,不过我已经email给aren,他已经修复了这个bug。下面我们具体看一下每个属性的含义,其中ts表示每个样本结束的Timestamp,s表示请求的状态,成功为true,失败为false,lb表示请求的名称,rc表示请求的response code, rm表示response message,tn表示thread name,dt表示data type, dy表示data byte。通过解析这个xml文本我们可以生成这样一个请求结果:

    通过解析可以得到response time, tps等,还可以生成图表如下所示:

    这个可以看到是请求的表现图。

    Aren在开发Jmeter-analysis-maven-plugin这个插件的时候已经提供了,生成html,cvs, chart几种方式,我在代码中增加了一种方式就是将测试结果存入数据库。

    具体大家可以看我后续在github上上传的代码。Aren在开发该插件的时候没有将Tps, VUser这些数据放在报告中,我也在代码中做了一些修改来展示这些数据。

    总而言之使用这个插件可以很方便的来进行性能测试,我们只需要将上一篇blog所提到的关于Jmeter-maven-plugin结合本篇文章所提到的Jmeter-analysis-maven-plugin结合起来使用便可以方便的构建各种测试场景,我们只需要在pom.xml中进行如下配置:

    <plugin>
    <groupId>${project.groupId}</groupId>
    <artifactId>jmeter-maven-plugin</artifactId>
    <version>${project.version}</version>
    <!-- configure different executions of the plugin -->
    <executions>
    <execution>
    <!--
    1)
    first test run warms up the webserver.
    Used to fill caches.
    With a different set of properties since it runs much shorter than a normal test
    and also the rate of requests/second may be much lower.
    Maybe also use a different URL set.
    -->
    <id>warmup</id>
    <phase>integration-test</phase>
    <goals>
    <goal>jmeter</goal>
    </goals>
    <configuration>
    <propertiesUser>
    <!--Accesses urls for warmup (compiles JSPs, fills caches, ...)-->
    <threadgroup00.name>warmup</threadgroup00.name>
    <!--number of threads to use-->
    <threadgroup00.numberOfThreads>1</threadgroup00.numberOfThreads>
    <!--delay of the test in seconds-->
    <threadgroup00.scheduledDelay>0</threadgroup00.scheduledDelay>
    <!--duration of the test in seconds-->
    <threadgroup00.scheduledDuration>30</threadgroup00.scheduledDuration>
    <!--how long till all threads are up and running in seconds-->
    <threadgroup00.rampUp>1</threadgroup00.rampUp>
    <!--target throughput of all threads of the group per minute-->
    <!-- <threadgroup00.throughput>100000000</threadgroup00.throughput>-->
    <!-- use uris from given file -->
    <!-- <threadgroup00.dataFile>${webapp.uris}</threadgroup00.dataFile> -->
    </propertiesUser>
    </configuration>
    </execution>
    <execution>
    
    <!--
    2) Performance test
    -->
    <id>test</id>
    <phase>integration-test</phase>
    <goals>
    <goal>jmeter</goal>
    </goals>
    <configuration>
    <propertiesUser>
    <!--A user which accesses all URLs-->
    <threadgroup00.name>posc</threadgroup00.name>
    <!--number of threads to use-->
    <threadgroup00.numberOfThreads>30</threadgroup00.numberOfThreads>
    <!--number of loops-->
    <threadgroup00.numberOfLoops>2</threadgroup00.numberOfLoops>
    <!--delay of the test in seconds-->
    <threadgroup00.scheduledDelay>0</threadgroup00.scheduledDelay>
    <!--duration of the test in seconds-->
    <threadgroup00.scheduledDuration>30</threadgroup00.scheduledDuration>
    <!--how long till all threads are up and running in seconds-->
    <threadgroup00.rampUp>2</threadgroup00.rampUp>
    <!--target throughput of all threads of the group per minute-->
    <!-- <threadgroup00.throughput>100000000</threadgroup00.throughput>-->
    <!-- use uris from given file -->
    <!-- <threadgroup00.dataFile>${webapp.uris}</threadgroup00.dataFile>-->
    </propertiesUser>
    </configuration>
    </execution>
    </executions>
    
    <!-- general configuration for all executions -->
    
    <configuration>
    <!-- configure which testplans to use -->
    <testFilesIncluded>
    <testFilesIncluded>PoscPaymentServiceImplService.jmx</testFilesIncluded>
    </testFilesIncluded>
    
    <!-- protocol, server and port of tested webapp -->
    <propertiesUser>
    <protocol>${webapp.protocol}</protocol>
    <server>${webapp.host}</server>
    <port>${webapp.port}</port>
    </propertiesUser>
    </configuration>
    </plugin>
    
    <plugin>
    <groupId>${project.groupId}</groupId>
    <artifactId>jmeter-analysis-maven-plugin</artifactId>
    <version>${jmeter.analysis.maven.plugin.version}</version>
    <executions>
    <execution>
    <goals>
    <goal>analyze</goal>
    </goals>
    <phase>post-integration-test</phase>
    <configuration>
    <!--
    source file that contains jmeter result data. Needs to be XML format or a GZIPed XML format
    -->
    <source>${project.build.directory}/jmeter/results/PoscPaymentServiceImplService-120613.jtl</source>
    
    <!--
    directory where to store analysis report files. At least a file "summary.txt" will be stored here.
    -->
    <targetDirectory>${project.build.directory}/reports</targetDirectory>
    
    <!--
    Defines groups of requests by URL patterns,
    e.g. URIs starting with /mock/page are associated with group "pages". All analysis results are
    If there is no such mapping then the threadgroups from the jmeter.xml are used.
    -->
    <!--<requestGroups>-->
    <!--<test>/en-US/firefox/**</test>-->
    <!--</requestGroups>-->
    
    <!--
    If set to true, additional files "<category>-sizes.csv" and "<category>-durations.csv" will be stored.
    These files contain detailed information for response size and response durations for every URI.
    -->
    <generateCSVs>true</generateCSVs>
    
    <!--
    If set to true, additional chart files "<category>-durations.png" will be created.
    -->
    <generateCharts>true</generateCharts>
    
    <!-- The database configuration -->
    
    <userName>xxx</userName>
    
    <passWord>xxx</passWord>
    
    <dataBase>xxx</dataBase>
    
    <host>xxx.xxx.xxx.xxx:3306</host>
    
    <!--
    Mapping from resource URL to file name. Every resource will be downloaded and stored in 'targetDirectory'
    with the given filename. Tokens "_FROM_" and "_TO_" can be used as placeholders. These placeholders will
    be replaced by timestamps of execution interval (formatted as ISO8601, e.g. '20111216T145509+0100').
    -->
    <!--<remoteResources>-->
    <!--<property>-->
    <!--<name>http://yourhost/path?from=_FROM_&amp;to=_TO_</name>-->
    <!--<value>my_resource.txt</value>-->
    <!--</property>-->
    <!--</remoteResources>-->
    
    </configuration>
    </execution>
    </executions>
    </plugin>

     

    便可以完成一个测试场景,关于具体每一个element,这里不做详细解释,因为在注解中已经写的很详细了。关于如何配合CI构建云测试平台将在下一篇blog中继续阐述。

  • 相关阅读:
    robotframework用例报错后不中断继续执行
    robotframework Excel Library关键字
    robotframework操作excel
    如何快速解决 raise ReadTimeoutError(self._pool, None, 'Read timed out.')方案robotframework
    JavaScript快速排序
    pytorch 中的 split
    Pytorch的Reproducibility(可复现性)
    卷积神经网络训练经验
    Tensor RT使用记录
    (开会2019/3/16)
  • 原文地址:https://www.cnblogs.com/victorcai0922/p/2557441.html
Copyright © 2011-2022 走看看