Jmeter 接口自动化框架 (二) 创建基于 MAVEN 的本地 Jmeter 自动化工程

核心依赖

maven 能够构建并自动执行 Jmeter 脚本,主要是依赖于 maven 插件 jmeter-maven-plugin,插件地址和使用说明,github 地址,最新版本为 2.7.0 支持 Jmeter4.0,如果脚本中用到 Json 断言的必须用这个版本。

创建 maven 工程

  1. 创建一个普通的 maven 工程,在pom.xml配置jmeter-maven-plugin的选项和功能,如下图按步骤创建
    02-创建本地自动化工程-2018820172755

  2. 给工程起个名字
    02-创建本地自动化工程-2018820172213

  3. 工程的src/test/目录新建一个目录jmeter,这个目录是存放 Jmeter 执行脚本的
    02-创建本地自动化工程-201882017415

  4. 配置jmeter-maven-plugin,在pom.xml文件的<build><plugins>路径下添加以下配置,注意version那里正常应该填写2.7.0,这里有二次开发。

<plugin>
    <groupId>com.lazerycode.jmeter</groupId>
    <artifactId>jmeter-maven-plugin</artifactId>
    <version>DEV-SNAPSHOT</version>
    <executions>
        <execution>
            <id>jmeter-tests</id>
            <phase>verify</phase>
            <goals>
                <goal>jmeter</goal>
                <goal>configure</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!--设置虚拟机XMS-->
        <jMeterProcessJVMSettings>
            <xms>2048</xms>
            <xmx>2048</xmx>
        </jMeterProcessJVMSettings>
        <!-- 指定测试内容,可用正则匹配-->
        <testFilesIncluded>
            <jMeterTestFile>${jMeterTestFile}</jMeterTestFile>
        </testFilesIncluded>
        <jmeterExtensions>
            <artifact>cn.yiapi:apitest:1.0-SNAPSHOT</artifact>
            <artifact>mysql:mysql-connector-java:6.0.6</artifact>
        </jmeterExtensions>
        <propertiesJMeter>
            <tcp.binarylength.prefix.length>4</tcp.binarylength.prefix.length>
        </propertiesJMeter>
    </configuration>
</plugin>
  1. 运行指定命令,打开项目配置选项,按下图配置脚本执行命令
    02-创建本地自动化工程-2018820175321

  2. 在 IDEA 右侧选中 maven 工程选项,执行 verfy 或 install 选项,
    02-创建本地自动化工程-201882018311

  3. 执行成功时如下显示,注意配置参数的文件名中的*号为通配符。
    02-创建本地自动化工程-201882018452

Jmeter 如何优雅的调用 JAVA 方法

创建的 maven 工程除了用插件执行 Jmeter 脚本外,也可以创建 JAVA 类和方法,方便在 Jmeter 中调用,以下主要讲解如何编写和调用 JAVA 方法。

  1. 在本地刚创建的 JAVA 工程里创建一个包cn.yiapi.jmeterext,创建一个 demo 类
package cn.yiapi.jmeterext;

public class SumDemo {
    public static int getSum(int a, int b) {
        return a+b;
    }
}

  1. 新建一个 Jmeter 脚本,在Sampler上添加一个后置处理器BeanShell PostProcessor,里面编写如下代码 java import cn.yiapi.jmeterext.*; int a=3; int b=4; int sum = SumDemo.getSum(a,b); System.out.println("a+b="+sum);
  2. 对于本工程自身来说引用 JAVA 方法 ,只需要在jmeter-maven-plugin属性里配置对整个项目的 JAR 依赖就可以在运行直接实时引用了,其实是在运行时工程 install 生成一个新包,插件再把生成的 JAR 依赖放到对应的引用目录,这里引用了工程自身的 JAR 包依赖和一个 mysql 的 JAR 包依赖。
<jmeterExtensions>
  <artifact>cn.yiapi:apitestdemo:1.0-SNAPSHOT</artifact>
  <artifact>mysql:mysql-connector-java:5.1.40</artifact>
</jmeterExtensions>
  1. 重新执行mvn install命令,查看文件执行结果,能正常显示结果即为正常
    02-创建本地自动化工程-2018821135914

  2. 运行本地 Jmeter 时,只需要将上面的工程生成的 JAR 放入到 Jmeter 目录下的lib/ext目录后重新启动 Jmeter 即可,而不需要利用 Jmeter 的函数模块写函数再一个一个引用那么麻烦了。

  3. 在本地执行 Jmeter 时如果你创建的类引用了其它 JAR 包同样需要把其它 JAR 包一起放到指定位置,也可以使用打包工具把所有依赖包打到一个包里。在 pom.xml 配置打包插件。

        <plugin>
      <artifactId> maven-assembly-plugin </artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>cn.yiapi.App</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    
  4. 在 Jenkins 里用 maven 执行时不需要把相互依赖的 JAR 都引入,但本地执行时需要把所有依赖包打到一个包里放到 Jmeter 的lib/ext目录下,引入打包插件配置后会打成两个包,一个无依赖可以配给 pom.xml 里,一个有依赖的给本地 Jmeter 使用
    02-创建本地自动化工程-2018821141052

下章主要内容

本地工程相关的配置大概如上,下章主要讲述 Jenkins 持续集成相关的配置。


↙↙↙阅读原文可查看相关链接,并与作者交流