Tôi đang chạy các pytests bằng cách sử dụng cơ sở dữ liệu thử nghiệm với các cài đặt DB sau.Django: sử dụng cùng một cơ sở dữ liệu thử nghiệm trong một chủ đề riêng biệt
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'something',
'PASSWORD': 'password',
},
}
Sử dụng @ pytest.mark.django_db, hàm thử nghiệm của tôi truy cập cơ sở dữ liệu được gọi là 'test_postgres' được tạo cho thử nghiệm.
@pytest.mark.django_db
def test_example():
from django.db import connection
cur_ = connection.cursor()
print cur_.db.settings_dict
kết quả đầu ra:
{'ENGINE': 'django.db.backends.postgresql_psycopg2', 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'NAME': 'test_postgres', 'TEST_MIRROR': None,...
nhưng nếu tôi chạy một sợi bên test_example:
Tôi có thể thấy rằng trong chủ đề mà con trỏ đang sử dụng cơ sở dữ liệu có tên là 'postgres' là cơ sở dữ liệu không kiểm tra. Output:
{'ENGINE': 'django.db.backends.postgresql_psycopg2', 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'NAME': 'postgres', 'TEST_MIRROR': None,...
Có cách nào để vượt qua một cuộc tranh luận kết nối cơ sở dữ liệu quan đến chủ đề của tôi từ chức năng kiểm tra ban đầu và nói với thói quen chủ đề của tôi sử dụng tên cơ sở dữ liệu tương tự ('test_postgres') như chức năng thử nghiệm của tôi?
cảm ơn vì đề xuất của bạn, ở trên cung cấp 'PicklingError: Can't pickle: nó không được tìm thấy là ...'. Ngoài ra, tôi muốn chia sẻ chức năng thread trong nhiều bài kiểm tra. Tôi đã cố gắng trang trí các chức năng thread với pytest.mark.db, tuy nhiên nó sẽ không làm bất cứ điều gì kể từ khi nó được chạy qua mô-đun đa xử lý và không phải là Á hậu thử nghiệm. –
mpaf
cập nhật câu trả lời của tôi – ptr
Tôi đã thử làm cho nó một phương pháp lớp, nhưng vẫn là cơ sở dữ liệu được sử dụng là một mặc định, không phải là cơ sở dữ liệu thử nghiệm. Tôi nghĩ rằng vấn đề là chúng tôi không chạy quá trình con thông qua bất kỳ người chạy thử nghiệm django - mà tôi không muốn vì nó không phải là một thử nghiệm (không có PASS/FAIL). Tôi muốn có thể kiểm soát các thiết lập django của quá trình con đó, nhưng tôi đã không thể. – mpaf