van.pg ইউনিট পরীক্ষার জন্য PostgreSQL ডাটাবেসের (এবং ক্লাস্টার) সহজ সৃষ্টি উপলব্ধ করা হয় যে একটি পাইথন মডিউল.
মলিন ডেটাবেস
টেস্ট ডাটাবেস তৈরি করতে দীর্ঘ সময় লাগবে. আপনি / মুছে দিন একটি পরীক্ষা ডাটাবেস ক্রীড়ানুষ্ঠানের পুনঃ সিদ্ধান্ত যখন সাধারণভাবে আপনি একটু সতর্কতা অবলম্বন করা প্রয়োজন.
এছাড়াও, একটি ডাটাবেস প্রতিশ্রুতিবদ্ধ বা না হলে figuring আউট PostgreSQL কোন জোরালো উপায় আছে বলে মনে হয়.
তাই van.pg একটি ডাটাবেস মলিন যখন এটি অবহিত আপনার উপর দায়িত্ব স্থাপন করতে কিন্তু কোন উপায় আছে. এই সঠিকভাবে সম্পন্ন না করা হয়, তাহলে পরীক্ষা বিচ্ছিন্নতা আপোস করা হবে. এটা আমরা কি করতে পারেন ভাল আদর্শ না, কিন্তু.
আপনি ধারাবাহিকভাবে ডাটাবেস করে পরিচালনা করতে লেনদেন প্যাকেজ (http://pypi.python.org/pypi/transaction) ব্যবহার করা হলে একটি ব্যতিক্রম. এই ক্ষেত্রে আপনি একটি লেনদেনের প্রতিশ্রুতিবদ্ধ যখনই dirtied করা সম্পদ জন্য জিজ্ঞাসা করতে পারেন.
testresources সাথে ইন্টিগ্রেশন
এই রাজধানী ব্যবহার করার জন্য আদর্শ উপায় (http://pypi.python.org/pypi/testresources/) testresources মাধ্যমে হয়:
& Nbsp; >>> testresources ResourcedTestCase আমদানি থেকে
& Nbsp; >>> van.pg আমদানি DatabaseManager থেকে
& Nbsp; >>> আমদানি psycopg2
& Nbsp; >>> Def (ডিবি) init_db:
& Nbsp; ... Conn = psycopg2.connect (হোস্ট = db.host, ডাটাবেস = db.database)
& Nbsp; ... নেড়িকুত্তা = conn.cursor ()
& Nbsp; ... cur.execute ("টেবিল foo বিন্যাস (বার পূর্ণসংখ্যা) তৈরি;")
& Nbsp; ... conn.commit ()
& Nbsp; ... conn.close ()
& Nbsp; >>> বর্গ MyTest (ResourcedTestCase):
& Nbsp; ...
& Nbsp; ... সম্পদ = [('ডিবি', DatabaseManager (initialize_sql = init_db))]
& Nbsp; ...
& Nbsp; ... Def runTest (স্ব):
& Nbsp; ... Conn = psycopg2.connect (হোস্ট = self.db.host, ডাটাবেস = self.db.database)
& Nbsp; ... নেড়িকুত্তা = conn.cursor ()
& Nbsp; ... cur.execute ("(1) foo বিন্যাস মান মধ্যে প্রবেশ করান;")
& Nbsp; ... conn.commit ()
& Nbsp; ... নেড়িকুত্তা = conn.cursor ()
& Nbsp; ... cur.execute ("* foo বিন্যাস থেকে নির্বাচন করুন")
& Nbsp; ... self.assertEquals (cur.fetchall (), [(1)])
& Nbsp; ... # উল্লেখ্য: সংযোগ বন্ধ বা উপাত্ত ড্রপ ব্যর্থ হবে
& Nbsp; ... conn.close ()
& Nbsp; ... self.db.dirtied () # আমরা ডিবি পরিবর্তন, তাই এটি পুনরায় লোড প্রয়োজন
আসলে পরীক্ষা করুন:
& Nbsp; >>> unittest আমদানি TextTestRunner থেকে
& Nbsp; >>> আমদানি sys
& Nbsp; >>> রানার = TextTestRunner (প্রবাহ = sys.stdout)
& Nbsp; >>> runner.run (MyTest ()) # doctest: + + উপবৃত্ত
& Nbsp ;.
& Nbsp; ...
ঠিক আছে; & nbsp
& Nbsp; ...
ব্যবহার করে টেমপ্লেট উপাত্ত
আপনি একই ডাটাবেস অনেক বার পুনঃ প্রয়োজন, এটা PostgreSQL একটি টেমপ্লেট ডাটাবেস থেকে ডাটাবেস কপি দ্রুত হতে পারে. আপনি এক DatabaseManager অন্য জন্য টেমপ্লেট হিসেবে পরিবেশন করা হচ্ছে দ্বারা এই কাজ করতে পারেন:
& Nbsp; >>> template_db = DatabaseManager (initialize_sql = init_db)
& Nbsp; >>> বর্গ MyTest2 (MyTest):
& Nbsp; ... সম্পদ = [('ডিবি', DatabaseManager (টেমপ্লেট = template_db))]
& Nbsp; >>> runner.run (MyTest2 ()) # doctest: + + উপবৃত্ত
& Nbsp ;.
& Nbsp; ...
ঠিক আছে; & nbsp
& Nbsp; ...
লেনদেন ইন্টিগ্রেশন
Dirty_on_commit argumen শব্দ যদি সত্য হয়, একটি DatabaseManager প্রতি লেনদেনে মডিউল মাধ্যমে কমিট successfull পর dirtied হিসাবে ডাটাবেস চিহ্নিত করতে হবে. এই নিজে অবহিত করতে হবে না ডাটাবেস dirties, যা প্রতিটি পরীক্ষা মানে.
& Nbsp; >>> মানুষ = DatabaseManager (dirty_on_commit = সত্য)
যদি আপনি এই বৈশিষ্ট্যটি ব্যবহার করতে, আপনাকে লেনদেন (http://pypi.python.org/pypi/transaction) নিজেকে প্যাকেজ ওপর নির্ভর করতে হবে.
একটি বিদ্যমান ডাটাবেস ব্যবহার করে
ডিফল্টরূপে, van.pg একটি অস্থায়ী ডিরেক্টরির মধ্যে একটি নতুন PostgreSQL ক্লাস্টার তৈরি করে এবং একটি PostgreSQL ডেমন আরম্ভ করা হয়. এই অধিকাংশ সময় কাজ করে, কিন্তু খুব দ্রুত হয় না.
আপনি ইতিমধ্যে একটি চলমান PostgreSQL ক্লাস্টার আছে, আপনি এনভায়রনমেন্ট ভেরিয়েবল VAN_PG_HOST সেটিং দ্বারা এটি ব্যবহার করার জন্য van.pg বলতে পারেন. এটি / tmp / 'pgcluster সকেট সঙ্গে উদাহরণস্বরূপ, একটি স্থানীয় PostgreSQL সার্ভার বিরুদ্ধে van.pg এর পরীক্ষা চালানো:
VAN_PG_HOST = / tmp / 'pgcluster পাইথন setup.py পরীক্ষা
সতর্কবার্তা: কোন উপাত্ত লক্ষ্য ডাটাবেসের মধ্যে test_db দিয়ে শুরু বাদ হতে পারে.
সমাপ্তি সংযোগ
আপনার পরীক্ষা এটি সঙ্গে সম্পন্ন করা হয় একবার সঠিকভাবে ডাটাবেস সমস্ত সংযোগের বন্ধ করতে সতর্কতা অবলম্বন করা আবশ্যক. খোলা সংযোগ আছে, যখন PostgreSQL ডাটাবেসের ড্রপ অনুমতি দেয় না. এই পরীক্ষা ডাটাবেস ড্রপ করার চেষ্টা করার সময় ত্রুটি van.pg হতে হবে.
Programatically তৈরি একটি ক্লাস্টার
একটি নিম্ন স্তরের সময়ে, আপনি programmatically আপনার নিজের PostgreSQL ক্লাস্টার নিপূণভাবে পারেন.
ক্লাস্টার আরম্ভ:
& Nbsp; >>> van.pg আমদানি ক্লাস্টার থেকে
& Nbsp; >>> ক্লাস্টার = ক্লাস্টার ()
& Nbsp; >>> cluster.initdb ()
যা একটি অস্থায়ী ডিরেক্টরির মধ্যে একটি ডাটাবেস তৈরি করে:
& Nbsp; >>> আমদানি অপারেটিং সিস্টেম
& Nbsp; >>> dbdir = cluster.dbdir
& Nbsp; os.listdir মধ্যে >>> 'PG_VERSION' (dbdir)
& Nbsp; সত্য
এটা শুরু:
& Nbsp; >>> cluster.start ()
একটি ডাটাবেস পরীক্ষা / তৈরি করুন:
& Nbsp; >>> dbname = cluster.createdb ()
আমরা ডাটাবেসের সাথে সংযোগ করতে পারেন:
& Nbsp; >>> আমদানি psycopg2
& Nbsp; >>> Conn = psycopg2.connect (ডাটাবেস = dbname, হোস্ট = cluster.dbdir)
& Nbsp; >>> নেড়িকুত্তা = conn.cursor ()
আমরা বুনিয়াদি করতে পারেন তা নিশ্চিত করার জন্য ডাটাবেস Twiddle:
& Nbsp; >>> cur.execute (") টেবিল এক্স (Y int-তৈরি")
& Nbsp; >>> cur.execute ("(X মান মধ্যে 1 সন্নিবেশ)")
& Nbsp; >>> conn.commit ()
& Nbsp; >>> cur.execute ("* এক্স থেকে নির্বাচন করুন")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
ক্লাস্টার ডেমন বন্ধ করুন:
& Nbsp; >>> conn.close ()
& Nbsp; >>> cluster.stop ()
এটা আবার শুরু:
& Nbsp; >>> cluster.start ()
& Nbsp; >>> Conn = psycopg2.connect (ডাটাবেস = dbname, হোস্ট = cluster.dbdir)
& Nbsp; >>> নেড়িকুত্তা = conn.cursor ()
& Nbsp; >>> cur.execute ("* এক্স থেকে নির্বাচন করুন")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
এবং পরিষ্করণ:
& Nbsp; >>> conn.close ()
& Nbsp; >>> cluster.cleanup ()
& Nbsp; >>> cluster.dbdir কেউ নেই
& Nbsp; সত্য
& Nbsp; >>> os.path.exists (dbdir)
& Nbsp; মিথ্যা
উন্নয়ন
উন্নয়ন GitHub উপর সঞ্চালিত হয়:
& Nbsp; http: //github.com/jinty/van.pg
এই রিলিজে নতুন কি:
- সমর্থন পাইথন 3.2.
- ড্রপ পাইথন 2.5 সমর্থন.
- একাধিক পাইথন সংস্করণ বিরুদ্ধে পরীক্ষার জন্য tox.ini যোগ করুন.
- চালান PostgreSQL একটি subprocess বরং (pg_ctl মাধ্যমে) একটি ডেমন.
- পুনরায় সংগঠিত পুনরায় ব্যবহার এবং পরীক্ষা কভারেজ উন্নতি কোড.
আবশ্যক
- পাইথন
পাওয়া মন্তব্যসমূহ না