jmeter+ant+jenkins自动化测试环境配置搭建过程

题目要求讲解“jmeter+ant+jenkins自动化测试环境配置搭建过程”的完整攻略,下面是具体的步骤:

1. 安装JMeter

JMeter 是一款常用的测试工具,我们需要先安装好。

  1. 下载安装包:Apache JMeter 下载
  2. 安装 JMeter。

2. 安装 Ant

Ant 是一个 Java 应用程序构建系统,相信大家都已经熟悉它。Ant 需要使用到 Java 环境。

  1. 下载 Ant:Apache Ant 下载
  2. 安装 Ant。

3. 配置环境变量

我们需要设置环境变量,以便在命令行中运行 JMeter 和 Ant。

  1. 打开系统变量,新增两个变量:
  2. 变量 A:JMeter 安装路径,例如 D:\apache-jmeter-5.3
  3. 变量 B:Ant 安装路径,例如 D:\apache-ant-1.10.9
  4. 编辑 Path 变量,将 A 和 B 变量的值加入到 Path 变量中,用 ";" 分割。

4. 配置 Jenkins

Jenkins 是一个常用的自动化构建和测试工具,我们需要通过 Jenkins 配置 Job。

  1. 下载 Jenkins:Jenkins 下载
  2. 安装 Jenkins,并通过浏览器访问 Jenkins。
  3. 新建一个 Job,选择“构建一个自由风格的软件项目”。
  4. 配置 Job:
  5. 勾选“此项目由 SCM 管理”。
  6. 填写 SCM 地址,例如:https://github.com/example/test.git。
  7. 在构建中,添加构建步骤,并选择“调用 Ant 构建”。
  8. 在 Ant 中,填写构建文件路径(build.xml)和目标(test)。
  9. 点击保存。

5. 编写 JMeter 脚本

我们需要编写 JMeter 脚本,以便在 Jenkins 中调用。

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.3">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="test" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP 请求" enabled="true">
        <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
        <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
          <collectionProp name="Arguments.arguments"/>
        </elementProp>
        <stringProp name="HTTPSampler.domain">http://www.example.com</stringProp>
        <stringProp name="HTTPSampler.port"></stringProp>
        <stringProp name="HTTPSampler.connect_timeout"></stringProp>
        <stringProp name="HTTPSampler.response_timeout"></stringProp>
        <stringProp name="HTTPSampler.protocol"></stringProp>
        <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
        <stringProp name="HTTPSampler.path">/test</stringProp>
        <stringProp name="HTTPSampler.method">GET</stringProp>
        <elementProp name="HTTPSampler.header_manager" elementType="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header 管理器" enabled="true">
          <collectionProp name="HeaderManager.headers">
            <elementProp name="" elementType="Header">
              <stringProp name="Header.name">Content-Type</stringProp>
              <stringProp name="Header.value">application/json</stringProp>
            </elementProp>
          </collectionProp>
        </elementProp>
        <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        <stringProp name="HTTPSampler.arguments"></stringProp>
        <boolProp name="HTTPSampler.follow_redirects">false</boolProp>
        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
        <stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
        <boolProp name="HTTPSampler.monitor">false</boolProp>
        <stringProp name="HTTPSampler.embedded_resources_regex"></stringProp>
        <stringProp name="HTTPSampler.useMD5">false</stringProp>
        <stringProp name="HTTPSampler.embedded_url"></stringProp>
      </HTTPSamplerProxy>
      <hashTree/>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

6. 编写 Ant 脚本

我们需要编写 Ant 脚本,以便在 Jenkins 中调用。

<?xml version="1.0"?>
<project default="test">
    <property environment="env"/>

    <property name="src.dir" value="src"/>
    <property name="test.dir" value="test"/>
    <property name="report.dir" value="report"/>

    <path id="classpath">
        <pathelement location="${src.dir}"/>
        <pathelement location="${test.dir}"/>
        <pathelement location="lib/junit-4.12.jar"/>
        <pathelement location="lib/hamcrest-core-1.3.jar"/>
        <pathelement location="${env.JMETER_HOME}/bin/ApacheJMeter.jar"/>
    </path>

    <target name="test" description="run JMeter test">
        <java classname="org.apache.jmeter.NewDriver" fork="true">
            <classpath>
                <path refid="classpath"/>
            </classpath>
            <arg value="-n"/>
            <arg value="-t"/>
            <arg value="test.jmx"/>
            <arg value="-l"/>
            <arg value="${report.dir}/result.jtl"/>
        </java>
    </target>
</project>

示例说明

示例 1

比如我们要测试 www.example.com 这个页面,我们需要写一个 JMeter 脚本,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.3">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="test" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP 请求" enabled="true">
        <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
        <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
          <collectionProp name="Arguments.arguments"/>
        </elementProp>
        <stringProp name="HTTPSampler.domain">http://www.example.com</stringProp>
        <stringProp name="HTTPSampler.port"></stringProp>
        <stringProp name="HTTPSampler.connect_timeout"></stringProp>
        <stringProp name="HTTPSampler.response_timeout"></stringProp>
        <stringProp name="HTTPSampler.protocol"></stringProp>
        <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
        <stringProp name="HTTPSampler.path">/</stringProp>
        <stringProp name="HTTPSampler.method">GET</stringProp>
        <elementProp name="HTTPSampler.header_manager" elementType="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header 管理器" enabled="true">
          <collectionProp name="HeaderManager.headers">
            <elementProp name="" elementType="Header">
              <stringProp name="Header.name">Content-Type</stringProp>
              <stringProp name="Header.value">text/html</stringProp>
            </elementProp>
          </collectionProp>
        </elementProp>
        <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        <stringProp name="HTTPSampler.arguments"></stringProp>
        <boolProp name="HTTPSampler.follow_redirects">false</boolProp>
        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
        <stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
        <boolProp name="HTTPSampler.monitor">false</boolProp>
        <stringProp name="HTTPSampler.embedded_resources_regex"></stringProp>
        <stringProp name="HTTPSampler.useMD5">false</stringProp>
        <stringProp name="HTTPSampler.embedded_url"></stringProp>
      </HTTPSamplerProxy>
      <hashTree/>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

然后,我们再在 Ant 构建脚本中引用这个 JMeter 脚本,运行测试用例。

示例 2

比如我们需要对一个 Web 页面进行性能测试。我们首先需要设置一个定时器,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.3">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="test" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Group" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <intProp name="LoopController.loops">1</intProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">1</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <longProp name="ThreadGroup.start_time">1440064894000</longProp>
        <longProp name="ThreadGroup.end_time">1440064894000</longProp>
        <boolProp name="ThreadGroup.scheduler">true</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
        <stringProp name="ThreadGroup.delayed_start">${__timeShift(yyyy-MM-dd HH:mm:ss,,-5,)} </stringProp>
      </ThreadGroup>
      <hashTree/>
      <ConstantTimer guiclass="TestBeanGUI" testclass="ConstantTimer" testname="固定定时器" enabled="true">
        <stringProp name="ConstantTimer.delay">5000</stringProp>
        <stringProp name="ConstantTimer.range">0</stringProp>
        <boolProp name="ConstantTimer.random_timer">false</boolProp>
        <stringProp name="ConstantTimer.sequence">0</stringProp>
      </ConstantTimer>
      <hashTree/>
      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求" enabled="true">
        <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
        <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
          <collectionProp name="Arguments.arguments"/>
        </elementProp>
        <stringProp name="HTTPSampler.domain">http://www.example.com</stringProp>
        <stringProp name="HTTPSampler.port">80</stringProp>
        <stringProp name="HTTPSampler.connect_timeout"></stringProp>
        <stringProp name="HTTPSampler.response_timeout"></stringProp>
        <stringProp name="HTTPSampler.protocol"></stringProp>
        <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
        <stringProp name="HTTPSampler.path">/</stringProp>
        <stringProp name="HTTPSampler.method">GET</stringProp>
        <elementProp name="HTTPSampler.header_manager" elementType="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header 管理器" enabled="true">
          <collectionProp name="HeaderManager.headers">
            <elementProp name="" elementType="Header">
              <stringProp name="Header.name">Content-Type</stringProp>
              <stringProp name="Header.value">text/html</stringProp>
            </elementProp>
          </collectionProp>
        </elementProp>
        <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
        <stringProp name="HTTPSampler.arguments"></stringProp>
        <boolProp name="HTTPSampler.follow_redirects">false</boolProp>
        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
        <stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
        <boolProp name="HTTPSampler.monitor">false</boolProp>
        <stringProp name="HTTPSampler.embedded_resources_regex"></stringProp>
        <stringProp name="HTTPSampler.useMD5">false</stringProp>
        <stringProp name="HTTPSampler.embedded_url"></stringProp>
      </HTTPSamplerProxy>
      <hashTree/>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

然后,在我们的 Ant 构建脚本中运行 JMeter 脚本,如下所示:

<?xml version="1.0"?>
<project default="test">
    <property environment="env"/>

    <property name="src.dir" value="src"/>
    <property name="test.dir" value="test"/>
    <property name="report.dir" value="report"/>

    <path id="classpath">
        <pathelement location="${src.dir}"/>
        <pathelement location="${test.dir}"/>
        <pathelement location="lib/junit-4.12.jar"/>
        <pathelement location="lib/hamcrest-core-1.3.jar"/>
        <pathelement location="${env.JMETER_HOME}/bin/ApacheJMeter.jar"/>
    </path>

    <target name="test" description="run JMeter test">
        <java classname="org.apache.jmeter.NewDriver" fork="true">
            <classpath>
                <path refid="classpath"/>
            </classpath>
            <arg value="-n"/>
            <arg value="-t"/>
            <arg value="test.jmx"/>
            <arg value="-l"/>
            <arg value="${report.dir}/result.jtl"/>
        </java>
    </target>
</project>

这样就可以实现对该页面的定时性能测试了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jmeter+ant+jenkins自动化测试环境配置搭建过程 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 贝塞尔曲线(b-spline)的原理与应用

    贝塞尔曲线(b-spline)的原理与应用 什么是贝塞尔曲线? 贝塞尔曲线是一种常见的参数曲线,常用于计算机图形学、CAD、计算机辅助设计等领域。它是一条由多个控制点决定的曲线,通过这些控制点的加权平均来构成一条平滑的路径。 贝塞尔曲线原理 贝塞尔曲线的原理是基于基函数上的加权平均计算实现的。每个基函数都是一个N次多项式,它可以决定曲线在某一特定位置上的形状…

    其他 2023年3月28日
    00
  • C语言内存操作函数详解

    C语言内存操作函数详解 C语言是一门近乎底层的编程语言,与其他高级编程语言相比,C语言提供了更加精细的内存操作功能。C语言内存操作函数可以分为以下四类: 内存拷贝函数 内存比较函数 内存设置函数 内存分配和释放函数 下面将详细讲解这些函数。 一、内存拷贝函数 memcpy()、memmove()和strcpy()函数都可以进行内存拷贝的操作。其中,memcp…

    other 2023年6月26日
    00
  • 算法打基础——HashⅡ: 全域哈希与完美哈希

    算法打基础——HashⅡ:全域哈希与完美哈希的完整攻略 本文将为您提供关于全域哈希和完美哈希的完整攻略,包括算法原理、步骤和示例。 全域哈希 全域哈希是一种哈希函数族,它可以在不知道输入数据分布的情况下,将输入数据映射到哈希表中的不同位置。全域哈希的特点是,对于任意两个不同的输入数据,它们被映射到同一个哈希表位置的概率非常小。 算法原理 全域哈希的原理是,将…

    other 2023年5月6日
    00
  • ae怎么制作一段倒计时效果?

    当制作一段倒计时效果时,可以使用HTML、CSS和JavaScript来实现。下面是一个详细的攻略,包含两个示例说明。 步骤1:创建HTML结构 首先,我们需要创建一个HTML文件,并添加所需的元素。在<body>标签中添加一个<div>元素,用于显示倒计时。示例代码如下: <!DOCTYPE html> <html…

    other 2023年7月28日
    00
  • php获取目录中所有文件名及判断文件与目录的简单方法

    下面是“php获取目录中所有文件名及判断文件与目录的简单方法”的完整攻略。 1. 获取目录中所有文件名 我们可以使用PHP中的scandir()函数获取目录中的所有文件名。scandir()函数返回一个数组,它包含目录中的所有文件和子目录的名称。下面是一个获取目录中所有文件的示例代码: $dir = "/path/to/directory&quot…

    other 2023年6月26日
    00
  • 浅谈pycharm使用及设置方法

    浅谈PyCharm使用及设置方法 PyCharm是一款非常流行的Python集成开发环境,拥有强大、智能的代码编辑、调试、测试和优化功能,可以大大提高Python程序开发效率。本文将介绍PyCharm的基本使用及设置方法。 安装和环境配置 在官网(https://www.jetbrains.com/pycharm/)下载相应版本的PyCharm,并安装到指定…

    other 2023年6月26日
    00
  • IIC双向电平转换电路设计

    IIC双向电平转换电路设计的完整攻略 IIC总线是一种常用的串行通信协议,用于连接微控制器和各种外设。由于不同设备的电平标准可能不同,因此需要使用电转换电路来实现IIC总线的双向通信。本文将提供IIC双向电平转换电路设计的完整攻略,包括以下内容: 硬件和软件要求 电路设计 示例 硬件和软件要求 在设计IIC双向电平转换电路之前,需要准备以下硬件和软件: 硬件…

    other 2023年5月6日
    00
  • iOS12降级提示未能更新iPhone,发生未知错误(1667)的解决方法

    iOS12降级提示未能更新iPhone,发生未知错误 (1667) 的解决方法 如果你正在尝试降级到 iOS 12,并且在更新过程中遇到错误代码 1667,则说明升降级过程中出现了一些问题。这里提供了一些可行的解决方法来帮助您解决问题。 解决方法一:更新 iTunes 首先,您需要确保您正在使用最新版本的 iTunes 软件。例如,如果您使用的是旧版 iTu…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部