顧老師安全測試新課,報名地址:html
http://www.hbz100.com/pc/course/courseInfo.do?courseId=182320200226121405459。疫情期間,您在注意身體安全的同時,關注身體安全了嗎?500元工做幾天的薪酬,讓你薪資翻幾倍。java
顧翔老師的《軟件測試技術實戰設計、工具及管理》網上購買地址:python
https://item.jd.com/34295655089.html安全
《基於Django的電子商務網站》網上購買地址:微信
https://item.jd.com/12082665.htmlapp
店鋪二維碼:框架
來源:51testing
maven
自動化測試用例失敗重跑有助於提升自動化用例的穩定性,那咱們來看一下,python和java生態裏都有哪些具體作法?ide
怎麼作工具
若是是在python生態裏,用pytest作測試驅動,那麼能夠經過pytest的插件pytest-rerunfailures來實現失敗用例重跑,具體的使用方式有兩種,一種是經過命令行指定pytest --reruns 2 --reruns-delay 1,reruns表示重複運行次數,reruns-delay 表示重複運行是的延遲時間。另外一種方式是經過@pytest.mark.flaky(reruns=2, reruns_delay=1),這種方式通常運用,不想全局全部的測試用例都重跑,只是特定的測試用例須要跑,那就在特定的測試方法上使用這個標記。
若是是在java生態裏,用junit作測試驅動,junit5提供了註解@RepeatTest(2),能夠試下測試類或者測試方法的重複運行,也能夠自定義,經過實現個TestRule接口,來控制測試用例的運行。
public class MyTestClass { public RepeatRule repeatRule = new RepeatRule(); 10) ( public void testMyCode() { //your test code goes here } } import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.METHOD; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; ( RetentionPolicy.RUNTIME ) ({ METHOD, ANNOTATION_TYPE }) public Repeat { int value() default 1; } import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; public class RepeatRule implements TestRule { private static class RepeatStatement extends Statement { private final Statement statement; private final int repeat; public RepeatStatement(Statement statement, int repeat) { this.statement = statement; this.repeat = repeat; } public void evaluate() throws Throwable { for (int i = 0; i < repeat; i++) { statement.evaluate(); } } } 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參數,不過這個是控制全部的用例了。
爲何要讓失敗用例重跑呢
由於自動化通常都會在測試環境或者其餘非線上的環境,因爲環境的不穩定可能會致使測試用例莫名其妙的失敗,是用例的穩定性大打折扣。這個時候加入失敗重跑機制,可以在必定範圍內提升測試用例的穩定性,作出更多的產出。
什麼樣的自動化用例要進行失敗重跑
接口自動化測試用以建議能夠加入這種失敗重跑,而對於UI接口接口自動化,失敗重跑的話,以爲意義不大,由於每每當用例的失敗的時候,要麼是因爲界面元素沒加載出來,要麼是用例的邏輯有問題,要麼是意外的彈窗影響,這個時候應該讓錯誤儘早的拋出來,好儘快的修復,而不是在哪兒一個勁的重試,沒啥用。UI自動化應該作好顯式和隱式等待。
什麼樣的失敗用例應該重跑
在測試框架中,最好能區分出什麼樣的異常時服務異常,什麼是測試框架自己的異常,對於服務異常能夠適當重試,對於框架異常不進行重跑,直接拋出。斷言失敗固然更不須要重跑。因此在控制測試用例執行的時候,不要一古腦兒的全都重跑,有選擇性的,既要保證穩定性,還要保證效率,讓自動化發揮價值。
總結
測試要作到有的放矢,在合適的時候作合適的事情,自動化測試的價值就是由於它能快速的檢查系統,若是由於重試致使運行的時間成倍增長,是沒有任何意義的,還不如拋出錯了,儘快去解決。並且自動化測試用例的運行順序也要控制,處於業務前方的接口儘可能先跑,處於業務後方的接口儘可能後跑。好比登錄接口和下單接口,登錄接口屬於業務靠前的,下單是靠後的,通常在測試下單接口的時候都要初始化登錄狀態,這個時候會調用登錄接口,在測試用例批量執行的時候,能夠先讓登錄接口測試用例先跑,若是這個接口有問題,那麼其餘須要登錄接口配合的用例全都會失敗,那這樣後面的用例就不用跑了,這樣會節省不少的時間。
顧翔老師與雲測學院聯合推出:軟件測試分析與設計,請點擊https://v.youku.com/v_show/id_XNDQ3MzkyNjk3Ng==.html?spm=a2hzp.8244740.0.0,收看。有不一樣觀念歡迎與顧翔老師交流!
本文分享自微信公衆號 - 軟件測試培訓(iTestTrain)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。