在多个域上运行相同的赛普拉斯测试

时间:2019-06-19 09:45:04

标签: cypress

我们管理着一个在多个市场中运营的类似站点的长长列表,其中很多是配置驱动的,有时发行版只能破坏某些域上的情况。

因此,我想构建一个由config驱动的测试列表,以在发布之前检查我们所有的域是否正常。

请参见下面的基本示例,如果将其更改为[beforeEach],则可以正常工作,但是如果使用[before],则在第一组测试之后,cypress会一直重新加载并最终导航至该域。

当我们使用beforeEach时,一切正常,但是显然,当我们进行非交互式检查(如仅检查页面内容)时,这要慢得多。

请建议在多个域上循环执行相同测试的建议方法。

config.sites.forEach((site) => {
        describe('Testing SEO:' + site.url, function() {
            before(function() {
                cy.visit(site.url); 
            });

            it('Check there is only one h1 on the page on', function() {
                cy.get('h1').should('have.length', 1)
            });

            it('Checks the contents of an h1', function() {
                cy.get('h1').should('have.text', site.seo.h1)
            });
        });
});

1 个答案:

答案 0 :(得分:1)

虽然您的确对每个测试来说cy.visit都比较慢,但这实际上是赛普拉斯建议编写测试的方式。

根据"Best Practices" documentation,您不应创建一堆仅测试单个断言的测试。

Cypress会告诉您哪个断言仍然失败,因此将断言拆分为多个it不会给您带来任何好处。

我建议这样做:

config.sites.forEach((site) => {
        describe('Testing SEO:' + site.url, function() {
            beforeEach(function() {
                cy.visit(site.url); 
            });

            it('Check all headers', function() {
                cy.get('h1').should('have.length', 1)
                cy.get('h1').should('have.text', site.seo.h1)
            });
        });
});