Flask и Pytest - PermissionError: [WinError 32] Процесс не может получить доступ к файлу, поскольку он используется другим процессом - PullRequest
0 голосов
/ 17 февраля 2020

Следуя документации здесь , я пытаюсь добавить тесты в мой flask проект с pytest.

Это мой код:

import os
import tempfile
import pytest
import myapp
from flask import Flask, render_template, redirect, request, flash, g, url_for, session, abort


@pytest.fixture
def client():
    db_fd, myapp.app.config['DATABASE'] = tempfile.mkstemp()
    myapp.app.config['TESTING'] = True

    with myapp.app.test_client() as client:
        with myapp.app.app_context():
            myapp.init_db()
        yield client

    os.close(db_fd)
    os.unlink(myapp.app.config['DATABASE'])

def login(client, username, password, redirect_to):
    return client.post('/login', data={
        'username': username,
        'password': password,
        'redirect-to': redirect_to}, 
        follow_redirects=True)

def logout(client):
    return client.get('/logout', follow_redirects=True)

def test_empty_db(client):

    rv = client.get('/')
    assert b'MyApp Name' in rv.data

def test_dashboard_logged_out(client):

    rv = client.get('/dashboard')
    assert b'Login to continue' in rv.data

def test_login_logout(client):

    rv = login(client, 
        myapp.app.config['USERNAME'], 
        myapp.app.config['PASSWORD'],
        '/dashboard')
    assert rv.status_code == 200

    rv = logout(client)
    assert b'logged out' in rv.data

Проблема: (ОШИБКА при разрыве test_login_logout)

Хотя все тесты выполнены успешно, я вижу ошибку - PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\Claudia\\AppData\\Local\\Temp\\tmpxftp9tno' при выполнении строки os.unlink(myapp.app.config['DATABASE']).

У меня нет другого процесса, использующего базу данных. Я проверил все, и единственный процесс python, который запускается во время теста, - это командная строка (с повышением прав администратора), выполняющая pytest.

...