ガイド

pytestでエラーが出たときの確認手順 一時フォルダの権限が原因かを切り分ける方法

2026-10-22

この記事で切り分けられること

pytest を実行して複数件のエラーが出たとき、それがテストコードの不具合なのか、環境側(一時フォルダの権限など)の問題なのかを切り分ける手順をまとめます。「エラー件数を見て何かを壊したと早合点しない」ための確認方法です。

症状

Windows 環境で次のコマンドを実行したところ、一部のテストがエラーで落ちました。

py -3 -m pytest tests/ -q

結果は次の通りでした。

130 passed, 4 skipped, 6 errors

エラーになったのは tmp_path フィクスチャを使っているテスト(test_inquiry_alert 系2件、test_public_release_checks 系4件)で、いずれも同じ例外が出ていました。

PermissionError: [WinError 5] アクセスが拒否されました。: 'C:\Users\<あなたのユーザー名>\AppData\Local\Temp\pytest-of-<あなたのユーザー名>'

原因

pytest は既定で OS の一時フォルダ配下に pytest-of-<ユーザー名> というディレクトリを作り、そこに tmp_path 用のサブフォルダを作成します。このフォルダ自体が読めない(アクセス拒否になる)状態になっていたことが原因でした。

テストのロジック自体には問題がなく、書き込み可能な別の場所を一時フォルダとして渡すとすべて通ることを確認しています。つまりコードを疑う前に、まず環境側の問題かどうかを確認する必要がありました。

直し方

pytest には一時フォルダの場所を指定するオプション --basetemp があります。これを書き込み可能な別の場所に向けて実行します。

py -3 -m pytest tests/ -q --basetemp="C:/Users/<あなたのユーザー名>/AppData/Local/Temp/<あなたの作業用フォルダ>/pytmp"

この指定でエラーが出ていた箇所を含めてすべて通りました。

8 passed

テスト全体を流した場合も、エラーだった6件を含めてすべて通過することを確認しています(実質 139 passed / 4 skipped)。

確認の手順(切り分け方)

エラーが出たときにコードを直す前に、次の順で確認します。

  1. エラーメッセージに PermissionError や アクセスが拒否されました が含まれるか確認する
  2. エラーになっているテストが tmp_path フィクスチャを使っているか確認する
  3. --basetemp に書き込み可能な別フォルダを指定して、同じテストを単独で実行する
  4. そこで通れば、テストコードではなく一時フォルダの権限が原因と判断する

落ちたファイルだけを単独で実行すると、原因の切り分けがしやすくなります。

py -3 -m pytest tests/test_inquiry_alert.py -q --basetemp="C:/Users/<あなたのユーザー名>/AppData/Local/Temp/<あなたの作業用フォルダ>/pytmp"

再発防止のための考え方

それでも駄目なときに次に見る場所

--basetemp を指定しても同じ PermissionError が出る場合は、指定した先のフォルダ自体に書き込み権限があるかを確認します。

echo test > "C:/Users/<あなたのユーザー名>/AppData/Local/Temp/<あなたの作業用フォルダ>/pytmp/check.txt"

このコマンド自体が失敗する場合は、指定先のフォルダを別の場所に変えて再度試します。

tmp_path を使っていないテストでも同じエラーが出る場合は、一時フォルダ以外の原因(別のファイル書き込み処理など)が絡んでいる可能性があるため、エラーメッセージに出てくるパスがどのフィクスチャ・処理由来かを一つずつ確認します。

同じような作業を自動にできるかどうか、無料でお返しします。いまのファイルと手順を見せてください。

お問い合わせ →