c# - 如何阻止 Jenkins 将良好的测试运行标记为错误?
问题描述
我正在通过批处理文件在 Jenkins 中运行 C#/Selenium 测试。
Example call "C:\FrontEnd\MobileRegression.bat"
在bat文件里面
c:\SpecRun\SpecRun.exe run Default.srprofile /baseFolder:C:\testBase /filter:"@MobileGalaxy" /log:specrun.log /outputfolder:output /report:MobileGalaxy.html
这很好用,在这个例子中,有 10 个场景要运行。有时 1 或 2 个场景会失败,但如果发生这种情况,它们会再重试两次,并且总是在第 2 次或第 3 次尝试时通过。因此,在运行结束时,结果是通过,并且由于某些场景在第一次运行时失败,Jenkins 将其记录为失败。是否有任何改变(例如,如果 90% 的测试通过然后标记为通过)?
提前感谢您的帮助
凯夫
解决方案
Jenkins 以错误结束,因为您的批处理文件返回的退出代码不为零,这意味着:
当程序完成执行时,它会向系统返回退出代码。退出代码(也称为“退出状态”)是一个从 0 到 255 的整数。批处理系统报告此退出代码。始终为零表示成功,非零表示错误。
根据评论,我向您建议以下方法:
#1 尝试在批处理文件中捕获
您需要确保您的批次以零作为退出代码或成功结束。您可以使用errorlevel并退出 /b 0。
这里有一些理论和例子:
- http://steve-jansen.github.io/guides/windows-batch-scripting/part-3-return-codes.html
- https://stackoverflow.com/a/734634/3957754
- https://stackoverflow.com/a/6817833/3957754
- https://stackoverflow.com/a/21772426/3957754
- https://gist.github.com/colaboy2004/6270341
- https://gist.github.com/kurumigi/212695
#2 尝试使用 jenkins 管道脚本捕获
在这种方法中,您需要将一个批处理文件(有 10 个场景)拆分为 10 个批处理文件(一个场景一个)
之后,您可以使用 jenkins 管道脚本调用每个批处理文件并使用try catch控制错误并更新 counter_error 变量。
在您的詹金斯脚本结束时,您可以评估:
if count_error > 9
// notify a success execution to jenkins
// using currentBuild.result = 'SUCCESS'
这里有一些理论和例子:
推荐阅读
- python - 使用回调加载 Gensim FastText 模型失败
- javascript - jQuery 显示/隐藏切换仅在大屏幕尺寸下触发
- javascript - 如何在 DOM 中搜索具有特定类的项目
- javascript - 带有提示的 Cookie
- sapui5 - 为 SAPUI5 应用程序实施内联帮助/导览
- javascript - 是的,验证不同对象形状的数组
- react-native - 刷新内容中的平面列表
- javascript - 物化 CSS 轮播指示器不可点击
- javascript - PHP 从 React JS 发送 FormData 后返回 NULL(Fetch,方法:POST)
- android - 使用没有自定义适配器的 Moshi 解析列表