Jenkins部署jmx脚本
针对jenkins+jmeter做接口自动化,jmeter完成测试脚本录入和撰写,而jenkins负责持续集成和报告收集。那么从零实现jenkins可以从以下角度实现
首先需要安装jenkins
然后需要安装ant,为什么需要ant,因为ant是一个很高效的桥梁,连接jmeter脚本和jenkins工具,调用ant时会自动调用jmeter中的build文件进行构建。简单点做个对比,在没有ant的情况下,构建jmx脚本需要在构建中添加一些列的command命令,最起码构建过程为:cd至jemter所在路径->启动jmeter -n -t -l -o -e,此过程中 -n-t-l-o-e的这些过程实际上也是调用jmeter中一些指令文件实现,比如-o-e是生成和转换jtl报告为html报告,也即jmeter使用自带的xml样式表生成将jtl报告转换为html报告。而这些执行和报告转换的操作在jemter中是七零八落的。所以我们可以利用ant去调用build文件,通过对build文件的配置,来系统化实现脚本的构建过程,只需要一个build文件,就可以对构建过程实现系统化控制。如此就形成一个jemer和jenkins的中间站,通过对中间站的配置,既让jemeter执行脚本的过程更系统化,也让jenkins调用jmeter的方式简洁化,实际上像是实现了对jmeter执行的一个封装。
说到这里就必须得说一说build文件的一些基本构造了,以最基本的构造模板为例
<?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="D:\Automatior\apache-jmeter-3.3\apache-jmeter-3.3" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\Automatior\apache-jmeter-3.3\apache-jmeter-3.3\DEMO\report\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\Automatior\apache-jmeter-3.3\apache-jmeter-3.3\DEMO\report\html" />
<!-- 生成的报告的前缀-->
<property name="ReportName" value="IPCreport" />
<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" />
<!-- 输出生成的报告名称和存放路径-->
<echo message="${jmeter.result.jtlName}"/>
<echo message="${jmeter.result.htmlName}"/>
<echo message="${jmeter.result.html.dir}"/>
<target name="run">
<antcall target="test"/>
<antcall target="report"/>
</target>
<!-- 指定ant-jmeter-1.1.1.jar 的位置 -->
<path id="jmeter.classpath">
<fileset dir="D:\Automatior\apache-ant-1.9.11\lib">
<include name="ant-jmeter-1.1.1.jar"/>
</fileset>
</path>
<!--加载jar包,解决显示时间问题-->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本,比如test*。jmx表示以test开头的所有.jmx文件-->
<testplans dir="D:\Automatior\apache-jmeter-3.3\apache-jmeter-3.3\DEMO" includes="*.jmx" />
<!-- 声明ant执行jmeter时,传入jmeter的属性值,可以自定义必须是xml格式 -->
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<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.shanhe.me.xsl">
<!--jmeter-results-detail-report_21.xsl这里的文件名可以换成你想要的报告效果-->
<!--显示dateReport的时间-->
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
以上是一个我是用的基本的build文件的配置,其中最少需要设置的内容有
<!-- 需要改成自己本地的Jmeter目录-->
<property name="jmeter.home" value="D:\Automatior\apache-jmeter-3.3\apache-jmeter-3.3" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\Automatior\apache-jmeter-3.3\apache-jmeter-3.3\DEMO\report\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\Automatior\apache-jmeter-3.3\apache-jmeter-3.3\DEMO\report\html" />
这一部分配置jmeter的执行路径,以及报告的存放路径,生成的报告会存放至指定文件下
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本,比如test*。jmx表示以test开头的所有.jmx文件-->
<testplans dir="D:\Automatior\apache-jmeter-3.3\apache-jmeter-3.3\DEMO" includes="*.jmx" />
这一部分设置需要运行脚本的路径,也是必须设置元素之一
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<!--jmeter-results-detail-report_21.xsl这里的文件名可以换成你想要的报告效果-->
Style控制输出html报告的xsl样式,因为默认报告不仅信息少,而且很难看,所以如果需要优化就需要去更改html的样式,本篇不做详细讲解
设置完这些最起码的过程:进入jmert目录,启动jmeter调jmx脚本,生成jtl报告和html报告,这一过程就实现了,而这一过程在jenkins构建过程仅需要一句run,或者ant run即可。这样一来就会发现ant的作用其实真的很大。
安装配置完ant以后,就需要去jenkins新建一个item了,其中描述,源码管理对我来说目前都没用到,主要要设置内容有触发器,构建,以及构建后操作。
触发器顾名思义是指触发item执行的控制器,比如我们可以在这里设置,每天中午12点执行一次脚本,亦或者每次有新版本上传时执行一次自动化脚本,或者每当jenkins被访问时执行一次脚本等。通过控制器可以实现自动化的最终目的:机器自动执行脚本。
构建:如果我们配置了ant,并且已经编辑好build文件,那么在这里我们只需要配置好ant环境前提下新增一个invoke ant,然后命令行输入run即可
构建后步骤,这个我个人感觉比较关键,因为执行脚本最终是为了报告,好的报告可以更好展现出测试结果,以及清晰展示测试过程。首先可以展示的是html报告,通过jenkins的html report插件可以在复制生成到的html报告到工作空间并进行展示。当然html报告对我个人来说是很不满足的,这时候需要更完美的报告,于是Allure报告就发挥作用了,它是一个更全面,更详细,且展示效果更完美的报告,具体使用细节可自行百度。
这些都做完以后,点击保存,一个基本接口自动化脚本就在jenkins上部署完毕,接下来就可以等待到满足触发器的额触发条件,一旦触发,则会自动执行测试脚本并生成报告,我们可以随时访问jednkins进行查看,或者我们也可以让jenkins把报告通过邮件发送给我们,如此,便实现了接口脚本的自动化执行。
Jenkins部署jmx脚本的更多相关文章
- Jenkins 部署自动化测试脚本(15)
自动化测试脚本开发完成以后,希望可以把脚本放在公共的环境下提供一个入口供大家一起使用,目前最好的解决方案就是需要把代码部署在Jenkins上,下面看下如何在Jenkins配合自动化测试任务: 1.首先 ...
- jenkins jmeter持续集成批处理jmx脚本
这篇文章介绍jenkis jmeter的持续集成,利用jenkins定时任务去批处理执行jmeter的jmx脚本文件,并且生成测试报告 1:jmeter的安装这里我就不在赘述了,如有问题可参考我的jm ...
- 解决Jenkins用shell脚本部署后,Jenkins自动杀掉启衍生出来的守护进程
Jenkins部署java项目遇到的问题: 1.Jenkins执行构建后,需要手动执行startup.sh,站点才能正常访问 产生原因: shell脚本发布时,会衍生进程,Jenkins默认会自动杀掉 ...
- jenkins部署java项目,脚本文件放在远程仓库中 和jar一起打包(六)
jenkins部署java项目到远程linux上,脚本文件和项目一起上传到gogs上,直接执行gogs上的脚本文件来执行项目 (1)新建maven项目 pom.xml的配置 <project x ...
- springboot(十六):使用Jenkins部署Spring Boot
jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...
- Jenkins 部署 jmeter + Ant
安装Jenkins: 到jenkins官网下载相应的jenkins版本: 双击jenkins.msi启动安装,安装目录选择D:\Progrom Files\Jenkins,然后启动成功. Jenkin ...
- 在windows下使用jenkins部署docker容器
在windows下使用jenkins部署docker容器最近在学习jenkins,docker部署来实现集成部署,所以想在windows下面实现测试,但是发现在windows下docker支持不是很好 ...
- jenkins远程执行脚本时报Bad version number in .class file
这几天在学习jenkins的持续集成和部署,到了最后一步启动服务的时候,遇到了一个这个Bad version number in .class file的报错(如下图). 这个报错在最开始手工部署的时 ...
- (转)Spring Boot(十六):使用 Jenkins 部署 Spring Boot
http://www.ityouknow.com/springboot/2017/11/11/spring-boot-jenkins.html enkins 是 Devops 神器,本篇文章介绍如何安 ...
随机推荐
- cron表达式详解,cron表达式写法,cron表达式例子
(cron = "* * * * * *") cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}例 "0 0 12 ? ...
- 《UNIX环境高级编程》(APUE) 笔记第十章 - 信号
10 - 信号 GitHub 地址 1. 信号 信号是 软中断 ,信号提供了一种处理异步事件的方法. 当造成信号的事件发生时,为进程 产生 一个信号(或向进程 发送 一个信号).事件 可以是硬件异常( ...
- github Pull Request合入全流程介绍
图解全流程 详细步骤 1. fork仓库 2. clone fork仓库到本地 3. 关联upstream原仓库 在fork本地仓库输入下面命令进行关联: git remote add upstrea ...
- 一.8.django权限管理/drf权限管理
1.什么是权限管理: .权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源 .权限管理好比如钥匙,有了钥匙就能把门打开,但是权限设置是有级别之分的,假如这个系 ...
- 手写SpringMVC框架(一)-------项目搭建
SpringMVC处理请求的大致流程: 我们来开始着手手写一个SpringMVC框架. 新建一个springMVC项目,流程参见 SpringMVC框架搭建流程 引入servlet相关的jar包: & ...
- python中lambda匿名函数与函数之间的关系
- 以api文档为中心--前后端分开发离新思维
api文档编写好像很简单,其实不是.一个良好的api文档,需要就有以下内容:接口详细描述,接口参数详细描述,接口返回结果详细描述,容易理解的范例.这些内容其实是不少的,编写过程中还非常单调乏味.再加上 ...
- 每日一题 - 剑指 Offer 45. 把数组排成最小的数
题目信息 时间: 2019-07-01 题目链接:Leetcode tag: 快速排序 难易程度:中等 题目描述: 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最 ...
- efcore 跨表查询,实现一个接口内查询两个不同数据库里各自的表数据
最近有efcore跨库查询的需求,研究了下colder框架里文档的分库实现,发现并不能完全实现一个接口下的跨库查询请求,只能满足一个业务层构造指定的唯一一个数据库访问接口. 先说下文档是怎么实现的 D ...
- UDP/TCP 流程与总结
1 UDP流程 前序:可以借助网络调试助手工具进行使用 1 UDP 发送方 1 创建UDP套接字 2 准备目标(发送方) IP和端口 3 需要发送的数据内容 4 关闭套接字 from socket i ...