<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>

            利用棧的思想設計實(shí)現測試用例的clean up

            發(fā)表于:2018-05-14來(lái)源:IBM作者:李敏敏,朱琳,姜河點(diǎn)擊數: 標簽:
            由于在寫(xiě)自動(dòng)化測試用例時(shí),自動(dòng)化的用例中除了有基本的用例步驟以外,還包括了大量的用例執行所形成的數據,而這些數據有可能會(huì )影響到之后用例的自動(dòng)化執行。所以在我們的自

            背景介紹

            由于在寫(xiě)自動(dòng)化測試用例時(shí),自動(dòng)化用例中除了有基本的用例步驟以外,還包括了大量的用例執行所形成的數據,而這些數據有可能會(huì )影響到之后用例的自動(dòng)化執行。所以在我們的自動(dòng)化用例中就包含了大量的清除這些數據的步驟。為了能夠簡(jiǎn)化我們的自動(dòng)化測試用例,使自動(dòng)化測試步驟執行中形成的數據自動(dòng)被清除,我們想到了棧。由于自動(dòng)化測試用例中清除數據的步驟剛好符合"先進(jìn)后出"的原則,所以我們可以將每一個(gè)自動(dòng)化測試用例的每一個(gè)步驟進(jìn)行壓棧,當這個(gè)自動(dòng)化測試用例執行完之后,所有需要做所有需要做數據清除的步驟都會(huì )依次壓棧,當測試用例執行完之后,壓棧的步驟會(huì )依次出棧,執行這些步驟對應的數據清除的相應地操作。

            棧的原理介紹

            棧又名堆棧,它是一種線(xiàn)性表,這種線(xiàn)性表僅允許在表的一端進(jìn)行插入和刪除的操作。能夠進(jìn)行插入和刪除操作的這一端叫棧頂,那么這個(gè)線(xiàn)性表的另一端就叫做棧尾。向一個(gè)棧插入新的元素叫做進(jìn)棧,入?;蛘邏簵?,入棧是將新的元素放到當前棧頂元素的上面,使新的元素成為入棧之后的新的棧頂元素。從一個(gè)棧刪除元素又叫做出?;蛘咄藯?,出棧是將棧頂元素刪除掉使相鄰的元素成為新的棧頂元素。關(guān)于棧的出棧和入棧請看如下的圖 1 和圖 2.

            圖 1. 入棧圖

            依次入棧 A, B, C, D

            圖 2. 出棧圖

            什么是測試用例的 clean up

            在自動(dòng)化測試用例執行的過(guò)程中,由于一個(gè)測試用例執行完成之后對測試環(huán)境中的數據做了部分的修改,為了不影響其它測試用例執行,我們每一個(gè)自動(dòng)化測試用例最后執行的 clean up 則是清除當前測試用例對測試環(huán)境數據的修改。我們把這一部分清楚修改數據的操作步驟叫做測試用例的 clean up.

            如何用棧實(shí)現測試用例的 clean up

            本文我們以 java 語(yǔ)言為例,在使用棧之前我們首先要定義棧的類(lèi),以及棧中的一些具體操作的實(shí)現,由于需要壓棧的是測試用例中的每一個(gè)具體的方法實(shí)現,再利用 java 的反射機制映射對應的具體方法。我們將這些方法的對象稱(chēng)之為棧中的元素,在本文中我們將棧中的每一個(gè)元素的定義類(lèi)命名為 StackVo, 所以在 StackVo 類(lèi)中主要包含方法的一些基本參數。本文中對棧定義的類(lèi)命名為 CleanUpStack. CleanUpStack 類(lèi)中主要包含了棧的一些基本的操作。簡(jiǎn)單的講,CleanUpStack 就是一個(gè)棧體, 而 StackVo 就是入棧的元素,每一個(gè) StackVo 就是測試用例中需要做 clean up 操作的方法。關(guān)于 StackVo 類(lèi)和 CleanUpStack 類(lèi)的具體定義請看如下圖 3 和圖 4.

            圖 3. StackVo 類(lèi)
            圖 4. CleanUpStack 類(lèi)

            在講解用棧實(shí)現 clean up 之前,為了便于理解整個(gè)流程,我們首先給大家介紹一下 JBehave 自動(dòng)化測試用例的書(shū)寫(xiě),在 JBehave 中一個(gè) scenario 就相當于一個(gè) test case, 一個(gè) story 就相當于一個(gè) suite. 測試用例可以根據功能以及設計的不同書(shū)寫(xiě)在不同的 story 文件里。它們的對應關(guān)系如圖 5.

            圖 5. JBehave 自動(dòng)化測試用例與一般測試用例的比較

            JBehave 自動(dòng)化測試用例中一個(gè) story 文件中可以包含很多個(gè) scenarios,同時(shí) story 文件中也包含很多的關(guān)鍵字,下邊本文會(huì )對這些關(guān)鍵字依次做介紹

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            Feature:對 story 文件中功能或者測試用例的描述。
            Narrative:對功能以及測試用例的描述。
            Background:預先處理的步驟都會(huì )放在 Background 中,Background 的步驟是在 scenario 之前執行。
            Tags: 像圖 6 中的@bct,@a, @bl 就是一個(gè) scenario 的 tags,這個(gè) tags 用于過(guò)濾測試用例,可以自己來(lái)定義。
            Scenario: 一個(gè)測試用例標實(shí),后邊可以寫(xiě)測試用例的名字。
            @Given:一個(gè)事件的先決條件步驟。
            @When: 事件發(fā)生的步驟。
            @Then: 事件結果驗證步驟。
            @BeforeScenario/@AfterScenario: 一個(gè) scenario 之前或者之后需要執行的方法。
            @BeforeStory/@AfterStory: 一個(gè) story 之前或者之后需要執行的方法。
            圖 6. JBehave 自動(dòng)化測試用例

            在 2.1 章節中我們已經(jīng)介紹了 JBehave 測試用例的書(shū)寫(xiě),在這一章節我們介紹一下 JBehave 對一步測試用例的實(shí)現。如下圖 7 所示。

            圖 7. JBehave 測試用例的實(shí)現

            下面本文將以具體的 JBehave 的自動(dòng)化測試用例為例來(lái)說(shuō)明用棧來(lái)實(shí)現 clean up 的整個(gè)流程。首先我們使用一個(gè)圖來(lái)說(shuō)明整個(gè)的流程,并且對該圖依次進(jìn)行闡述以方便大家理解。如圖 5 所示,此圖中以一個(gè)非常簡(jiǎn)單的測試用例來(lái)闡述在測試用例執行的過(guò)程中如何創(chuàng )建棧的對象,什么時(shí)候入棧,什么時(shí)候出棧。

            圖 8. CleanUpStack 類(lèi)工作流程

            圖 8 中標注的數字則為整個(gè)流程中的步驟順序。在 JBehave 自動(dòng)化測試用例中, 本文將按照這個(gè)簡(jiǎn)單的測試用例來(lái)講解棧實(shí)現 clean up 的原理。

            在每一個(gè) scenario 開(kāi)始執行前,最先執行 beforeScenario 方法中的方法體,每一個(gè) scenario 中所有步驟都是在同一個(gè)線(xiàn)程中執行的。CleanUpStack 的對象就是在這一步創(chuàng )建的。

            在第二步中,當前的測試用例要創(chuàng )建一個(gè) BE, 由于 create 的步驟是需要做 clean up 操作的,那么在創(chuàng )建完 BE 之后,我們還會(huì )創(chuàng )建一個(gè)棧的元素 StackVo,并且用 delete 方法參數構建一個(gè)完整的 StackVo 對象,并且將這個(gè)對象壓棧。

            在第三步中同樣也是 create 的步驟,這一步也是需要做 clean up,那么在創(chuàng )建完 Issue 之后我們仍然會(huì )創(chuàng )建一個(gè)元素 StackVo, 并且用 delete 方法參數構建一個(gè)完整的 StackVo 對象,并且將這個(gè)對象壓棧。

            第四部這個(gè)測試用例的所有步驟已經(jīng)執行完成,最后執行 afterScenario 方法中的方法體,在這個(gè)方法體中步驟執行完后我們會(huì )去檢查當前 CleanUpStack 棧對象中是否為空,如果為空則不做任何的處理,如果不為空則將棧中的元素依次出棧,在出棧的時(shí)候利用 java 的反射原理機制一次執行對應的棧元素對應的方法。這樣就完成了自動(dòng)的 clean up.

            結束語(yǔ)

            通過(guò)對本文的閱讀,相信大家對棧以及如何使用棧的思想實(shí)現自動(dòng)化測試用例的 clean up 有了非常清楚的認識。在編寫(xiě)自動(dòng)化測試用例的過(guò)程中對棧的靈活應用使得我們的自動(dòng)化測試用例步驟得到了精簡(jiǎn),為自動(dòng)化測試人員節省了編寫(xiě) clean up 步驟的工作量,大大的提高了自動(dòng)化測試用例的編寫(xiě)。

            原文轉自:https://www.ibm.com/developerworks/cn/java/j-us-sta-th-te-ca-f-cl-up/

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>