我最近开始使用Cypress,我注意到运行测试可能需要60-80秒,但如果我在浏览器上使用相同的UI"流程",我需要20-30秒才能完成。
这正常吗?是否有任何配置会影响它?
我的测试只有几行长,只使用了cy.get()
和cy.contains()
。
Cypress必须在第三方浏览器上运行代理,以便记录发送和接收的请求。这样可以显著降低加载时间。
我使用的解决方案是在他们提供的电子浏览器中运行测试。例如
cypress run -s [your spec file] --headed -b electron
--headed
-显示电子窗口,这样你就可以知道发生了什么
-b electron
-使用电子浏览器
我发现GUI中Cypress测试缓慢的原因之一是Cypress左侧边栏中展开的操作列表。
你会注意到,就在每个测试的标题下面是单词";⯆测试";在它的左边和下面有一个箭头,所有的动作都会在发生时添加。如果您通过点击单词"来关闭该列表;测试";列表关闭,测试现在运行得更快。现在,即使你关闭了一个,下一个测试也会再次打开它。
要使默认状态关闭,您需要在代码中进行一些破解。正如我在其他地方所写:在文件Cypress\resources\app\packages\runner\dist\Cypress_runner.js中查找代码中的var Hook = Object
。稍低于此值(版本3.8.3中的第102918行,版本4.5.0中的第156012行(将isOpen
字段值从true
更改为false
。您的测试现在应该可以在没有任何减速的情况下运行。
版本6及以上的更新:
在与上面相同的文件中,查找字符串:this.state === 'failed'
,并将行从:更改为
return Boolean(this.state === 'failed' || this.isLongRunning || this.isActive && (this.hasMultipleAttempts || this.isOpenWhenActive) || this.store.hasSingleTest);
至:
return Boolean(this.state === 'failed' /* || this.isLongRunning || this.isActive && (this.hasMultipleAttempts || this.isOpenWhenActive) || this.store.hasSingleTest */);
Cypress测试比单元测试慢得多,这很正常。UI和无头运行之间的差异可能是由命令和测试之间的柏树初始化引起的。
为了减少通过测试所需的时间,请避免使用cy.wait(
,例如使用cy.get(
。
此外,您还可以尝试使用--headless --browser chrome
标志运行所需的时间。