gpt4 book ai didi

javascript - 如何将测试用例组织成大型应用程序的测试套件

转载 作者:行者123 更新时间:2023-12-01 17:27:47 24 4
gpt4 key购买 nike

我已经开始为现有的购物车应用程序编写一些测试用例。之前没有 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 block 可以重复用于创建不同的场景或测试套件。就像上面的例子 it重复的 block 是
it('Has correct row total per row', () => {})
it('Has correct grand total', () => {})
it('Has correct remaining customer points', () => {})

现在, Cypress 允许您使用 ES6 导入。但我不能做这样的事情:
it('Has correct row total per row', hasCorrectRowTotal())

并定义 hasCorrectRowTotal()在一些外部文件中,因为 cypress 命令需要在 it 中每个柏树文档的 block 。

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

最佳答案

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

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

不要在巢上方/下方
试图过度组织会让你更加困惑。想到那些俄罗斯套娃(https://en.wikipedia.org/wiki/Matryoshka_doll)。根据需要嵌套东西。将事物抽象为页面对象也是如此。抽象过度或不足会使事情变得更加困惑。

避免级联故障
小心不要以一种如果一个失败了,后面的它就会失败的方式来编写你的测试。如果您不尊重潜在的级联故障,您也不会获得适当的退休。这也是一把双刃剑。如果每个规范只有一个,测试执行时间将会增加。如果您已经对如何分解测试规范做出了正确的决定,但仍需要改进执行时间,请查看并行化:https://docs.cypress.io/guides/guides/parallelization.html#Splitting-up-your-test-suite

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

Cucumber 易于重用和可读性
如果您有大量具有不同排列的重复测试逻辑,请考虑使用 Cucumber 语法/testrunner。每个“步骤”或 Given/When/Then 都由代码支持。您可以使用正则表达式来允许参数化。

希望这可以帮助!组织是您将不断修改和重构代码的东西。每个团队都会有不同的需求。以非常协作的方式与所有提供反馈的相关方一起处理此问题。神速!

关于javascript - 如何将测试用例组织成大型应用程序的测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51304618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com