前言:
经上次配置完Jenkins发送邮件之后,本人就想着不如把根据测试报告中是否存在失败的用例的不同情况发送邮件也进行配置了,说干就干,经过两天时间的研究和各种搜索资料的处理,最后终于成功了。
操作步骤:
进入项目配置界面中,在增加构建步骤中选择Execute Windows batch command:
接着在Execute Windows batch command中输入代码:
chcp 65001
cd F:\MyTest\apache-jmeter-5.4.1\test\jmeter_report
F:
findstr /IN "<failure>true</failure>" jtl\接口测试报告%date%.jtl
if %errorlevel% equ 0 (echo "无失败用例执行!!!" && exit 1)else (echo "用例执行正常!!!")
findstr /INR /C:"1 [4-5]0[1-4] G" jtl\接口测试报告%date%.jtl
if %errorlevel% equ 0 (echo "请求出现异常!!!" && exit 1)else (echo "请求结果正常!!!" && exit 0)
效果如图所示:
代码讲解:
chcp
chcp 65001为将cmd命令行的编码方式更改为utf-8,之所以执行这一行代码,是因为之前我们在去全局变量中配置了编码方式为utf-8:
该参数的配置主要是为了处理Jenkins输出中文时所显示的中文为乱码的问题,例如下图所示的样例(配置方法参考之前Jenkins配置邮件通知服务的文章Jenkins配置邮件通知服务,完整教程(含发送成功无法接收邮件处理方案)_LJS0717TT的博客-CSDN博客_jenkins邮件通知配置后收不到邮件):
而就是因为配置了上方参数的原因,导致了我们在Execute Windows batch command中输入的命令在写入需要执行的脚本文件时所使用的编码方式变成了utf-8,而cmd默认的编码方式为gbk,如下图:
而代码chcp 65001的作用就是确保执行之后的判断语句能正确生效,我们先来看看执行后的效果图:
看着一切正常,对吧,接着我们再看看没有切换编码格式的执行后的效果图:
看着没啥太大的区别对吧,请仔细观察对比以下两张图片的:
仔细观察可以发现,虽然gbk与utf-8两个编码格式中显示的内容是一致的,但是utf-8进行编码的代码所显示的要长一些,扯远了。。。
总之,在配置完Execute Windows batch command后,用例判断总是失败,可以使用chcp查看写入要执行的bat文件中的代码的编码格式,接着再在Execute Windows batch command中使员工chcp+编码方式代码转换一下就可以了。
cd为切换当前路径代码,若切换到其他磁盘的路径,在切换后需要再输入一次盘符切换操作的磁盘,如下图:
切换路径后不再次输入盘符的话,会继续在当前路径执行操作,而不会在指定的路径执行操作。
findstr
findstr的作用是在文件中寻找字符串,参数在cmd命令行使用findstr /? 查看:
这里重点说明一下/R参数,/R参数的说明为:将搜索字符串作为一般表达式使用。简单了说就是使用正则表达式,支持的元字符参考如下:
在cmd中使用findstr中是可以同时搜索多个不同的字符串的,例如:
findstr /IR /C:"<failure>true</failure>" /C:"1 [4-5]0[1-4] G" jtl\接口测试报告%date%.jtl
执行结果:
虽然在cmd中支持该写法,但是在Jenkins中使用该写法则会产生以下错误: 可以看到,findstr后的第一个匹配条件成功匹配出了相应的数据,但是第二个匹配条件却显示为Cannot open(无法打开),所以,为了防止该问题,我们可以将代码才分为两条findstr语句:
拆分后,即可在文件中正常进行匹配 。
注:
1、%date%为调用Jenkins中所配置的Date Parameter参数,使用该参数主要是为了实现一个动态匹配文件的效果,设置方法请参考上方Jenkins配置邮箱通知链接中参数配置方法。
2、1 [4-5]0[1-4] G为正则表达式,主要用于检测没有设置断言的请求出现4XX或5XX等错误
如上图为jtl文件中响应头部信息。
if
if语句用于判断并输入报告中是否存在失败用例,其中使用方法及参数如下:
值得注意的一点就是,在编写if语句时,在else之后一定要加一个空格,否则会提示cmd中会提示该位置不应该出现XXX,而在Jenkins控制台中,则看不到相应的错误提示信息,只能看到最后Jenkins控制台显示:“Build step 'Execute Windows batch command' marked build as failure”
所以,建议在编写完if判断语句后,先在cmd命令行中执行一次,查看其执行结果是否符合预期。
以下附上两条正确的if语句,大家可以copy更改成自己需要的效果:
if errorlevel 0 (echo "测试1")else (echo "测试2")
if 1 EQU 0 (echo "1测试1" && exit 0 ) else (echo "1" && exit 0 )
其中equ为判断是否相等其他参数可以使用if /?进行查看:
注:当findstr语句成功匹配出符合条件的文本后,%errorlevel%的值则为0,反之则为1
在Windows中,0代表成功,1代表失败。
好了,以上就是配置Jenkins自动判断用例执行结果的方法,以及一些其他一些文章中所没有讲解的需要注意的问题点,编写此文章的目的主要是为了让大家能避免太多不必要的坑,避免再次经历跟我一样过程:花了近两天的时间各种搜索,看各种文章,尝试各种方法解决该问题。
好了这次是真的完了
存在什么不足的地方,欢迎联系我,谢谢
YX9010_0@的第六篇文章
2021/08/19