前往塞浦路斯,嗯,塞浦路斯 - Joomla 如何进行端到端测试
曾经有一段时间,测试员不得不手动测试 Joomla 中的所有内容,每次有更改时都要点击所有视图和特性。这很累人,也很繁琐,容易出错。
然后出现了 Selenium!这是一个自动控制浏览器的工具,通过所有 Joomla 定义长点击路径,可重复、可靠、不累人且需要较少的人力。测试员看到了他们所做的所有测试,这非常好。
测试 Selenium
但是,这并不容易。实际上,人类与浏览器的交互包含数百个微小的动作,你通常不会注意到。你滚动一点,在这里等一秒,然后做其他事情,比如在那里登录。许多未注意到的副作用会影响浏览器实际执行的操作。“点击保存按钮并查看条目是否显示在列表视图中”听起来很简单,但你需要等待页面重新加载,等待所有内容正确渲染,然后可能向下滚动一点以找到你保存的条目,设置或重置过滤器等。
为什么我要写这篇文章?因为测试结果非常不稳定,不可靠。我们在 CI 系统中为每个拉取请求和每个合并运行这些测试,大多数情况下,这会导致由于诸如脚本在某个点上等待时间不足而导致 Joomla 安装失败等问题,从而导致假阴性。
修复 Selenium?
因此,我们使用了 Selenium 的包装器 Codeception。这使一切变得完美吗?实际上,并没有。它并没有减轻这些问题,但每一点帮助都是好的,对吧?那么,为什么 Joomla 的每个特性现在还没有完全被这些自动化测试覆盖呢?对于那些提问的人来说:你有没有在本地机器上尝试设置 Selenium?
从理论上讲,Selenium可能是一个很酷的工具,但在我看来,它的原则和基本设计在过去15年多时间里并没有改变和适应。我觉得让它启动相当困难……这可能是我们测试覆盖率相当低的主要原因。即使人们愿意编写测试并且能够适应必要的编程风格,大多数人已经在本地设置Selenium以运行自己的测试时失败了。
其他软件也存在类似问题
所以一切都很糟糕,我们将永远手动测试吗?
实际上,不是的。你可能听说过一种最近出现的新的网络技术,叫做JavaScript。我知道,谁还需要另一种编程语言呢,对吧?无论如何,所以这种JavaScript似乎相当重要,对吧?他们似乎也遇到了和我们类似的问题,所以他们没有只写一个Selenium的替代品,而是写了几个。其中之一是Cypress。
Cypress能做什么?Cypress允许你编写类似于Selenium的测试,并在多个不同的浏览器上运行它们。然而,尽管Selenium的设置相当困难,但Cypress几乎相反。具体来说,如果你想为Joomla CMS运行这些测试并且已经检查出了4.3-dev分支,你基本上就准备好了。Cypress在运行"npm install"时自动安装,你本地环境需要做的唯一事情是在根目录中修改cypress.config.js文件。
如何使用Cypress
但我们如何实际运行测试呢?在你的Joomla文件夹的CLI中调用"npm run cypress:open",不久之后,应用就会打开。在这里,你可以选择运行端到端测试,并决定使用哪个浏览器。然后它会列出所有可用的测试套件,你可以点击你想要立即运行的套件。
“这听起来基本上就像你期望Selenium如何工作。这有什么特别之处?”
你见过Selenium的GUI吗?我也没见过。Selenium并没有提供这样的GUI。我可以保证,这个GUI对我们进行测试的人来说是一个巨大的简化。但这并不是使Cypress优于Selenium的唯一原因。
在选择测试套件时,测试会执行,你可以在浏览器中实时查看测试。在执行过程中,你可以看到在一边执行的是脚本,在另一边是浏览器中的结果,但更重要的是:你可以回到测试执行的每一步,查看快照。这些也不只是截图,而是浏览器在那个时刻的真实快照,允许你在那个时刻检查实际的HTML。测试的截图甚至视频也是可能的。
Cypress为什么这么好
Cypress也原生运行在JavaScript/NodeJS上,这允许与浏览器中的所有事件很好地集成。虽然Joomla主要是一个PHP项目,但测试是用JavaScript编写的,这确实使编写测试更容易。
加载页面的处理通常也更简单。
在Selenium中你需要做一些恶心的技巧来等待onReady,Cypress会自动为你处理。你基本上感觉到这些人看了Selenium,并在他们的产品中解决了你遇到的所有大问题。而这只是开箱即用的功能。插件市场非常庞大,有很多其他酷炫的功能,比如部分截图和与已知良好快照的比较。
还有什么要做的
既然我们已经拥有了这款非常酷的工具,剩下的工作基本上会自动完成,对吧?我们希望如此,尽管当然这会是一份相当繁重的工作。大多数现有的系统测试已经转换为 Cypress,我们希望能够获得足够的经验,以便很快推出大量新的、好的测试。现在,我们像在 Codeception 中那样分割代码,在我们的测试文件夹中有一个测试块和辅助代码,还有一个名为 joomla-cypress 的支持项目,它提供了一些常用行为。希望到年底,我们能够拥有一个庞大的测试套件,让我们再迈出一步。
Cypress 的附加功能
Cypress 拥有相当好的浏览器插件,可以记录浏览器中的点击操作。这将允许我们要求人们提供这样的记录来重现问题。在手动重现问题时,这将消除猜测。在某个时候,这甚至可能意味着对新功能进行自动化测试的要求。
它如何帮助第三方扩展开发者
我为什么要写这些?自动化测试不仅仅是软件开发中的一种花哨工具。特别是对于较小的第三方扩展,自动化测试是开发者控制问题的解决方案。它有助于保持他们的扩展在新版本的 Joomla 中轻松运行。Joomla 总是要求第三方开发人员将其扩展与我们当前的代码库进行测试,但如果你要手动完成所有这些,当然需要相当多的工作。记录测试将允许他们轻松地为每个版本重复工作,在客户之前捕捉到错误。
从长远来看,我们希望提供如何获取完整设置、持续集成、代码风格检查和自动化测试的 howto 和教程。所有这些针对扩展开发者的最新 Joomla 代码库。这意味着他们可以创建一个设置,定期对其扩展进行当前 Joomla 代码库的测试,如果这些测试失败,他们将得到早期警告,让每个人都能对项目提供反馈或调整自己的代码以与新版本的 Joomla 兼容。从长远来看,这希望意味着为最终用户带来更少的问题,让开发者有更多时间专注于新的或改进的功能,而不是不得不进行错误修复。
在达到那个目标之前,我们还有许多工作要做,但我希望你们都能加入我们自动化测试的旅程。有一天,多亏了志愿者的辛勤工作和 Cypress,当所有测试都编写完成后,我们可以在塞浦路斯松树旁放松地享用鸡尾酒。一个人可以梦想!
发表在 Joomla 社区杂志上的某些文章代表了作者对特定主题的个人观点或经验,可能并不与 Joomla 项目的官方立场一致
通过接受,您将访问 https://magazine.joomla.net.cn/ 外部的第三方服务
评论