“您编写过自动测试吗?尝试赛普拉斯“

赛普拉斯

第一印象和遇到的问题的自动测试



Luxoft首席软件开发人员Dmitry Kochergin



首先,我想指出,我不是专业的自动测试人员,而是Java程序员。但是有一天,这项任务开始进行烟雾测试,以对应用程序的主要功能进行基本检查,该应用程序最近在不依赖警告的情况下因相关服务API的更改而被破坏。



所有对JS中从零开始进行自动测试感兴趣但又不敢问的人都会对本文感兴趣。



首先,我从未阅读过有关自动测试的任何内容。主要的先入之见是自动测试是困难的,因为根据评论,您可以设置Selenium...。此外,您需要学习XPath和PageObject,而这是您根本不想做的。



在Internet上快速搜索产生了更年轻,更有前途的工具:WebDriver.IO,Pupeteer(现在是Playwright更好)和Cypress。我选择了后者,接受了美好的承诺,并从专家们那里获得了关于自动测试最佳工具的一些评论。



这就是正在运行的测试的浏览器窗口的外观。左边是已执行的测试命令和状态,右边是测试执行过程中应用程序的视图:



图片



这是测试代码的样子(在Cypress中,所有代码都在JS中,选择器是普通的CSS选择器):



图片



在运行时看起来像这样:



图片



当我在寻找用于自动测试的工具时-我脑海中有一幅图片,可以在浏览器中直接创建测试,以便我可以简单地“单击脚本条目”-系统记录了我的操作(我单击的元素的CSS选择器)。然后,我查看生成的测试,如有必要,调整选择器,然后将其保存到测试套件中。嗯...



那个故事后来变得难以实现,我没有找到这样的工具(也许有人会在评论中告诉您正确的方法)。赛普拉斯(Cypress)受制于在真实的浏览器中执行测试的事实,甚至可以使用自己喜欢的Chrome开发人员工具在测试执行的同时探索DOM(例如,如果选择器不起作用,则可以打开控制台并立即查看执行测试的原因)。



图片



在其他对我来说很重要的参数中,我至关重要地不想花很多时间在编写(还是在浏览器中编写测试)或维护测试上。就我的目的而言,这已经足够了。仅仅是有关Cypress的信息:从我第一次打开Cypress网站到登录该应用程序的第一个测试都花了一个小时。



因此,赛普拉斯框架的第一页告诉我们这是JavaScript端到端测试框架(cypress.io)。接下来,我们快速阅读了该文档,它确实很完整,您可以找到几乎所有问题的答案(我很快在StackOverflow上找到了所有其他内容):



图片



进一步从该站点提供的功能列表:



  • Time travel – – , . , DOM, Chrome devtools.
  • Real time reloads – JS , – (hot reload).
  • Automatic waiting – , , Cypress . , .
  • Network traffic control – Cypress / , .
  • 屏幕截图和视频-赛普拉斯在测试过程中会记录浏览器屏幕(MP4)的视频以及窗口中的说明。


当然,所有这些东西都可以在没有开放式CI浏览器的情况下运行,而使用无头Chrome或Electron。



但是也有一些问题。



最初,我不知道可以等待对服务器的XHR请求结束,而是插入超时,这样测试会随机下降。已更正。



图片



然后热重载每隔两次工作一次,我一直不得不重新启动整个赛普拉斯,因为我不确定是否应用了所做的更改。事实证明,在我的IDE(IntelliJ IDEA)中有如此糟糕的复选框,默认情况下也会启用这些复选框,因此事实证明,保存文件不是保存而是最终保存。



图片



下一个问题是我的应用程序正在使用窗口获取来获取对服务器的请求,而Cypress仅看到XHR请求。来自StackOverflow的肮脏黑客提供了帮助(我知道从窗口中删除了获取方法,以便浏览器对XHR进行回退而不是获取):



图片



接下来,存在一个模拟移动浏览器的问题,它只是无法在用户代理的测试代码中解决,而是在单独的特殊文件中-一切顺利。



图片



然后,CORS问题得到解决:



图片



然后,文件上传无法正常工作,标准解决方案不起作用,但是cypress-file-upload库提供了帮助:



图片



我无法解决的唯一问题是测试的可重复性。即,用于运行测试(夹具)的稳定且相同的初始数据,这更多的是配置任务,不是Cypress,但仍未解决。



因此,在以下情况下,赛普拉斯看起来是将自动测试引入项目的绝佳工具:



  1. 有JS知识
  2. 自IE6(Cypress当前支持Chrome,Chromium,Edge,Electron,Firefox)以来,无需在各种浏览器中进行测试这是该主题讨论但是我可以说,一年前,当我开始使用Cypress时,它仅支持最新版本的Chrome和Electron而不需要UI。
  3. 想要快速进行测试并忘记它们,直到有人破坏应用程序为止:)


赛普拉斯:随身携带并使用它!



All Articles