jmeter

不需要写代码的自动化测试框架(二)

2021-03-22  本文已影响0人  星空_Sparkle

在上一篇文章中,我们已经学会了如何进行接口自动化框架的搭建,自动化测试的工作也能够顺利开展起来了,但是呢,在实际项目中使用起来,还是缺少了一些东西,体验不太好,比如:
1、为了方便管理,多个项目的脚本存放在不同的目录下面,这时候要执行所有的自动化用例怎么办?
2、往往我们需要一个概要的测试报告来关心整体的自动化测试情况,还需要一个详情的测试报告来定位自动化测试失败的原因,这时候怎么生成两种不同类型得测试报告?
3、怎么把上面的测试报告集成到Jenkins中,方便查看每次构建的结果?
4、随着自动化次数的执行,大家会发现测试报告目录里面的文件越来越多、越来越大,那么怎么保证每次都是最新的测试报告结果呢?

这篇文章就来为大家一 一解决这些疑问
一、执行多个目录下的自动化用例
进入Jmeter下的build目录,修改build.xml文件,找到下面的代码行

<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="D:\apache-jmeter-5.1.1\script_smoke" includes="*.jmx" />
        <property name="jmeter.save.saveservice.output_format" value="xml"/>
    </jmeter>
</target>

假如还有脚本存放在"D:\apache-jmeter-5.1.1\script_project"下面,那么在以上代码中再添加一行需要执行脚本的地址即可

<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="D:\apache-jmeter-5.1.1\script_smoke" includes="*.jmx" />
        <testplans dir="D:\apache-jmeter-5.1.1\script_project" includes="*.jmx" />
        <property name="jmeter.save.saveservice.output_format" value="xml"/>
    </jmeter>
</target>

二、测试概要报告和详情报告配置
先上两张图片,让我们直观的感受下概要报告和详情报告的区别

image.png image.png
从上面两张图可以看出,概要报告可以很快速的看出所有自动化测试用例的执行情况,详细报告可以很清晰的描述接口的请求地址、请求参数、响应参数等信息,在用例执行失败的时候,可以很方便的定位问题
接下来我们看下怎么配置才能生成这两种不同类型的测试报告
1、首先进入Jmeter的安装目录,在extras目录下面找下是否存在jmeter-results-detail-report_21.xsl这个文件
image.png
如果没有这个文件,在网上下载一个放在extras目录即可

2、进入Jmeter下的build目录,修改build.xml文件,找到下面的代码

    <!-- 生成的报告的前缀-->  
<property name="ReportName" value="SmokeReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />

然后在这行代码后面加上一个新的属性值,如下所示

<property name="detail" value="_detail" />
<property name="jmeter.result.jtlNamedetail" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlNamedetail" value="${jmeter.result.html.dir}/${ReportName}${time}${detail}.html" />
image.png

3、继续在build.xml文件中找到下面的代码,添加一个报告标签

    <target name="report">
    <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
   <xslt 
          classpathref="xslt.classpath"
          force="true"
          in="${jmeter.result.jtlNamedetail}"
          out="${jmeter.result.htmlNamedetail}"
          style="${jmeter.home}/extras/jmeter-results-shanhe-me.xsl">
          <param name="dateReport" expression="${report.datestamp}"/>
   </xslt>

在上面这行代码下面,添加"详细报告"的标签内容,如下

    <xslt 
          classpathref="xslt.classpath"
          force="true"
          in="${jmeter.result.jtlName}"
          out="${jmeter.result.htmlName}"
          style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
          <param name="dateReport" expression="${report.datestamp}"/>
   </xslt>

添加后的效果如下图所示


image.png

4、"详细报告"的标签添加完成后,继续将目录切换到Jmeter的bin目录下,打开jmeter.properties文件,将以下属性全部放开并修改如下

    jmeter.save.saveservice.data_type=true
    jmeter.save.saveservice.label=true
    jmeter.save.saveservice.response_code=true
    jmeter.save.saveservice.response_data=true
    jmeter.save.saveservice.response_data.on_error=false
    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=false
    jmeter.save.saveservice.responseHeaders=false
    jmeter.save.saveservice.requestHeaders=false
    jmeter.save.saveservice.encoding=false
    jmeter.save.saveservice.bytes=true
    jmeter.save.saveservice.url=true
    jmeter.save.saveservice.filename=false
    jmeter.save.saveservice.hostname=false
    jmeter.save.saveservice.thread_counts=true
    jmeter.save.saveservice.sample_count=false
    jmeter.save.saveservice.idle_time=true

5、最后,重启一下Jmeter(在CMD命令行中输入命令:java -jar jenkins.war),让之前配置的设置全部生效,这样,再次执行自动化脚本,就可以生成两种类型的测试报告了

三、报告集成 Jenkins的配置
OK,到目前为止,我们已经可以成功的生成"概要报告"和"详细报告"了,那么,怎么让这两种报告在Jenkins上体现出来,我们接下来继续操作
1、要在Jenkins上面查看报告,我们首先需要在Jenkins上安装这么一个插件-------HTML Publisher plugin,插件的安装方式这里就不再赘述了,在上一篇文章(不需要写代码的自动化测试框架(一))中已经提到,不清楚的,可以去看看之前的文章
2、进入Jenkins,点击你自己创建的自动化测试工程,选择Configure(配置)

image.png
找到Post-build Actions项,在Add post-build action中选择Push HTML reports
image.png
最后修改下参数值,将报告存放的位置填写正确
image.png
到这里,所有的配置都已完成,我们试着来构建一下我们的自动化工程,构建成功后点击工程左边目录的HTML Report查看报告
image.png
生成的报告如下所示,包含了"概要报告"和"详细报告",大功告成
image.png
四、冗余测试报告请理
随着自动化测试的执行,越来越多的测试报告生成,会产生很多测试垃圾,磁盘空间占用量越来越大,这些都不是我们希望看到的,如图所示
image.png
我们希望能够每次都看见最新的测试报告,在自动化构建之前,将以往的测试报告删除,那么按照这个思路,我们来看具体的操作实现方式
1、我这边会使用python语言来删除指定目录下的所有文件,所以,先将删除文件的脚本写好,如下
    import os
    import glob
    path=r'D:\apache-jmeter-5.1.1\report_smoke'#测试报告的存放路径
    def delfile(path):
        filenames=glob.glob(path+r'\*')
        for filename in filenames:
            try:
                os.remove(filename)
            except:
                try:
                    os.rmdir(filename)
                except:
                    defile(filename)
                    os.rmdir(filename)
    delfile(path)

2、进入Jenkins首页面板,依次点击Manage Jenkins------->Manage Plugins--------->Avaiable,在搜索框中输入python,将这个插件安装好
3、在Jenkins中点击你自己创建的自动化测试工程,选择Configure(配置),在构建步骤中增加一个Execute P ython Script,用来执行步骤1中的脚本(这一步一定要特别注意一点:执行python脚本删除测试报告必须放在构建的第一步,否则后面会出问题,导致构建失败,因为我们的目的是在构建前删除测试报告,如果放在ant运行build文件之后,则后面在Jenkins上面集成报告就会因为找不到报告而报错)

image.png
这样设置完成,点击保存即可,再次运行自动化脚本,你会发现每次都会产生最新的测试报告
image.png
上一篇下一篇

猜你喜欢

热点阅读