接口自动化测试搭建在线接口监控实战全流程(手把手教学):JMeter5.4.1接口测试+Ant1.0.13自动构建+Jenkins2.411持续集成+钉钉群机器人发送钉钉群构建通知

前言

        一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成。今天Darren洋为大家讲解JMeter5.4.1+Ant1.0.13+Jenkins2.411用来搭建一个完整的接口自动化测试平台的方法及步骤,免去到处找东墙补西墙之苦,直接无脑搭建接口自动化工具类平台,JMeter用于支持接口的测试,Ant用于支持自动构建,而Jenkins支持持续集成,所以三者组合在一起可以构成一个功能完善的接口自动化测试平台。

一、下载安装JMeter

        jmeter下载安装步骤见Darren洋之前发过的博客文章

        传送带:接口测试——JMeter测试工具安装过程_Darren洋的博客-CSDN博客

        下载jmeter之前应先安装好相应版本的jdk(建议用jdk8及以上版本),因为jmeter是基于java语言开发的,so其环境必须依赖于jdk,此次Darren洋安装的jmeter版本为5.4.1版本,检查版本时输入jmeter --version即可检查jmeter环境是否配置完成。

二、下载ant

下载传送带:https://ant.apache.org/bindownload.cgi

网络差点意思打不开的话,建议开加速器加加速就能轻松打开此页面,选择合适版本下载即可(这里Darren洋下载的ant版本是1.10.13版本)。

三、配置Ant环境变量 

        解压ant安装包到对应路径之后,按照如下步骤配置好ant的环境变量

四、检查ant版本

        

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

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="E:\apache-jmeter-5.4.1" />
    <!-- jmeter生成jtl格式的结果报告的路径-->
    <property name="jmeter.result.jtl.dir" value="E:\apache-jmeter-5.4.1\loadTest\report\latest\jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="E:\apache-jmeter-5.4.1\loadTest\report\latest\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}${time}.html" />
    <!-- 生成的shanhe.me.xsl报告的前缀 -->  
    <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" />

 <!--项目依次运行以下target-->
    <target name="run">
        <antcall target="init" />
        <antcall target="test" />
        <antcall target="report" />
    </target>


 <!--项目初始化设置-->
    <target name="init">
<!--删除jtl文件夹下生成的所有文件和文件夹,即替换旧报告-->
        <delete verbose="true" includeemptydirs="true">
	<fileset dir="${jmeter.result.jtl.dir}">
		<include name="**/*"/>
	</fileset>
        </delete>

<!--删除html文件夹下生成的所有文件和文件夹,即替换旧报告-->
        <delete>
	<fileset dir="${jmeter.result.html.dir}">
		<include name="**/*"/>
	</fileset>
        </delete>
    </target>
    
    <target name="test" depends="init">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
             <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="E:\apache-jmeter-5.4.1\loadTest" 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" depends="test">
        <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_30.xsl" /> 

         <xslt               
              classpathref="xslt.classpath"
              force="true"
              
              in="${jmeter.result.jtlNamedetail}"
              out="${jmeter.result.htmlNamedetail}"
              style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl" /> 
        
        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>    
</project>

        在jmeter中bin目录下jmeter.properties里把jmeter.save.saveservice.output_format=csv 改为 jmeter.save.saveservice.output_format=xml,并去掉前面的注释符号#

         把下列都改为true

        若出现build successful提示,则说明jmeter与ant关联构建成功。

五、下载安装Jenkins

传送带链接如下:

Jenkins download and deployment

        安装过程中有个端口设置,设置的端口不被系统服务占用即可

        这里注意jdk11、17、21才支持较新版本的Jenkins,若不是,则需切换至以上版本的jdk包。

        切换好jdk版本后可检查一下jdk版本然后重复上述安装步骤即可。

        自定义设置,默认即可,点击next进入下一步

安装完毕后,浏览器输入:http://localhost:+安装时设置的端口号,访问jenkins

第一次访问jenkins需要解锁,管理员密码在日志文件可以查看到

安装插件:

DingTalk    -----------发送钉钉消息的插件

HTML Publisher---------生成可视化html测试报告的插件

Ant In Workspace    -------------ant构建配置插件

安装完毕插件后,最好重启一下jenkins,后面jenkins构建配置才能选择对应的插件。

六、钉钉机器人配置

        添加构建JOB,新建一个自定义风格的JOB

+ 环境:测试环境
+ 项目名称:$PROJECT_NAME
+ [点击查看HTML测试报告](${PROJECT_URL}HTML_20Report)
+ [点击查看变更记录](${BUILD_URL}changes)
+ [点击查看构建日志](${BUILD_URL}console)
+ [点击编辑编译信息](${BUILD_URL}configure)
+ [点击删除当前构建](${BUILD_URL}confirmDelete)

在构建定时设置,主要是设置jenkins何时定时自动执行该构建项目

定时构建语法:

* * * * *(五颗星,中间用空格隔开)

第一颗*表示分钟,取值 0~59第二颗*表示小时,取值 0~23第三颗*表示一个月的第几天,取值 1~31第四颗*表示第几月,取值 1~12第五颗*表示一周中的第几天,取值 0~7,其中 0 和 7 代表的都是周日

每隔5分钟构建一次

H/5 * * * *

每两小时构建一次

H H/2 * * *

每天中午12点定时构建一次

H 12 * * *

每天下午18点定时构建一次

H 18 * * *

在每个小时的前半个小时内的每10分钟

H(0-29)/10 * * * *

每两小时45分钟,从上午9:45开始,每天下午3:45结束

45 9-16/2 * * 1-5

每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)

H H(9-16)/2 * * 1-5

e:
cd E:\apache-ant-1.10.13-bin\apache-ant-1.10.13\bin
ant run

同时也会钉钉群推送构建通知,如下图:

七、钉钉自动构建效果

八、飞书机器人配置

feishu.py代码:

import os
import sys
import time
import requests

JOB_URL = sys.argv[1]
JOB_NAME = sys.argv[2]
WORKSPACE = sys.argv[3]
BUILD_NUMBER = sys.argv[4]

currenttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

#获取生成的txt报告数据
d = {}
proDir = "\\report\html\export\prometheusData.txt"
f = open(WORKSPACE + proDir, 'r')
for lines in f:
            for c in lines:
                launch_name = lines.strip('\n').split(' ')[0]
                num = lines.strip('\n').split(' ')[1]
                d.update({launch_name: num})
f.close()
retries_run = d.get('launch_retries_run')  # 运行总数
status_passed = d.get('launch_status_passed')  # 通过数量
status_failed = d.get('launch_status_failed')  # 不通过数
status_broken = d.get('launch_status_broken')  # 异常数量
status_passedcode = format((float(status_passed) / float(retries_run))*100, ".4f")

url = 'XXX'
method = 'post'
headers = {
    'Content-Type': 'application/json'
}

json = {
    "msg_type": "interactive",
    "card": {
        "config": {
            "wide_screen_mode": True,
            "enable_forward": True
        },
        "elements": [{
            "tag": "div",
            "text": {
                "content": "项目名称:" + JOB_NAME + "\n项目环境:测试环境" +
                           "\n构建编号:第" + BUILD_NUMBER + "次构建" +
                           "\n运行时间:" + currenttime +
                           "\n运行总数:" + retries_run +
                           "\n通过数量:" + status_passed +
                           "\n不通过数:" + status_failed +
                           "\n异常数量:" + status_broken +
                           "\n通过率为:" + status_passedcode + "%"
                ,
                "tag": "lark_md"
            }
        }, {
            "actions": [{
                "tag": "button",
                "text": {
                    "content": "查看allure测试报告",
                    "tag": "lark_md"
                },
                "url": JOB_URL + '/allure',
                "type": "default",
                "value": {}
            }],
            "tag": "action"
        }],
        "header": {
            "title": {
                "content": JOB_NAME + " 构建报告",
                "tag": "plain_text"
            }
        }
    }
}

requests.request(method=method, url=url, headers=headers, json=json)

九、飞书自动构建效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AE—Darren洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值