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日

相关文章

  • 利用JQuery的load函数动态加载其它页面的内容的实现代码

    利用jQuery的load()函数可以动态的加载其他页面的内容,具体步骤如下: 引入jQuery库 在页面中引入jQuery库文件,可以通过CDN或者本地文件引入,如下所示: <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js">&…

    other 2023年6月25日
    00
  • 逆水寒下载完客户端出现问题怎么办 NGP客户端修复方法介绍

    逆水寒下载完客户端出现问题怎么办 问题描述 有玩家在下载逆水寒客户端后,出现了无法打开客户端的问题,怎么解决呢? 解决方法 事实上,逆水寒客户端打不开的原因有很多种,下面分别介绍几种可能的情况以及解决方法。 1. 客户端文件被修改 如果你在下载完逆水寒客户端后,修改了客户端文件,就可能会导致客户端无法打开的情况。如果这是你所遇到的问题,那么可以执行以下操作进…

    other 2023年6月25日
    00
  • cad图纸按比例放到布局视口?

    当将CAD图纸按比例放到布局视口时,可以按照以下步骤进行操作: 打开CAD软件并加载所需的图纸文件。 在CAD软件中选择“布局”选项,以进入布局编辑模式。 在布局编辑模式下,选择合适的布局视口,这将是用于放置图纸的区域。 确定图纸的比例尺。比例尺表示图纸上的长度与实际长度之间的比例关系。例如,1:100的比例尺表示图纸上的1个单位长度等于实际长度的100个单…

    other 2023年9月5日
    00
  • vue3手动封装弹出框组件message的方法

    下面是针对“vue3手动封装弹出框组件message的方法”的完整攻略: 1. 前置知识 在封装message组件之前,需要掌握Vue3的以下知识点: 使用Vue3的Composition API编写组件 如何在Vue3中进行全局组件注册 如何在Vue3的setup函数中使用provide和inject来进行父子组件之间的通信 2. 开始封装message组…

    other 2023年6月25日
    00
  • c#实现动态加载dll(转)

    c#实现动态加载dll(转) 在c#中,我们可以通过System.Reflection命名空间来实现动态加载dll的操作。动态加载dll可以使得我们能够在运行时动态的加载其他程序集来完成一些特殊的操作,比如插件化开发和动态扩展。 加载dll 我们可以使用Assembly类来加载dll,通过Assembly.LoadFrom()方法来加载dll。下面是一个简单…

    其他 2023年3月29日
    00
  • CentOS6中rsync服务器的安装与配置

    以下是 CentOS6 中 rsync 服务器的安装与配置的完整攻略: 安装 rsync yum install rsync -y 配置 rsync 服务端 创建 rsync 用户,并设置密码: useradd rsync passwd rsync 创建需要同步的文件夹: mkdir /data mkdir /data/www 修改 /etc/rsyncd.…

    other 2023年6月27日
    00
  • C#窗体控件DataGridView常用设置

    下面就给大家详细讲解一下C#窗体控件DataGridView常用设置的完整攻略。 1. DataGridView控件简介 DataGridView控件是.NET框架中用于显示和编辑表格数据的控件,可以在WinForm窗体中轻松使用,非常适合海量数据的展示和高效编辑。 2. 常用属性与方法 2.1 属性 DataGridView控件常用的属性包括: DataS…

    other 2023年6月27日
    00
  • Python 多继承中的一个诡异现象 既是 Father又是grandfather

    针对Python多继承中的一个诡异现象,我会给出完整的攻略,包括示例说明。在Python中,多继承是一种同时继承多个父类的方式。然而,在多继承的情况下,可能会出现某个类同时继承了它的父类和祖先类的某个方法或属性的情况,导致代码执行结果不符合预期。 这个诡异现象的根本原因在于Python的MRO算法(multiple inheritance resolutio…

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