Jmeter接口测试自动化(持续集成)

Jmeter是压力测试、接口测试工具,Ant是基于Java的构建工具,具有跨平台的作用,jenkins是持续集成工具。将这三者结合起来可以搭建一套webservice接口测试的持续构建环境。 

  

1、安装JDK,配置java环境变量(略过) 

2、安装Jmeter,这里用到的版本是2.12(安装过程略过) 

然后给它赋予权限chmod 777 jmeter.sh 

检验jmeter是否可以运行:jmeter -v 

 3、安装 ANT 

 3.1 下载安装 

      下载地址 http://ant.apache.org/bindownload.cgi,下载后解压到指定位置即可, 

      比如:D:/program files/apache-ant-1.9.0 

 3.2 配置环境变量  

ANT HOME apache-ant-1.9.0 
path 
D:/ apache-ant-l.9.0/bin 
classpath D:/apache-ant-l. 9.0/1ib

 3.3 安装验证 

 验证安装结果,命令行输入ant -v ,出现版本信息则安装成功     

: V' sersxctc>ant —v 
nable to locate tools-jar. Expected to find it in C: Vrogram Files 
pache Ant(TM) version I .9.0 compiled on June 29 201S 
uildf ile: build.xnl does not exist! 
failed

  

  4、ANT中配置Jmeter    

 4.1、配置库文件 

 将jmeter extras目录下的ant-jmeter-1.1.1.jar 文件拷贝到ant安装目录下的lib文件夹中 

 copy from:       

ad dons.txt 
addons.xml 
ant- meter-I.l.l.•ar 
build.xml 
collapse.png 
ConvertHTTPSampler.txt 
2014/11/5 20:17 
2014/11/5 20:17 
2014/11/5 19:51 
2014/11/5 20:17 
2014/11/5 19:51 
2014/11/5 20:17 
XML 
Executable Jar File 
XML 
PNG 
12 KB

       paste to: 

        

Program Files 
ant-javamailjar 
a nt-javama il.pom 
a nt-jdepend ja r 
a nt-jdepend pom 
ant-jmeter-l.l.l.jar 
a nt-j mf.ja r 
a nt-j mf.pom 
ant-jschjar 
apache-ant-I.g.6 lib 
2015/6/29 6:45 
2015/6/29 6:45 
2015/6/29 6:45 
2015/6/29 6:45 
2014/11/5 19:51 
2015/6/29 6:45 
2015/6/29 6:45 
2015/6/29 6:45 
Executable Jar File 
POM 
Executable Jar File 
POM 
Executable Jar File 
Executable Jar File 
POM 
Executable Jar File

 4.2  配置ANT与Jmeter的配置文件 

  4.2.1 配置ant 编译文件 build.xml 

  拷贝下面的内容与新建的txt文件中,并将此文件改名为:build.xml       

复制代码

<?xml version="1.0" encoding="UTF-8"?> 
 
<project name="ant-jmeter-test" default="run" basedir="."> 
    <tstamp> 
        <format property="time" pattern="yyyyMMddhhmm" /> 
    </tstamp> 
    <!-- 需要改成自己本地的 Jmeter 目录-->   
    <property name="jmeter.home" value="C:\apache-jmeter-2.12" /> 
    <!-- jmeter生成jtl格式的结果报告的路径-->  
    <property name="jmeter.result.jtl.dir" value="C:\apache-jmeter-2.12\bin\test\smoke_report\jtl" /> 
    <!-- jmeter生成html格式的结果报告的路径--> 
    <property name="jmeter.result.html.dir" value="C:\apache-jmeter-2.12\bin\test\smoke_report\html" /> 
    <!-- 生成的报告的前缀-->   
    <property name="ReportName" value="TestReport" /> 
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> 
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" /> 
     
    <target name="run"> 
        <antcall target="test" /> 
        <antcall target="report" /> 
    </target> 
     
    <target name="test"> 
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> 
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> 
             <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本--> 
            <testplans dir="C:\apache-jmeter-2.12\bin\test\冒烟测试" includes="*.jmx" /> 
 
             <property name="jmeter.save.saveservice.output_format" value="xml"/> 
        </jmeter> 
    </target> 
     
     <path id="xslt.classpath"> 
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> 
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> 
     </path> 
         
    <target name="report"> 
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>     
        <xslt                
              classpathref="xslt.classpath" 
              force="true" 
               
              in="${jmeter.result.jtlName}" 
              out="${jmeter.result.htmlName}" 
              style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />   
         
        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->  
        <copy todir="${jmeter.result.html.dir}"> 
            <fileset dir="${jmeter.home}/extras"> 
                <include name="collapse.png" /> 
                <include name="expand.png" /> 
            </fileset> 
        </copy> 
    </target>     
     
</project> 

复制代码

  

       

如下按实际情况修改build.xml文件                 

< ? xml on 
— <project default —"run" basedir•" . 
< t s t amp > 
< format propertr" time" pattern 
< / t s t amp > 
target test" / > 
<property . home" value 
"C : . 12 " / > 
<property result.ju.d*k" . / > 
<property result. html.d*k" 12 \ / > 
<property 
<property result. value 
<property . result . htmlNa-me" valu 
' $ . result . . / $ $ { time} . " / > 
" $ . result . html . / $ {ReportNa-me} $ { time} . html " 
< t name 
< an t call 
< an t call 
< / target > 
< t name 
<taskdef 
' run " > 
ta " report " / > 
test" > 
name=" . . ant . . . JMeterTask" 
<imeter 
resul t I og=" $ . result . j tINa-me} " >

        

< target name=" test" > 
<taskdef JMeterTask" 
< imeter ' 
resul t I og=" $ . result . j tINa-me} " > 
<testplans dir= 'C : ' 
äauf" 
<property . save. 
< / target > 
< target name=" report" > 
<xslt in 
" $ . result . j tINa-me} " 
" $ . result . htmlNæme } " 
. output format" value " > 
j meter* 
/extras 21 / > 
<copy result . html. d*k} 
<fileset / extras" > 
< include name=" collapse . / > 
< include / > 
< / file set > 
< / copy> 
< / target > 
< ect>

 4.2.2 配置jmeter.properties 

      配置jmeter报告输出格式为xml在jmeter根目录下jmeter.properties文件中修改jmeter.save.saveservice.output_format=csv 为 

  jmeter.save.saveservice.output_format=xml,并去掉前面的注释符号#                

I he cormnented out 
# legitimate values: 
values are 
xml, csv, 
meter. save. saveservice. output 
db. 
Only xml and csv are currently supported. 
forma xm

  

                           

  

    

  4.3 验证配置,执行构建测试 

  4.3.1 准备测试脚本数据 

        build配置文件放在与测试脚本同目录       

包 含 中 , 
名 称 
, buildxml 
试 • mx 
新 丈 夷 
试 用 - 功 能 盖 , CSV 
修 改 日 
2015 / 11 / 9 1 11 
2015 / 12 / 5 17 : 20 
2015 / 12 / 5 17 : 21 
XMLZE 
JMX%# 
Microsoft Excel

4.3.2 执行测试       

     命令行cd到build.xml文件所在目录,输入ant run ,执行测试        

a , "[Il ' >ant run 
: .12 Xbin \test 
uiIdF ile: C: .12 -NNbuiId.xmI 
est: 
[ämeter] Executing test plan: C: .12 
ämx C: .12Xbin 
.ätl 
[ämeter] Creating summariser (summary) 
[ämeter] Created the tree successfully using C: 
ämx 
[ämeter] Starting the test e Thu Dec 08 csr 2016 (1481189218632) 
[ämeter] Waiting For possible shutdown message on port 4445 
[ämeter] summary + 
ø (ø.øøz) Active: 
[ämeter] summary + 
1 (5.56%) Active: 
[ämeter] summary 
[ämeter] Tidying up . 
[ämeter] . 
end OF run 
ø.3s 
I Started: 
1.4s 
Started: 
e 
Thu Dec 08 
Finished: 
13.3/s Rug: 
Finished: I 
10.8/s Rug: 
csr 2016 
319 max: 
(1481189225356) 
[xslt] Processing C: 
201612080526 .ätI to C: .12Xbin XhtmIxrestReport 
. html 
[xslt] Loading stylesheet C: .12Xextras 
I—report 21 . xsI 
UILD SUCCESSFUL

      看到build successful 则说明构建测试成功 

4.3.3 报告输出路径下查看测试结果报告 

     按build.xml文件中设置的测试报告地址找到html版测试报告      

C: Napa che-jmeter-2.12NbİnNtestNsmake_repartNhtml 
[X] collapse.png 
TestReport.html 
2016/10/26 16:12 
2016/10/26 16:12 
2016/12/8 17:27 
PNG 
PNG 
Chrome HTML Dm 
24 KB

 打开看看:测试结果展现了用例数、成功率、用例执行时间等结果参数        

Summary 
Pages 
coool 
c0002 
c0003 
coooq 
cooos 
cooos 
c0007 
Date report: 
100.00% 
319 ms 
319 ms 
100.00% 
100.00% 
367 ms 
367 ms 
100.00% 
100.00% 
100.00% 
100.00% 
36 ms 
36 ms 
100.00% 
100.00% 
100.00% 
Designed for use with JMeter and Ant. 
# Samples 
5.2.18.1 
5.2.18.2 
5.2.18.3 
5.2.18.4 
5.2.18.5 
5.2.18.6 
5.2.18.7 
Failures 
URL 
Success Rate 
94.74% 
# Samples 
Average Time 
78 ms 
Failures 
cooog 5.2.18.8 
Success Rate 
0.00% 
cooog 
c0010 
cooll 
5.2.18.g 
5.2.18.10 
5.2.19.1 
Min Time 
17 ms 
Average Time 
54 ms 
65 ms 
44 ms 
34 ms 
18 ms 
26 ms 
45 ms 
41 ms 
Min Time 
54 ms 
65 ms 
44 ms 
34 ms 
18 ms 
26 ms 
45 ms 
41 ms 
Max Time 
367 ms 
Max Time 
319 ms 
54 ms 
367 ms 
65 ms 
44 ms 
34 ms 
18 ms 
36 ms 
26 ms 
45 ms 
41 ms

  

  4.4、 测试报告优化 

   用jmeter自带的测试报告得到的测试报告信息并不是很全,这里参考网上的方法,做一个优化 

    4.4.1、下载优化模板 jmeter-results-shanhe-me.xsl,拷贝到jmeter的extras目录中, 

           如C:\apache-jmeter-2.12\extras 

                           

    4.4.2、设置测试输出报告要输出的内容 

          同样在jmeter.properties中,设置需要输出的内容为true,并去掉前面的注释符号#,这里全部设置成true                            

r. prope es - 
o pa ++ 
min r or 
tßit(0) 
jmeter. save. saveservice. data_type=true 
jmeter. save. saveservice. label=true 
jmeter. save. saveservice. response_code=true 
response _ data is not currently supported for 
jmeter. save. saveservice. response_data=false 
Save ResponseData for failed sarnples 
save . saveservlce . assert I ons—true 
SV output 
fal se 
propertie 
imeter. save . saveservlce . data type—true 
imeter . save . save service . label—true 
imeter . save . saveservlce . response code—true 
# response data is not currently supported for CSV outpu 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
jmeter. 
1 mes 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
save. 
arnp 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
saveservl ce. 
response _ data. on _ error 
response_message=true 
successful=true 
thread narne=true 
time: true 
subresul ts=true 
asserti ons: true 
1 at ency=true 
sarnpl erDat a=fal se 
responseHeaders=fa1 se 
requestHeaders=fa1se 
encoding=false 
bytes: true 
fi 1 enarne=fal se 
hostnarne=fal se 
thread counts=true 
sarnpl se 
idle time=false 
61 
62 
71 
jmeter . 
# Save 
3meter . 
jmeter . 
3meter . 
jmeter . 
3meter . 
jmeter . 
3meter . 
jmeter . 
3meter . 
jmeter . 
3meter . 
jmeter . 
3meter . 
jmeter . 
3meter . 
jmeter . 
3meter . 
jmeter . 
3meter . 
save . saveservlce 
Response Data for 
orma 
IS on ya ec s 
ou put files 
# legitimate 
#jmeter. save. 
#jmeter. save. 
values: none, ms, or a format sui table for Simpl eD 
saveservi ce. 
saveservice. S 
# For use with Cormna—separated value (CSV) files or other forma 
# where the fields' values are separated by specified delimi ter 
# Default: 
#jmeter. save. saveservice. defaul t _ delimi ter=, 
# For TAB. since T Meter 2. 3 one can use: 
save . saveservlce 
save . save service 
save . saveservlce 
save . save service 
save . saveservlce . t Ime=true 
save . save service 
save . save service 
save . saveservlce 
save . save service 
save . saveservlce 
save . save service 
save . saveservlce 
save . save service 
save . saveservlce 
save . save service 
save . saveservlce 
save . save service 
save . saveservlce 
. re sponge data—true 
failed samples 
. response data. on error—false 
. response message—true 
. successful—true 
. thread name—true 
. subresults=true 
. latency—true 
. sampl e r Data—true 
. responseHeaders=true 
. requestHeaders=true 
. encoding=t rue 
. bytes—true 
. url=true 
. f ename=true 
. hostname=t rue 
. thread counts—true 
. sample count=ft rue 
. dle time—true

                                 

# 
jmeter.save.saveservice.data_type=true 
jmeter.save.saveservice.label=true 
jmeter.save.saveservice.response_code=true 
# response_data is not currently supported for CSV output 
jmeter.save.saveservice.response_data=true 
# Save ResponseData for failed samples 
jmeter.save.saveservice.response_data.on_error=true 
jmeter.save.saveservice.response_message=true 
jmeter.save.saveservice.successful=true 
jmeter.save.saveservice.thread_name=true 
jmeter.save.saveservice.time=true 
jmeter.save.saveservice.subresults=true 
jmeter.save.saveservice.assertions=true 
jmeter.save.saveservice.latency=true 
jmeter.save.saveservice.connect_time=true 
jmeter.save.saveservice.samplerData=true 
jmeter.save.saveservice.responseHeaders=true 
jmeter.save.saveservice.requestHeaders=true 
jmeter.save.saveservice.encoding=true 
jmeter.save.saveservice.bytes=true 
jmeter.save.saveservice.url=true 
jmeter.save.saveservice.filename=true 
jmeter.save.saveservice.hostname=true 
jmeter.save.saveservice.thread_counts=true 
jmeter.save.saveservice.sample_count=true 
jmeter.save.saveservice.idle_time=true 

              

4.4.3  设置build文件的报告模板为优化后的模板jmeter-results-shanhe-me.xsl                        

ogle Hosts2# R 
< / target > 
< target name=" test" > 
<taskdef JMeterTask" 
< imeter ' 
resul t I og=" $ . result . j tINa-me} " > 
<testplans . . 
äauf" 
<property save. output format" / > 
< / target > 
< target name=" report" > 
<xslt result. tINa-me} " 
out=" $ . result . htmlNa-me } " 
home} / extras . 
<copy result . html. d*k} 
<fileset / extras" > 
< include name=" collapse . / > 
< include / > 
< / file set > 
< / copy> 
< / target > 
< ect>

  

4.4.4、按前面的方式再次用ant构建测试,查看优化后的测试报告                     

应 百 0 0 esterHome 亡 网 上 0 蹴 統 亡 0 众 内 刚 
亡 10g 管 控 制 台 亡 5 卜 en 55g8 动 应 支 干 台 臂 52 @ 基 于 Jmet “ 彐 ℃ 0 “ . 
nu-ead: 功 能 盖 ( 正 向 向 ) 1 一 1 
功 能 盖 : 正 向 向 ) 1 一 1 
T 卜 工 e ad “ e 
1 & 1 取 短 消 列 表 确 訕 
匚 囗 囗 囗 1 巳 
c 2 囗 馬 17 : 45 : 22 T + 囗 囗 〔 中 国 标 准 时 闾 〕 
Thu D e 
s t 
1 & 2 取 回 流 页 列 表 确 訕 
匚 囗 囗 囗 2 巳 
以 、 以 、 以 、 以 、 以 、 以 0 、 以 、 以 、 以 、 以 、 以 、 以 、 以 
Latency 
24E4 
1 & 3 取 知 书 列 表 接 囗 确 
匚 囗 囗 囗 3 巳 
Count 
Count 
1 & 4 短 消 册 接 囗 确 訕 
匚 囗 囗 囗 4 巳 
sponse Code 
sponse Me 
1 & 5 短 消 状 态 更 新 接 囗 确 
匚 囗 囗 囗 5 巳 
众 sat 1 on 
响 应 断 自 
1 & 取 用 户 推 法 由 阝 箱 列 表 接 囗 
匚 囗 囗 囗 6 巳 
111 辽 e 
開 7 一 5 里 1 & 7 册 用 户 推 法 由 阝 箱 确 
童 11 辽 e 蘭 e 
Request 
Method/UrI 
GET http : / / 1 巳 16 & 1113 : 7 囗 囗 1 / 匚 0 
mo “ 艹 / m 
sage/msgLi st/queryv?us 
開 距 5 里 1 & 8 新 婚 用 户 推 法 由 阝 箱 确 
ode—hrwj 123 
Query String 
開 一 5 里 1 & 更 新 用 户 推 法 由 阝 箱 确 
Request He 
Cormection: keep—alive 
Ho s t : 1 巳 1 1 13 : 7 囗 囗 1 
匚 開 1 囗 一 5 里 1 & 1 囗 取 某 个 知 书 详 接 囗 一 
—Agent : Apache—HttpCIi ent/Q 巳 6 ava 上 5 〕 
正 确 訕 
Respons 
囗 11 一 5 里 “ 1 取 一 表 式 申 掘 芏 题 和 分 类 
HITp/L 1 2 囗 囗 OK 
接 囗 丑 设 立 
T 卜 囗 8 Dec 2 囗 16 囗 : 45 : 34 仃 
囗 12 一 5 里 1 1 取 一 表 式 申 掘 芏 题 和 分 类 
—Encoding: churl-ked 
接 囗 一 津 设 工 程 
ation/json;charset=1JTF—8 
ontent—Tne 
囗 13 一 5 里 1 2 取 一 表 式 申 掘 段 信 列 
ed—by: ServIet/ZS JSP/ZI 
表 接 囗 设 工 程 〕 向 
“ 企 丑 申 清 
1 SD e 丑 “ 
sgTitI 
atus 
匚 開 14 一 5 里 “ 3 取 一 表 式 分 类 申 清 公 共 
料 列 表 向 
匚 開 15 一 5 里 “ 4 启 动 一 表 式 办 件 接 囗 向

  

  5、配置jenkins 

  5.1 、jinkins.war的下载与安装,下载后放到d盘根目录 

  5.2 、配置环境变量,设置JENKINS_HOME                                    

を 統 変 
変 名 
変 偵 Ⅳ 〕 
JEmNS_H ロ ME

               5.3 、解压并启动jenkins 

                         命令行输入java -jar jenkins.war,浏览器中输入url:jenkins所在主机IP 端口:8080 ,打开jenkins, 

        配置用户名、密码及插件,这里需要配置invoke ant插件、HTML测试报告展示的插件 

    5.4、新建并配置一个JOB        

0 Jenkins 
Jenkins 》 
用 户 
氵 . 任 务 历 史 
. 0 . 系 统 管 理 
构 津 队 列 
欢 迎 使 用 Jenkins!

      设置项目名称:   

接 口 测 试 
i'Requiredfield 
院 亞 苎 
构 建 一 个 自 由 风 格 的 软 件 项 目 
fixEJenkinsäi*# 功 W.Jenkins*$± 结 台 
fä]S 
M 和 任 何 构 津 系 统 来 构 津 你 的 项 目 甚 至 司 以 构 津 软 件 以 外 的 系 统 
External Job 
This type 耐 job allows you to record the execution 耐 a process run outs de Jenkins even on a remote machine. This is des gne 
can use Jenkins as a dashboard 耐 your existing automation system 
构 建 一 个 多 配 置 项 目 
适 用 于 多 舌 项 目 例 如 多 环 憤 试 屮 台 指 定 构 津 等 等

     配置构建:    

[Plaintext]E 
0 
Throttle builds 
丢 弃 旧 的 构 津 
Strategy LoqRotaton 
1 呆 持 构 津 的 天 訕 
1 呆 持 构 津 的 最 大 个 訕 
2 
如 果 非 空 , 构 津 记 录 1 呆 存 吡 天 訕 
2 
如 果 非 空 , 最 多 吡 訕 目 的 构 津 记 录 裰 1 呆 存

        配置构建:invoke ant 

          

Execute Windows batch command 
Execute shell 
Invoke Ant 
Invoke Gradle script 
Invoke top-level Maven targets

   

   配置build文件路径:            

Invoke Ant 
Targets 
Build File 
build 
P roperties 
Java Options

 配置测试报告插件,用于打开测试结果报告 

Publish HTML reports 
Reports 
HTML directory to archive 
Index page[s] 
Report title 
D: \apach e-jmeter-2_ 12\bi n 
TestReport_html 
HTML Report 
Publishing optionsm

基本配置完成 

  

  5.5、JOB主页,点击立即构建,执行测试,构建完成即可通过HTML_Report来查看测试结果 

能 ' 工 作 空 间 
立 即 构 建 
' B*Project 
HTML Repon 
0 
Build History 
find 
公 其 市 批 借 二 测 试 昌 烟 测 试 
HTML R 巳 po 改 
薈 相 关 连 接

  

 继续构建基本完成,另外还 可以配置邮件插件来发送测试报告,设置构建时间来定时自动执行测试 

posted @ 2017-11-28 13:10  春田花花同学会  阅读(170)  评论(0编辑  收藏  举报