自動化測試用例失敗重跑有助于提高自動化用例的穩(wěn)定性,那我們來看一下,python和java生態(tài)里都有哪些具體做法? 怎么做 如果是在python生態(tài)里,用pytest做測試驅(qū)動,那么可以通過pytest的插件pytest-rerunfailures來實現(xiàn)失敗用例重跑,具體的使用方式有兩種,一種是通過命令行指定pytest --reruns 2 --reruns-delay 1,reruns表示重復(fù)運行次數(shù),reruns-delay 表示重復(fù)運行是的延遲時間。另一種方式是通過@pytest.mark.flaky(reruns=2, reruns_delay=1),這種方式一般運用,不想全局所有的測試用例都重跑,只是特定的測試用例需要跑,那就在特定的測試方法上使用這個標(biāo)記。
4.png (26.39 KB, 下載次數(shù): 347)
下載附件
2020-3-25 16:09 上傳
3.png (115.57 KB, 下載次數(shù): 370)
下載附件
2020-3-25 16:09 上傳
如果是在java生態(tài)里,用junit做測試驅(qū)動,junit5提供了注解@RepeatTest(2),可以試下測試類或者測試方法的重復(fù)運行,也可以自定義,通過實現(xiàn)個TestRule接口,來控制測試用例的運行。
5.png (22.6 KB, 下載次數(shù): 326)
下載附件
2020-3-25 16:16 上傳
6.png (14.81 KB, 下載次數(shù): 312)
下載附件
2020-3-25 16:16 上傳
@Override public Statement apply(Statement statement, Description description) { Statement result = statement; Repeat repeat = description.getAnnotation(Repeat.class); if (repeat != null) { int times = repeat.value(); result = new RepeatStatement(statement, times); } return result; } } 還有就是如果使用到了maven可以添加一個rerunFailingTestsCount參數(shù),不過這個是控制所有的用例了。 為什么要讓失敗用例重跑呢 因為自動化一般都會在測試環(huán)境或者其他非線上的環(huán)境,由于環(huán)境的不穩(wěn)定可能會導(dǎo)致測試用例莫名其妙的失敗,是用例的穩(wěn)定性大打折扣。這個時候加入失敗重跑機制,能夠在一定范圍內(nèi)提高測試用例的穩(wěn)定性,做出更多的產(chǎn)出。 什么樣的自動化用例要進行失敗重跑 接口自動化測試用以建議可以加入這種失敗重跑,而對于UI接口接口自動化,失敗重跑的話,覺得意義不大,因為往往當(dāng)用例的失敗的時候,要么是由于界面元素沒加載出來,要么是用例的邏輯有問題,要么是意外的彈窗影響,這個時候應(yīng)該讓錯誤盡早的拋出來,好盡快的修復(fù),而不是在哪兒一個勁的重試,沒啥用。UI自動化應(yīng)該做好顯式和隱式等待。 什么樣的失敗用例應(yīng)該重跑 在測試框架中,最好能區(qū)分出什么樣的異常時服務(wù)異常,什么是測試框架本身的異常,對于服務(wù)異常可以適當(dāng)重試,對于框架異常不進行重跑,直接拋出。斷言失敗當(dāng)然更不需要重跑。所以在控制測試用例執(zhí)行的時候,不要一股腦兒的全都重跑,有選擇性的,既要保證穩(wěn)定性,還要保證效率,讓自動化發(fā)揮價值。
|