5

Làm thế nào để bạn kiểm tra đơn vị python DAL của bạn đang sử dụng postgresql.Thử nghiệm cơ sở dữ liệu trong python, postgresql

Trong sqlite bạn có thể tạo cơ sở dữ liệu trong bộ nhớ cho mọi thử nghiệm nhưng điều này không thể thực hiện được đối với postgresql.

Tôi muốn một thư viện có thể được sử dụng để thiết lập cơ sở dữ liệu và làm sạch nó sau khi thử nghiệm được thực hiện.

Tôi đang sử dụng Sqlalchemy làm ORM của mình.

Trả lời

2

Bạn có thể sử dụng nose để viết bài kiểm tra, sau đó chỉ cần sử dụng SQLAlchemy để tạo và làm sạch cơ sở dữ liệu thử nghiệm trong các phương thức setup/teardown của bạn.

+0

@Luper Rouch: Làm cách nào để tôi dọn dẹp để cơ sở dữ liệu ở trạng thái giống nhau khi thử nghiệm kết thúc. Tôi không nghĩ rằng bắt đầu/rollback một giao dịch là giải pháp. – StackUnderflow

+0

Bạn có thể bắt đầu bằng cách thả toàn bộ cơ sở dữ liệu trong teardown. –

+0

Vì vậy, tôi sẽ phải tạo một trường hợp cơ sở dữ liệu mới cho mọi thử nghiệm .. wont rằng làm cho các bài kiểm tra rất chậm? .. Tôi chỉ muốn làm sạch tất cả các dữ liệu trong cơ sở dữ liệu ... Tôi đoán tôi có thể viết SQL để làm sạch tất cả các dữ liệu bảng trong teardown .. Mặc dù tôi đã tìm kiếm một cái gì đó giống như SQLUnit – StackUnderflow

3

pg_tmp(1) là một tiện ích nhằm làm cho công việc này trở nên dễ dàng. Đây là cách bạn có thể bắt đầu một kết nối mới với SQLAlchemy:

from subprocess import check_output 
from sqlalchemy import create_engine 

url = check_output(['pg_tmp', '-t']) 
engine = create_engine(url) 

Thao tác này sẽ tạo một cơ sở dữ liệu mới sẽ tự động bị hủy trong 60 giây. Nếu kết nối được mở pg_tmp sẽ đợi cho đến khi tất cả các kết nối đang hoạt động được đóng lại.

0

QuickPiggy quá, có khả năng tự dọn dẹp sau chính nó. Từ các tài liệu:

Một ví dụ Postgressql tạm có thể thu được khá dễ dàng:

lợn = quickpiggy.Piggy (dễ bay hơi = True, create_db = 'somedb')

conn = psycopg2.connect (pig.dsnstring())