【问题标题】:How to read testdata/Json in cypress only once system wide?如何仅在系统范围内读取 cypress 中的 testdata/Json 一次?
【发布时间】:2020-11-22 18:10:33
【问题描述】:

这很容易,但我找不到解决方案,我几乎到处都看到,要从夹具目录中读取 json,需要使用 describe,其中包含可以使用 fixture 的 test(it)数据。

难道没有一种方法可以让您只导入一次 testdata,将其放入一个变量中,然后在任何测试中几乎任何您想要的地方使用该变量,而不是将测试放入 describe 中以获取数据夹具。 我的意思是很奇怪,您多次阅读相同的 json。特别是如果它的系统范围很广。 或者 当您使用cypress-cucumber-preprocessor 时,解决方案是什么?那么你没有it 块。 如果不存在常规方法,请提供干净的 hack。

抱歉,文字太长了。

【问题讨论】:

  • 您可以使用cypress.json 文件作为在测试中全局读取数据的替代方法。这会满足您的用例吗?或者您只是在寻找仅涉及使用夹具文件的解决方案?
  • @AlapanDas 我有多个文件要在我的测试中加载,不同的文件差异测试,多个测试中的一些文件,我可以将它们放在我想要的任何地方,最好是夹具文件夹。无法将所有内容都放在 cypress.json 中。

标签: cypress fixtures


【解决方案1】:

您可以通过在support/index.js 文件中的before()beforeEach() 中导入所有夹具文件来实现此目的。 (Cypress Doc Reference)

所以你的代码应该是这样的:

1.内部support/index.js:

before(function() {
  cy.visit('/')
  cy.fixture('testdata').then(function(testdata) {
    this.testdata = testdata
  })
})

2.在您的测试中直接使用来自您的设备的数据 -

describe('All tests', function() {
  it('test1', function() {
    cy.get('#txtUsername').type(this.testdata.username)
    cy.get('#txtPassword').type(this.testdata.password)
  })
})

这是因为 - 默认情况下,赛普拉斯会自动包含支持文件 cypress/support/index.js。该文件在每个规范文件之前运行。执行顺序类似于:

但有一个问题。这将适用于使用cypress run 执行单个/所有文件,并且仅使用cypress open 执行单个文件。

cypress open 中的“运行所有规范”的情况下,测试运行程序将所有规范捆绑并连接在一起,本质上是运行如下所示的脚本。这意味着支持文件中的代码在所有规范文件之前执行一次,而不是在每个规范文件之前执行一次。

【讨论】:

  • 有什么收获?赛普拉斯会在 spec-a 之后清除加载的固定装置吗?
  • cypress run 也会发生同样的情况吗?
  • 这仅在您使用测试运行器cypress open 运行所有规范的情况下不起作用,因为所有规范文件都捆绑为一个,而support/index.js 只执行一次。对于cypress run,在执行所有规范文件的情况下,将为每个支持和规范文件对打开一个新的浏览器窗口。
  • 那么为什么在 cypress open 中运行所有规范时它不起作用?
  • 我认为问题是你不能再在个别规格中使用cy.visit()。或者使用箭头函数。
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多