JMETER+ANT+JENKINS持续集成并生成html报告及碰到的坑

持续集成的大致步骤:
1.下载ant,配置ant环境变量,将jmeter主目录下的extras\ant-jmeter-1.1.1.jar拷贝到ant主目录\lib目录下。
这样运行ant的时候不会报错。
2.修改jmeter.properties文件如下部分,我这里都修改成true,这样执行完脚本后就会保存这些结果到.jtl文件里面:

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=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=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=false
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

2.配置运行的build.xml文件,xml文件说明:

在这里插入代码片  
  
  
      
      
          
      
      
        
      
       
      
      
      
      
      
        
      
      
      
      
      
          
          
      
      
      
          
          
      
      
      
          
      
      
               
              
          
      
          
      
           
          
                
          
          
              
                  
                  
              
          
      
      
  

3.在本地运行ant run成功后,部署到jenkins上:
选择一个自由风格项目,增加一个构建步骤【invoke Ant】,如下
JMETER+ANT+JENKINS持续集成并生成html报告及碰到的坑_第1张图片

targets里面填写build.xml文件 里面 的default的值
Build File里面填写build文件的路径
你也可以直接通过命令运行 :
1.到build.xml当前目录下:

ant run

2.直接运行:

ant -buildfile 文件路径

3.然后在添加一个构建后操作【Public HTML Report】,如下:
JMETER+ANT+JENKINS持续集成并生成html报告及碰到的坑_第2张图片
这个插件不会帮你产生任何的html文件,只是把你workspace下对应项目产生的文件复制到对应的jobs目录下
HTML directory to archive :采用的是相对路径,这个对应的是当前jenkins的对应jobs目录下
Index pages:集成在jenkins中测试报告的名称
Report title:显示在Jenkins下的名称
4.运行结果如下:
JMETER+ANT+JENKINS持续集成并生成html报告及碰到的坑_第3张图片

在这里我碰到了测试报告在jenkins里面它不显示css样式

问题分析
出现该现象的原因在于Jenkins中配置的CSP(Content Security Policy)。

简单地说,这是Jenkins的一个安全策略,默认会设置为一个非常严格的权限集,以防止Jenkins用户在workspace、/userContent、archived artifacts中受到恶意HTML/JS文件的攻击。

默认地,该权限集会设置为:

sandbox; default-src ‘none‘; img-src ‘self‘; style-src ‘self‘;

在该配置下,只允许加载:

Jenkins服务器上托管的CSS文件
Jenkins服务器上托管的图片文件
而如下形式的内容都会被禁止:

JavaScript
plugins (object/embed)
HTML中的内联样式表(Inline style sheets),以及引用的外站CSS文件
HTML中的内联图片(Inline image definitions),以及外站引用的图片文件
frames
web fonts
XHR/AJAX
etc.
可以看出,这个限制非常严格,在此限制下也就不难理解为什么我们的HTML没法正常展示样式了。

解决方案
临时解决方案
要解决该问题,方式也比较简单,就是修改Content Security Policy的默认配置。

修改方式为,进入Manage Jenkins->Script console,输入如下命令并进行执行。

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

当看到如下结果后,则说明配置修改已经生效。
Result
Result:

再次进行构建,新生成的HTML就可以正常展示样式了。需要说明的是,该操作对之前构建生成的HTML报告无效。

永久解决方案
不过,该方法还存在一个问题:该配置只是临时生效,当重启Jenkins后,Content Security Policy又会恢复为默认值,从而HTML样式又没法展示了。

当前,Jenkins官方还没有相应的解决方法,我们只能在每次启动或重启Jenkins时,重新修改该安全策略。

如果手工地来重复这项工作,也是可行,但并不是一个好的解决方案。

回到刚才的Script console,会发现我们执行的命令其实就是一段Groovy代码;那么,如果我们可以实现在Jenkins每次启动时自动地执行该Groovy代码,那么也就同样能解决我们的问题了。

好在Jenkins已经有相应的插件:

Startup Trigger: 可实现在Jenkins节点(master/slave)启动时触发构建;
Groovy plugin: 可实现直接执行Groovy代码。
搜索安装startup-trigger-plugin和Groovy插件后,我们就可以进行配置了。

配置方式如下:

新建一个job,该job专门用于Jenkins启动时执行的配置命令;
在Build Triggers模块下,勾选Build when job nodes start;
在Build模块下,Add build step->Execute system Groovy script,在Groovy Script中输入配置命令,System.setProperty(“hudson.model.DirectoryBrowserSupport.CSP”, “”)。
需要注意的是,添加构建步骤的时候,应该选择Execute system Groovy script,而不是Execute Groovy script。关于这两者之间的差异,简单地说,Groovy Script相当于是运行在master/slave系统JVM环境中,而system groovy script,则是运行在Jenkins master的JVM环境中,与前面提到的Jenkins Script Console功能相同。如需了解更多信息,可查看Groovy plugin的详细说明。

至此,我们就彻底解决HTML样式展示异常的问题了。

但还有一点需要格外注意,在本文的演示中,我们修改CSP(Content Security Policy)配置时关闭了的所有安全保护策略,即将hudson.model.DirectoryBrowserSupport.CSP设置为空,其实这是存在很大的安全隐患的。

正确的做法,我们应该是结合项目的实际情况,选择对应的安全策略。例如,如果我们需要开启脚本文件加载,但是只限于Jenkins服务器上托管的CSS文件,那么就可以采用如下配置。

System.setProperty(“hudson.model.DirectoryBrowserSupport.CSP”, “sandbox; style-src ‘self‘;”)

除此之外,CSP可以实现非常精细的权限配置,详细配置可参考Content Security Policy Reference。

你可能感兴趣的:(JMETER+ANT+JENKINS持续集成并生成html报告及碰到的坑)