Open2

FastAPI + SQLAlchemy でpytestのcoverageが100%いかない件

Ryosuke HosoiRyosuke Hosoi

https://stackoverflow.com/questions/69492265/fastapi-sqlalchemy-pytest-unable-to-get-100-coverage-it-doesnt-properly-co

これと同じ現象なんだけど、asyncioなsqlalchemyを使うと、awaitした後のコードが(間違いなく動いているにも関わらずに)coverageが認識されない件

ざっくりした理由

asyncioするのに
SQLAlchemyはgreenlets
FastAPIはthreads
と、違う方式をつかってるのが原因(というかそれでpytestが両方のイベントループを世話できてないのが原因)

coverageの設定で対応可能

とりあえずいろいろやってみて、ウチの .coveragerc はこんな感じになりました

ryo@rx1:~/work/fastapi$ cat .coveragerc
[run]
concurrency =
    multiprocessing
    greenlet
    thread
omit =
    api/main.py
    api/db.py

その他でつかってるライブラリの状況によっても変わってくるとは思うんで、そこらへんはよろしく!

Ryosuke HosoiRyosuke Hosoi

おまけ

sqlalchemyがjoinするテーブルで同じフィールド名があるといちいち小うるさくSAWarningを出してくるの、完全にスルーしたいので

ryo@rx1:~/work/fastapi$ cat pytest.ini 
[pytest]
filterwarnings=
        ignore::sqlalchemy.exc.SAWarning

ってやってます