如果 URL 包含“xyz”,如何有条件地跳过测试?在 QA 环境“abc”中运行的某些测试不应在生产“xyz”环境中运行。
我还没有找到有条件地检查环境以触发测试的好例子。需要动态检查 baseURL,并且最好在 beforeEach 中跳过测试。
运行赛普拉斯 6.2.0
beforeEach(() => {
login.loginByUser('TomJones');
cy.visit(`${environment.getBaseUrl()}${route}`);
});
it('test page', function () {
if environment.getBaseUrl().contains("xyz")
then *skip test*
else
cy.intercept('GET', '**/some-api/v1/test*').as('Test'););
cy.get('#submitButton').click();
})
Run Code Online (Sandbox Code Playgroud)
潜在的解决方案(经过测试并成功尝试):我通过 CLI 使用了过滤(分组)和文件夹结构的组合,我设置了文件夹 /integrations/smokeTest/QA 和 /integrations/smokeTest/Prod/
1.QA Test Run:
npm run *cy:filter:qa* --spec "cypresss/integration/smokeTests/QA/*-spec.ts"
2.Run All (both QA and PROD tests)
npm run cypress:open --spec "cypresss/integration/smokeTests/*/*-spec.ts"
3. Prod Test Run:
npm run cy:filter:prod --spec "cypresss/integration/smokeTests/PROD*/*-spec.ts"
Run Code Online (Sandbox Code Playgroud)
通常,我不会仅仅为了执行一个 Cypress 命令而编写自定义命令,但在这种情况下,获取全局测试上下文很有用this。
使用function回调的形式与自定义命令允许访问this,然后您可以自由地在测试本身上使用箭头函数。
Cypress.Commands.add('skipWhen', function (expression) {
if (expression) {
this.skip()
}
})
it('test skipping with arrow function', () => {
cy.skipWhen(Cypress.config('baseUrl').includes('localhost'));
// NOTE: a "naked" expect() will not be skipped
// if you call your custom command within the test
// Wrap it in a .then() to make sure it executes on the command queue
cy.then(() => {
expect('this.stackOverflow.answer').to.eq('a.better.example')
})
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3217 次 |
| 最近记录: |