使用Maven集成JMeter执行接口测试的详细步骤,以及多种异常的处理方式

1.创建Maven项目

1.1 创建Maven Project

首先,创建一个Maven Project,如下图:
在这里插入图片描述
在这里插入图片描述
然后选择好存储路径,再save即可,Maven项目就创建好了,如下图:
在这里插入图片描述

1.2 在项目中为JMeter添加运行所需资源文件

在Maven中运行JMeter,需要我们手动为项目路径下添加三种资源文件:

  1. 测试脚本文件(后缀为.jmx)
  2. JMeter配置文件(后缀为.properties) 。在JMeter的包里都是.properties后缀的文件,它们用来为JMeter的配置进行更改。
  3. 测试结果模板文件(后缀为.xsl)。在JMeter的包里都是.xsl后缀的文件,它们是JMeter的测试结果的模板。

1.2.1 添加测试脚本文件(后缀为.jmx)

测试脚本文件是指你的测试用例脚本,我的脚本比较简单,仅用于演示,如下图:
在这里插入图片描述
然后在项目的src\test路径下,创建名为“jmeter”的文件夹,并把jmx脚本文件复制进去,如下图:
在这里插入图片描述

1.2.2 添加JMeter配置文件(后缀为.properties)

找到你下载的JMeter的安装包(如果没下,请去 https://jmeter.apache.org/download_jmeter.cgi 这里下载),在bin文件夹下,找到这些后缀为.properties的配置文件,如下图:
在这里插入图片描述
然后复制到Maven项目的jmeter文件夹下,如下图:
在这里插入图片描述

1.2.3 添加测试结果模板文件(后缀为.xsl)

在Maven项目的src\test路径下,再创建一个名为“resources”的文件夹,如下图:
在这里插入图片描述
再回到JMeter的安装包中,在extras文件夹下,找到jmeter-results-detail-report_21.xsl和jmeter-results-report_21.xsl这两个测试结果模板文件,然后复制到resources文件夹下,如下图:
在这里插入图片描述

1.3 在pom.xml中添加相关依赖

1.3.1 pom.xml

直接为Maven注入灵魂,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.api.test</groupId>
    <artifactId>JMeterToMavenDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!--此路径用于存储JMeter的原生测试结果文件,比如csv或者jtl-->
        <jmeter.result.jtl.dir>${project.build.directory}\jmeter\results</jmeter.result.jtl.dir>
        <!--此路径用于存储由模板转换过来的详细的测试结果的html文件-->
        <jmeter.result.html.dir>${project.build.directory}\jmeter\html_detail_report</jmeter.result.html.dir>
        <!--此路径用于存储由模板转换过来的测试结果的html文件-->
        <jmeter.result.html.dir1>${project.build.directory}\jmeter\html_report</jmeter.result.html.dir1>
        <ReportName>TestReport</ReportName>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <!--核心插件,用于将Apache JMeter集成到Maven中-->
                <groupId>com.lazerycode.jmeter</groupId>
                <artifactId>jmeter-maven-plugin</artifactId>
                <version>2.7.0</version>
                <configuration>
                    <!--JMeter能够创建.jtl(XML格式)测试结果和csv测试结果。
                    默认情况下,此插件使用csv格式。这里需要将其切换为xml格式。-->
                    <resultsFileFormat>xml</resultsFileFormat>
                    <!--这里是否生成result report需要设置为false,否则运行时会出现“前言中不允许有内容”的报错。
                    因为若该项为true,无论你在.properties配置文件或者此pom文件中将结果文件的格式显示设置为xml,最后都只会生成csv的结果文件。
                    而csv的格式无法转换成我们最后要的html结果文件,就会报上述的错。-->
                    <generateReports>false</generateReports>
                    <!--忽略失败-->
                    <ignoreResultFailures>true</ignoreResultFailures>
                    <!--为结果文件添加时间戳-->
                    <testResultsTimestamp>true</testResultsTimestamp>
                    <!--指定日志级别-->
                    <overrideRootLogLevel>debug</overrideRootLogLevel>
                    <!--指定运行的jmeter脚本-->
                    <testFilesIncluded>接口自动化测试demo.jmx</testFilesIncluded>
                    <!--指定不需要运行的jmeter脚本-->
                    <testFilesExcluded>aaa.jmx</testFilesExcluded>
                </configuration>
                <executions>
                    <execution>
                        <id>jmeter-tests</id>
                        <goals>
                            <goal>jmeter</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <!--用于解析模板,并生成测试结果的html文件的插件-->
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>xml-maven-plugin</artifactId>
                <version>1.0.2</version>
                <executions>
                    <execution>
                        <!--在Maven生命周期中,通过verify命令执行JMeter的测试-->
                        <phase>verify</phase>
                        <goals>
                            <goal>transform</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <transformationSets>
                        <transformationSet>
                            <!--保存JMeter原生测试结果文件(.jtl文件)的路径-->
                            <dir>${jmeter.result.jtl.dir}</dir>
                            <!--需要解析的模板-->
                            <stylesheet>src\test\resources\jmeter-results-detail-report_21.xsl</stylesheet>
                            <!--通过模板生成测试结果的html文件-->
                            <outputDir>${jmeter.result.html.dir}</outputDir>
                            <fileMappers>
                                <fileMapper implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
                                    <targetExtension>html</targetExtension>
                                </fileMapper>
                            </fileMappers>
                        </transformationSet>
                        <transformationSet>
                            <!--保存JMeter原生测试结果文件(.jtl文件)的路径-->
                            <dir>${jmeter.result.jtl.dir}</dir>
                            <!--需要解析的模板-->
                            <stylesheet>src\test\resources\jmeter-results-report_21.xsl</stylesheet>
                            <!--通过模板生成测试结果的html文件-->
                            <outputDir>${jmeter.result.html.dir1}</outputDir>
                            <fileMappers>
                                <fileMapper implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
                                    <targetExtension>html</targetExtension>
                                </fileMapper>
                            </fileMappers>
                        </transformationSet>
                    </transformationSets>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

1.3.2 pom.xml中需要注意的问题

除了已经在pom.xml中标注出的注意事项之外,插件的版本也很重要,如下图:
在这里插入图片描述
在这里插入图片描述
各位读者在使用这些插件的时候,尽量使用最新版本的插件,因为Jmeter插件版本太低的话,会无法运行高版本的jmx脚本。而且如果插件之间的版本不匹配的话,还会产生各种各样蛋疼的抛错问题,这些我会在“3.常见问题”一章中专门进行讲述。
在这里插入图片描述
最新的插件或者依赖,可以去Maven的中央仓库搜索,地址为:https://mvnrepository.com/ 。如下图:
在这里插入图片描述
在这里插入图片描述
我写这些的目的是,教会大家如何去寻找最合适的插件或者依赖,授人以鱼不如授人以渔嘛,这样即使几十年几百年后还有人能看到我的博客,读者也不会因为复制了我这老古董的pom而翻车~
在这里插入图片描述

2.检查JMeter运行结果

执行Maven的Verify命令,就可以执行接口测试了(如果要重新执行,记得先执行clean命令,再verify),如下图:
在这里插入图片描述
测试结束后,项目路径下会生成target文件夹,在target\jmeter文件夹下,就是对应的测试报告、测试log等各种文件,如下图:
在这里插入图片描述

2.1 检查控制台结果

正常情况下,控制台运行日志是不会有任何抛错的,如下图:
在这里插入图片描述

2.2 检查jtl测试结果文件

jtl文件是JMeter原生的测试结果存储文件,在target\jmeter\results文件夹下,如下图:
在这里插入图片描述
可以使用JMeter的监听器打开查看,如下图:
在这里插入图片描述

2.3 检查html测试结果文件

html是转换过后的测试结果存储文件,在target\jmeter\html_detail_report文件夹下,如下图:
在这里插入图片描述
使用浏览器打开,如下图:
在这里插入图片描述
成功,没有问题。
在这里插入图片描述

3.常见问题

如果jmeter-maven-plugin或者xml-maven-plugin的版本不对,或者pom.xml的配置不对,则很容易出现一些非常蛋疼的问题,下面举例说明。

3.1 “Property ‘xxx’ is not recognized”

具体报错为:
编译器警告:
WARNING: ‘org.apache.xerces.jaxp.SAXParserImpl: Property ‘http://javax.xml.XMLConstants/property/accessExternalDTD’ is not recognized.’
如图:
在这里插入图片描述
这个问题的原因是jmeter-maven-plugin和xml-maven-plugin的版本太太太老啦,如果运行高版本JMeter写的脚本,就会出现这种属性无法识别的错误。
在这里插入图片描述
解决方法是按照我在上文中说的,去maven官网找到最新的版本号即可(我用的2.7.0和1.0.2,就没有这个问题了)。

3.2 “Failed to transform input file”

具体报错为:
[ERROR] Failed to execute goal org.codehaus.mojo:xml-maven-plugin:1.0-beta-3:transform (default) on project JMeterToMavenDemo: Failed to transform input file E:\workspace\Demo\JMeterToMavenDemo\target\jmeter\results\20190904-接口自动化测试demo.csv: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Content is not allowed in prolog. -> [Help 1]
如图:
在这里插入图片描述
这个问题的原因是,JMeter运行完成后,生成结果文件是csv,而不是jtl,xml-maven-plugin插件无法解析csv,就会抛这个错。
解决方法为修改pom.xml,为jmeter-maven-plugin的插件添加resultFileFromat的设置,如下图:
在这里插入图片描述

3.3 “前言中不允许有内容”

具体报错为:
[INFO] Transforming file: E:\workspace\Demo\JMeterToMavenDemo\target\jmeter\results\20190904-接口自动化测试demo.csv
ERROR: ‘前言中不允许有内容。’
ERROR: ‘com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: 前言中不允许有内容。’
如图:
在这里插入图片描述
这个问题的原因也是由于生成结果文件是csv,而不是jtl所引起。不过我检查了下,pom.xml的resultFileFromat的设置明明就是xml啊,而且我还跑到jmeter.properties文件中特意设置了jmeter.save.saveservice.output_format=xml,但是都不生效,如下两图:
在这里插入图片描述
在这里插入图片描述
最后我一顿折腾,终于发现还需要给pom添加另一项设置,测试结果才能是jtl文件,如下图:
在这里插入图片描述
generateReport需要设置为false,因为若该项为true,无论你在.properties配置文件或者此pom文件中将结果文件的格式显示设置为xml,最后都只会生成csv的结果文件。

发布了42 篇原创文章 · 获赞 15 · 访问量 9799

猜你喜欢

转载自blog.csdn.net/weixin_40326608/article/details/100519745
今日推荐