簡體   English   中英

如何將測試用例組織成大型應用程序的測試套件

[英]How to organise test-cases into test-suites for large applications

我已經開始為現有的購物車應用程序編寫一些測試用例。 之前沒有使用 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', () => {})
    })       
})

car_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', () => {})

現在,Cypress 允許您使用 ES6 導入。 但我不能做這樣的事情:

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

並定義hasCorrectRowTotal()在一些外部文件,因為扁柏命令需要在里面it每柏樹文檔塊。

那么,管理和組織大量測試用例的最佳方法是什么,它可以通過混合和匹配在一個地方定義的各種較小的重復測試用例來測試各種場景,而不是復制到需要它的每個 spec.js 文件中?

這是一個相當廣泛的話題,但我有一些我認為對你有幫助的東西。 如果您希望我澄清或添加一些內容,請評論此答案。

識別重復詞並鞏固
一個例子是“購物車”。 如果該詞在每個測試規范的開頭重復,則創建一個名為 cart 的目錄並將所有推車測試規范放在那里。 以這種方式嵌套各種東西會很有幫助。 如果文件位於名為“cart”的目錄中,您可以將其從名稱中刪除。

不要在巢上方/下方
試圖過度組織會讓你更加困惑。 那些 Matryoshka_dolls 浮現在腦海中( https://en.wikipedia.org/wiki/Matryoshka_doll )。 根據需要嵌套東西。 將事物抽象為頁面對象也是如此。 抽象過度或不足都會使事情變得更加混亂。

避免級聯故障
注意不要以一種方式編寫測試,如果一個測試失敗,接下來的它就會失敗。 如果你不尊重潛在的級聯失敗,你也不會得到適當的退休。 這也是一把雙刃劍。 如果每個規范只有一個它,測試執行時間將會增加。 如果您對如何分解測試規范做出了正確的決定,但仍需要改進執行時間,請查看並行化: https : //docs.cypress.io/guides/guides/parallelization.html#Splitting-up-your-測試套件

共享/通用方法
您可以使用頁面對象建模(可以使用但有時稱為不必要的抽象/反模式)使您的代碼可重用。 基本上,您有外部文件(作為允許並行化的實例)並在您的測試規范中引用這些方法,以便您的測試可以保持干燥(不要重復自己)。 您的開發人員同事會尊重您遵循面向對象編程原則的努力。 DRY 就是其中之一。

黃瓜易於重用和可讀性
如果您有大量具有不同排列的重復測試邏輯,請考慮使用 Cucumber 語法/測試運行程序。 每個“步驟”或 Given/When/Then 都由代碼支持。 您可以使用正則表達式來進行參數化。

希望這可以幫助! 組織是您將不斷修改和重構代碼的東西。 每個團隊都會有不同的需求。 以非常協作的方式解決這個問題,所有感興趣的各方都提供反饋。 神速!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM