为什么要编写不合格的测试?

我们都知道红色,绿色和重构技术。 但是我从来没有说过我应该先写一个失败的测试。 我想-“为什么我的考试不及格?”。 所以这是我关于如何艰难学习的故事。 那段时间我失去了所有的信心。 我希望-没有人在生活中必须经历同样的经历。

我在团队中的角色

如果某人具有DevOps的角色,则您实际上无法说出他/她的工作。 如果我不得不夸耀-“我致力于软件的整体交付,并确保按照定义的质量标准按时交付服务。”但是,事实并非如此。 加入团队后,我是一名常规系统管理员。 我不是一个人工作。 团队中至少有两个人专门管理构建基础结构。 因此,就像结对编程一样,我进行了结对管理 。 但是,由于我们的构建代理(MacBook和Linux VM)变得非常稳定,因此我们还可以执行其他IT操作任务,包括引入fastlane,团队密码管理器,在Gocd中管理管道等。我们决定了自己的优先事项,并按照我们的意愿做了工作。 但是有一个问题。 如果在代理上发现任何错误配置或必须配置新工具,则我和Gopal Singhal(我的一对)需要尽快解决。 整个团队在与构建代理有关的一丁点问题上都受阻。 因此,它归结为任何需要添加到我们的构建CI池中的计算机都应事先进行全面测试。

任务

因此,我们在代理上仅安装了一个版本的Xcode,我们避免在同一个代理上安装多个版本的Xcode。 要求从Xcode 9.0转移到Xcode 9.1。 对我来说,这看起来很简单。 我必须像之前一样安装一台计算机,唯一的区别是Xcode版本。 我配置了一台机器并在其上运行一些作业。 一切顺利。 除了视觉比较测试之一失败。 我看到了它的日志。 日志说,视觉比较测试由于预期的基线图像和实际屏幕之间的差异而中断。 这远远超过了可接受的差异(3%)。 因此,我认为可能是由于获取了一些较旧的人工制品而导致测试失败。 因此,我检查了它的所有依赖关系-代码,人工制品,配置文件,配置,环境变量,网络配置,主板,RAM,CPU周期(双关语意)。 但是,没有任何帮助。 我花了两个多星期的时间来理解为什么作业在新机器上失败了。 但是,我没有任何线索。 我失去了所有的信心。 我不愿向团队更新-“我不了解为什么视觉测试在我的机器设置中失败了。”

经过两个星期的投资并陷入困境–是否寻求帮助,我想咨询其中一个QA。 他告诉那是一次有效的失败。 该测试失败了,因为实际上基准很旧并且应用程序的UI发生了很大变化。

新任务

现在,问题已经扭转了。 来自-“ 为什么在新计算机上失败? ”,它变为-“ 为什么CI池中的现有计算机没有失败。

我既快乐又悲伤。 很高兴-因为我正确设置了机器。 很难过-因为我对我们的测试失去了信心。 我们怎么可能还没有弄清楚我们有没有测试的测试。 每次我们检入代码时,我们都会运行测试,然后变为绿色。 没有人认为在应用程序的用户界面中进行了如此多的更改后,某些或至少一项视觉比较测试肯定会失败。 几个月来,没有人有任何怀疑。

解决方案是更新ImageMagick版本,因为它太旧了。 较早的版本与我们的红宝石之一不兼容。 因此,视觉测试根本没有进行。 因此,测试始终成功运行。

设置机器时,我们始终安装了最新版本的ImageMagick。 现有的CI机器具有较旧的ImageMagick版本,该版本是机器安装时的最新版本。 我最近安装的版本具有较新版本的ImageMagick。 因此,测试实际上是测试,然后仅在被检查的机器(即我正在测试的机器)上失败。

结论

现在,要么我先编写一个失败的测试,要么有目的地检查在“预期!==实际 ”时该测试是否确实失败了。 例如:我需要运行视觉测试。 即使通过。 我将应用程序的UI与我的照片进行比较。 如果那件事没有失败-再见,再见测试。 因为测试根本不测试任何东西,所以根本不需要存在。