题目要求讲解“jmeter+ant+jenkins自动化测试环境配置搭建过程”的完整攻略,下面是具体的步骤:
1. 安装JMeter
JMeter 是一款常用的测试工具,我们需要先安装好。
- 下载安装包:Apache JMeter 下载
- 安装 JMeter。
2. 安装 Ant
Ant 是一个 Java 应用程序构建系统,相信大家都已经熟悉它。Ant 需要使用到 Java 环境。
- 下载 Ant:Apache Ant 下载
- 安装 Ant。
3. 配置环境变量
我们需要设置环境变量,以便在命令行中运行 JMeter 和 Ant。
- 打开系统变量,新增两个变量:
- 变量 A:JMeter 安装路径,例如 D:\apache-jmeter-5.3
- 变量 B:Ant 安装路径,例如 D:\apache-ant-1.10.9
- 编辑 Path 变量,将 A 和 B 变量的值加入到 Path 变量中,用 ";" 分割。
4. 配置 Jenkins
Jenkins 是一个常用的自动化构建和测试工具,我们需要通过 Jenkins 配置 Job。
- 下载 Jenkins:Jenkins 下载
- 安装 Jenkins,并通过浏览器访问 Jenkins。
- 新建一个 Job,选择“构建一个自由风格的软件项目”。
- 配置 Job:
- 勾选“此项目由 SCM 管理”。
- 填写 SCM 地址,例如:https://github.com/example/test.git。
- 在构建中,添加构建步骤,并选择“调用 Ant 构建”。
- 在 Ant 中,填写构建文件路径(build.xml)和目标(test)。
- 点击保存。
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技术站