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

yizhihongxing

题目要求讲解“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日

相关文章

  • 简单了解JavaScript作用域

    简单了解JavaScript作用域攻略 什么是作用域? 作用域是指在程序中定义变量的区域,它决定了变量的可见性和生命周期。在JavaScript中,有全局作用域和局部作用域两种。 全局作用域:在整个程序中都可以访问的变量被称为全局变量,它们在程序开始执行时创建,在程序结束时销毁。 局部作用域:在函数内部定义的变量被称为局部变量,它们只能在函数内部访问,函数执…

    other 2023年8月19日
    00
  • 自己搭建cdn服务器赚钱

    以下是详细的步骤和示例: 步骤1:选择CDN 首先,您需要选择一个CDN服务器。您可以选择一些知名的CDN服务提供商,如阿里云腾讯云、百度云等,也可以选择一些开源的CDN服务器,如Nginx、Varnish等。 步骤2:搭建CDN服务器 以下是使用Nginx搭建CDN服务器的示例 示例1:安装Nginx 首先,您需要安装Nginx。您可以使用以下命令在Ubu…

    other 2023年5月6日
    00
  • python学习笔记3.1_数据读取常用函数参数

    以下是详细讲解“python学习笔记3.1_数据读取常用函数参数的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: Python学习笔记3.1_数据读取常用函数参数攻略 在Python中,数据读取是一个非常常见的。本攻略将介绍数据读取常用函数的参数和用法。 1. open()函数 open()函数是Python中用于打开文件的函数,其常…

    other 2023年5月10日
    00
  • 给C语言初学者的学习建议

    非常好,给C语言初学者的学习建议可以从以下几个方面进行考虑: 1. 入门基础 C语言的基础极其重要,学习者需要掌握好以下几点: 变量和数据类型:需要熟悉基础的变量和数据类型的定义与使用,包括int、float、double等数据类型的声明,以及变量的命名规范和使用方法。 运算符和表达式:可能用到的运算符包括加减乘除、赋值、关系、逻辑、位运算等,熟练掌握运算符…

    other 2023年6月27日
    00
  • c#tcp协议收发数据(tcpclient发 socket收)

    以下是关于“C# TCP协议收发数据(TcpClient发Socket收)”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议。在TCP协议中,数据被分割成TCP报文段,并通过网络传输。TcpClient是C#中用于实现TCP…

    other 2023年5月7日
    00
  • SQL Server 批量插入数据的完美解决方案

    以下是SQL Server批量插入数据的完美解决方案的完整攻略,包含两个示例说明: 1. 使用BULK INSERT语句 BULK INSERT语句是SQL Server提供的高效的批量插入数据的方法。以下是一个示例: BULK INSERT dbo.MyTable FROM ‘C:\\data\\mydata.csv’ WITH ( FIELDTERMIN…

    other 2023年10月18日
    00
  • Android嵌套线性布局玩法坑解决方法

    Android嵌套线性布局玩法坑解决方法攻略 在Android开发中,使用线性布局(LinearLayout)进行UI设计是非常常见的。然而,当我们需要在一个线性布局中嵌套另一个线性布局时,可能会遇到一些问题和坑。本攻略将详细讲解Android嵌套线性布局的玩法,并提供解决方法。 问题描述 当我们在一个线性布局中嵌套另一个线性布局时,可能会出现以下问题: 布…

    other 2023年7月28日
    00
  • 深入分析 网吧网络常见问题与解决方案

    深入分析 网吧网络常见问题与解决方案 问题描述 在网吧的网络中,常常出现以下问题: 网络不稳定,游戏经常卡顿、断线或延迟严重 网络速度慢,用户体验差 网络安全方面的问题,例如病毒入侵、黑客攻击等 这些问题会影响网吧的营业和用户体验,因此需要深入分析问题并提出解决方案。 分析与解决方案 1. 网络不稳定,游戏经常卡顿、断线或延迟严重 这通常是由于网络延迟(pi…

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