人気記事

pytest Python

pytestでFailした時にテストをpytest-rerunfailuresを使ってやり直す方法

投稿日:

筆者はSeleniumやAppiumを用いたpytestを使い、webアプリやモバイルアプリのUIテストを行なっています。

その際に、SeleniumやAppiumのサーバ側のエラーで通信タイムアウトが発生し、テストがFailしてしまうケースに遭遇しました。

そのため、テストがFailした結果の中に「webアプリやモバイルアプリ起因のFail」と「SeleniumやAppiumといったテスト環境起因のFail」が混ざってしまい、集計に手間がかかっていました。

通信タイムアウト自体はSeleniumやAppiumサーバを再起動することで復旧したため、pytestのセットアップ時に動作チェックする処理は盛り込んでいましたが、テスト途中でサーバ異常となることもあったため、テスト途中でも対策できないものかと悩んでいました。

そんな悩みを解決するための1つとして「pytest-rerunfailures」というパッケージを見つけました。

https://github.com/pytest-dev/pytest-rerunfailures

機能を抜粋すると

・Failが発生した後にpytestをやり直した結果がPassとなれば、最終的なpytest結果もPassとなる

・pytestにオプション設定すればFailしても指定回数だけpytestをやり直してくれる

$ pytest --reruns 5

・指定したエラーの時だけやり直すことができる

$ pytest --reruns 5 --only-rerun AssertionError

・指定したエラーの時だけFailとして終了することができる

$ pytest --reruns 5 --rerun-except AssertionError

となるため、例えば「アプリ内でエラーメッセージが発生した時はAssertionErrorを出すことでpytestをFailで終了させるが、通信エラー時のTimeoutErrorの時にはpytestをやり直す」といったことが実現できます。

-pytest, Python
-,

Copyright© ITエンジニアへの転身 , 2024 All Rights Reserved Powered by STINGER.