在Jenkins的pipeline项目中运行jmeter测试-教程

原文地址:https://www.blazemeter.com/blog/running-jmeter-test-jenkins-pipeline-tutorial


Jenkins2.0引入了一个新的项目类型-pipeline(管道),它之前只能通过安装插件使用。从Jenkins2.0开始,pipeline就没有这个限制了。


相对于平常的“freestyle”类型的项目,pipeline有如下一些优势:


  1.弹性 - pipeline的构建在Jenkins重启后也可以“幸存”;

  2.可暂停/可参数化 - pipeline的构建可在任意阶段暂停,来等待用户输入。另外,也可以通过Jenkins API来控制pipeline的jobs。

  3.有力/灵活 - pipeline的构建可以有复杂的逻辑、条件化的操作,可以并行在多个agent上执行,与其他job集成等等。pipeline使用groovy-based DSL(基于groovy的DSL)来定义,这样Jenkins和Java API都可以用来定义job。

  4.对VCS友好 - 作为groovy的脚本,pipeline的代码可以放到版本控制系统中。它甚至可以在Jenkins job执行的时候,被高速加载,这样可以更好的追踪导入、导出和修改,以及实验。


在今天的文章种你将会学习如何添加一个jmeter测试到pipeline项目中,并学习一些代码例子和demo。


1.通过pipeline来运行已存在的jmeter构建步骤

这个章节假定你已有一个可工作的构建步骤,它是用来测试应用的jmeter测试。如果没有的话,可以从Continuous Integration 101: How to Run JMeter With Jenkins 这篇文章种check out概览和启动的介绍。如果你已有一个Jenkins job,是用来运行jmeter测试,它名为“JMeter - Freestyle”,你可以在pipeline中用如下方式来运行它:


build job: 'JMeter - Freestyle'

 

The full Pipeline code will look something like:

 

node {
   stage 'Build Application'
   // do what you need to do to build your application
   echo 'Compilation is done'
   stage 'Deploy Application'
   // do what you need to do to deploy your application
   echo 'Deploy is done'
   stage 'Execute JMeter Performance Tests'
   build job: 'JMeter - Freestyle'
}

在Jenkins的pipeline项目中运行jmeter测试-教程_第1张图片

基本上,上面的pipeline配置只能将预定义的“JMeter - Freestyle” Jenkins job作为pipeline构建的一部分来执行,并在pipeline的dashboard中的报告里显示使用的时间、成功与否和一些日志。

在Jenkins的pipeline项目中运行jmeter测试-教程_第2张图片

指定构建参数

如果你已存在job是parameterized的,参数可以用如下的方式通过pipeline来传递:

node {
   stage 'Execute JMeter Performance Tests'
   build job: 'JMeter - Freestyle', parameters: [[$class: 'StringParameterValue', name: 'VirtualUsers', value: '100']]
}


2.使用pipeline来配置一个新的jmeter测试

因为pipeline项目是基于Groovy的,所以你可以用Groovy语法来开始任意的处理。Jenkins提供了一些快捷的参数来使得这个过程更容易。例如,你可以在基于Unix的系统中使用sh命令或在Windows系统中使用bat命令来启动一个shell脚本(jmeter的startup脚本一般都是shell脚本)。可以在Basic Groovy Syntax for Pipeline Configuration Jenkins的操作手册来获取更多细节。

pipeline的stage运行一个基于命令行的jmeter测试,会像这样简单:

node {
   stage 'Run JMeter Test'
   bat 'c:/jmeter/bin/jmeter.bat -n -t c:/jmeter/extras/Test.jmx -l test.jtl'
}

输出会比较相似,然而,如果这样的话,logging信息会直接在“Run JMeter Test”阶段出现。

在Jenkins的pipeline项目中运行jmeter测试-教程_第3张图片

发布构建产品

pipeline默认不会发布任何东西到build dashboard中。你需要手动指定需要保存的内容,这样,你、团队、以及相关的人士可以通过Jenkins网页界面来访问构建结果。

为了告诉Jenkins一旦构建结束,马上发布 i.e. JMeter .jtl 结果文件,你需要添加如下内容到你的pipeline配置中:

step([$class: 'ArtifactArchiver', artifacts: '**/*.jtl'])

或者也许你需要保存jmeter.log用于后续的分析: 

step([$class: 'ArtifactArchiver', artifacts: '**/*.jtl, **/jmeter.log'])


只要添加这个步骤,你就可以在你的构建dashboard上看到 “General Build Step -> Archiving Artifacts” 日志内容、.jtl结果和jmeter.log文件

在Jenkins的pipeline项目中运行jmeter测试-教程_第4张图片


使用第三方的构建工具(Ant, Maven, 等等)


通过命令行来运行jmeter测试不是唯一的选择。也可以使用Ant任务、Maven插件、Gradle插件等来运行jmeter测试。

作为一个根本的持续集成工具,Jenkins支持上述的构建工具。你可以在Global Tools Configuration页面安装配置它们。

Jenkins -> Manage Jenkins -> Global Tool Configuration

或 

http://jenkins_host:jenkins_port/configureTools/

在Jenkins的pipeline项目中运行jmeter测试-教程_第5张图片

这次我会使用Apache Ant作为例子。其他的构建方式也比较类似。如果你看一下你的jmeter安装目录下的extra文件夹,可以找到build.xml文件,是Ant脚本的例子,它用来执行Test.jmx,并使用XSL模板将结果文件转换为HTML格式,这样你就可以直接在Jenkins的dashboard上查看HTML格式的报告了。

然后我们看看相关的pipeline的配置:

1.首先,我们需要切换Jenkins的workspace到jmeter的extra目录,因为Ant构建文件默认从这个目录launch,result文件也会保存在这里。在pipeline种,可以通过如下命令完成:

ws('c:\\jmeter\\extras') {
   //do what you need to do here
}

2.其次,我们需要从Jenkins种获取Ant工具。可以通过使用如下工具命令:

def antHome = tool 'ant'

现在,我们有了antHome这个变量,它解决了Ant构建工具的路径。

3.然后:我们需要运行测试并发布这些结果。它们已经在前面的章节中涉及到了。

将它们合并起来,最终的pipeline代码如下:

node {
   ws('c:\\jmeter\\extras') {
       stage 'Run JMeter Test with Apache Ant'
       def antHome = tool 'ant'
       bat "pushd c:\\jmeter\\extras && ${antHome}\\bin\\ant -f build.xml"
       step([$class: 'ArtifactArchiver', artifacts: 'Test.html', fingerprint: true])
   }
}

当你启动构建,Jenkins会通过pipeline代码调用Apache Ant,并发布结果“Test.html”到构建dashboard。

在Jenkins的pipeline项目中运行jmeter测试-教程_第6张图片


我相信这篇文章能帮助你开始使用Jenkins pipeline,你可以更容易、更顺利地集成你的性能测试到你的持续交付过程中。


译者注:文中链接中为英文的内容,会在后续翻译。希望对看到这篇文章的你有帮助。


你可能感兴趣的:(翻译,Jenkins使用)