如何将测试用例组织到大型应用程序的测试套件中

时间:2018-07-12 11:34:47

标签: javascript chai cypress

我已经开始为现有的购物车应用程序编写一些测试用例。没有赛普拉斯或任何其他js测试框架的经验。

我编写的一些初始测试用例如下:

cart_onload_spec.js:

describe('Cart load spec', () => {

    it('Has correct page title', () => {})

    context('When cart is empty', () => {

        it('Empty cart message appears', () => {})
        it('Has correct grand total', () => {})
        it('Has correct remaining customer points', () => {})
    })

    context('When cart is not empty', () => {

        context('Line items listing', () => {
            it('Has correct column info per row', () => {})
            it('Each row shows correct row total', () => {})
        })

        it('Has correct grand total', () => {})
        it('Has correct remaining customer points', () => {})
    })       
})

cart_delete_spec.js:

describe('Cart delete spec', () => {

    before(() => {
        //empty cart
        //add 1 item
    })

    it('Can delete item', () => {
        //cy.request('/api/deleteLine')
        //assert refkey is the same as row deleted
    })

    //now cart is empty so run "When cart is empty" test-cases from "Cart load spec" again.
    it('Empty cart message appears', () => {})
    it('Has correct grand total', () => {})
    it('Has correct remaining customer points', () => {})

})

cart_update_quantity_spec.js

describe('Cart quantity updated spec', () => {

    before(() => {
        //empty cart
        //add 1 item
    })

    it('Can update quantity', () => {
        //cy.request('/api/updateLineQty')
        //assert refkey is the same as row updated
        //assert input has updated qty
    })

    it('Has correct row total per row', () => {})
    it('Has correct grand total', () => {})
    it('Has correct remaining customer points', () => {})

})

现在,我可以看到很少有it块可以重新用于创建不同的方案或测试套件。就像上面的示例一样,重复的it个块是

it('Has correct row total per row', () => {})
it('Has correct grand total', () => {})
it('Has correct remaining customer points', () => {})

现在,赛普拉斯允许您使用ES6导入。但是我不能做类似的事情:

it('Has correct row total per row', hasCorrectRowTotal())

并在某些外部文件中定义hasCorrectRowTotal(),因为每个cypress文档中cypress命令必须位于it块内。

那么,管理和组织大量测试用例的最佳方法是什么,通过混合和匹配在一个地方定义的各种较小的重复测试用例(不复制到每个需要的spec.js文件),可以进行各种场景的测试。它吗?

1 个答案:

答案 0 :(得分:0)

这是一个相当广泛的话题,但是我认为有些事情对您会有所帮助。如果您希望我澄清或添加一些内容,请对此答案发表评论。

识别重复单词并合并
一个例子就是“购物车”。如果在每个测试规范的开头都重复了这个词,请创建一个名为cart的目录,并将所有cart测试规范放在其中。以这种方式嵌套各种事物可能会有所帮助。如果文件位于名为“ cart”的目录中,则可以将其从名称中删除。

请勿在嵌套上方/下方
尝试过度组织会使您更加困惑。这些Matryoshka_dolls浮现在脑海(https://en.wikipedia.org/wiki/Matryoshka_doll)。根据需要嵌套事物。将事物抽象到页面对象中也是如此。过分抽象或不抽象可能会使事情更加混乱。

避免级联失败
注意不要以一种无法通过测试的方式编写测试,以免随后的测试会失败。如果您不考虑潜在的级联故障,您也将无法获得适当的退休。这也是一把双刃剑。如果每个规格只有一个,则测试执行时间将增加。如果您在如何拆分测试规范方面做出了明智的决定,但仍然需要缩短执行时间,请研究并行化:https://docs.cypress.io/guides/guides/parallelization.html#Splitting-up-your-test-suite

共享/通用方法
您可以使用Page Object Modeling(可以使用,但有时也称为不必要的抽象/反模式)来使代码可重用。基本上,您要引入外部文件(作为允许并行化的实例),并在测试规范中引用这些方法,以便测试可以保持DRY(请勿重复自己)。您的其他开发人员将尊重您遵循面向对象编程原则的努力。干是其中之一。

黄瓜,易于重用和可读性
如果您有大量重复的具有不同排列的测试逻辑,请考虑使用Cucumber语法/ testrunner。每个“步骤”或给定/何时/然后都有代码支持。您可以使用正则表达式进行参数化。

希望这会有所帮助!组织是您将不断修改和重构代码的东西。每个团队都有不同的需求。所有合作方都应以非常合作的方式处理此问题,并提供反馈。上帝啊!