Pytest
پائیٹیسٹ ایک پائیتھن ٹیسٹنگ فریم ورک ہے جو پائی پائی پروجیکٹ سے شروع ہوا ہے۔ اسے مختلف قسم کے سافٹ ویئر ٹیسٹ لکھنے کے لیے استعمال کیا جا سکتا ہے، بشمول یونٹ ٹیسٹ، انٹیگریشن ٹیسٹ، اینڈ ٹو اینڈ ٹیسٹ، اور فنکشنل ٹیسٹ۔ اس کی خصوصیات میں پیرامیٹرائزڈ ٹیسٹنگ، فکسچر، اور دوبارہ لکھنے کا دعوی شامل ہیں۔ پائیٹیسٹ فکسچر ٹیسٹ کے معاملات میں پیرامیٹر کے ناموں میں پاس کرکے ٹیسٹ کے لیے سیاق و سباق فراہم کرتے ہیں۔ اس کا پیرامیٹریزیشن ان پٹ اور آؤٹ پٹ کے متعدد سیٹوں کی جانچ کے لیے ڈپلیکیٹ کوڈ کو ختم کرتا ہے ؛ اور اس کے دوبارہ لکھے گئے دعوی بیانات ناکامی کی وجوہات کے لیے تفصیلی آؤٹ پٹ فراہم کرتے ہیں۔ ہسٹری پائیٹیسٹ کو تھرڈ پارٹی پیکجوں کی جانب سے پائیتھن کے بلٹ ان ماڈیول یونٹ ٹیسٹ کی کوتاہیوں کو دور کرنے کی کوشش کے ایک حصے کے طور پر تیار کیا گیا تھا۔ اس کی ابتدا پائی پائی کے حصے کے طور پر ہوئی، جو معیاری سی پائی تھون کے لیے پائی تھون کا ایک متبادل نفاذ ہے۔ 2003 کے اوائل میں اس کی تخلیق کے بعد سے، پائی پائی نے جانچ پر بہت زیادہ زور دیا ہے۔ پائی پائی کے پاس نئے لکھے ہوئے کوڈ کے لیے یونٹ ٹیسٹ، کیڑوں کے لیے رجعت ٹیسٹ، اور سی پائیتھون کے ٹیسٹ سوٹ کا استعمال کرتے ہوئے انضمام ٹیسٹ تھے۔ 2004 کے وسط میں، یوٹیسٹ نامی ایک ٹیسٹنگ فریم ورک ابھرا اور پائی پائی میں تعاون کرنے والوں نے موجودہ ٹیسٹ کیسوں کو یوٹیسٹ میں تبدیل کرنا شروع کیا۔ دریں اثنا، یورو پائیتھن 2004 میں جانچ کے لیے ایک تکمیلی معیاری لائبریری، جس کا نام ایس ٹی ڈی تھا، ایجاد کی گئی۔ اس پیکیج نے اصولوں کو متعین کیا، جیسے کہ دوبارہ لکھنے کا دعوی، جو بعد میں پائٹسٹ بن جائے گا۔ 2004 کے آخر میں، ایس ٹی ڈی پروجیکٹ کا نام بدل کر پی آئی رکھ دیا گیا، std.utest py.test بن گیا، اور پی آئی لائبریری کو پی پی سے الگ کر دیا گیا۔ نومبر 2010 میں، پائیٹیسٹ 2.0. کو پی سے الگ پیکیج کے طور پر جاری کیا گیا تھا۔ اگست 2016 تک اسے اب بھی py.test کہا جاتا تھا، لیکن پائیٹیسٹ 3.0 کی ریلیز کے بعد تجویز کردہ کمانڈ لائن انٹری پوائنٹ پائیٹیسٹ بن گیا۔ پائیٹیسٹ کو ڈویلپر سیکیورٹی پلیٹ فارم سنائک نے اپنی مقبولیت کی وجہ سے پائیتھن میں کلیدی ماحولیاتی نظام کے منصوبوں میں سے ایک کے طور پر درجہ بندی کیا ہے۔ کچھ معروف پروجیکٹس جنہوں نے یونٹ ٹیسٹ اور ناک (ایک اور ٹیسٹنگ پیکیج) سے پائیٹیسٹ کا رخ کیا ان میں موزیلا اور ڈراپ باکس شامل ہیں۔ خصوصیات پیرامیٹرائزڈ ٹیسٹنگ سافٹ ویئر ٹیسٹنگ میں ٹیسٹ فنکشنز کے ذریعے ویلیوز بھیجنے اور درست آؤٹ پٹ کی جانچ کرنے کا ایک عام نمونہ ہے۔ بہت سے معاملات میں، فعالیت کی اچھی طرح سے جانچ کرنے کے لیے، کسی کو ان پٹ/آؤٹ پٹ کے متعدد سیٹوں کی جانچ کرنے کی ضرورت ہوتی ہے، اور اس طرح کے معاملات کو الگ سے لکھنے سے ڈپلیکیٹ کوڈ کا سبب بنتا ہے کیونکہ زیادہ تر اعمال یکساں رہیں گے، صرف ان پٹ/آؤٹ پٹ اقدار میں فرق ہوگا۔ پائیٹیسٹ کا پیرامیٹرائزڈ ٹیسٹنگ فیچر مختلف تکرار کو ایک ٹیسٹ کیس میں جوڑ کر، پھر ان تکرار کو چلا کر اور ہر ٹیسٹ کے نتائج کو الگ سے ظاہر کر کے اس طرح کے ڈپلیکیٹ کوڈ کو ختم کرتا ہے۔ پائیٹیسٹ میں پیرامیٹرائزڈ ٹیسٹ ڈیکوریٹر کے ذریعے نشان زد کیے جاتے ہیں، جہاں پہلا پیرامیٹر، کوما سے الگ کیے گئے ناموں کا ایک سٹرنگ ہوتا ہے، اور اس میں منتقل ہونے والی اقدار کی فہرست ہوتی ہے۔ جب ایک سے زیادہ نام ہوتے ہیں، تو ٹپل کی ایک فہرست ہوگی جہاں ہر ٹپل میں اقدار انڈیکس کے لحاظ سے ناموں سے مطابقت رکھتی ہیں۔ اس کے بعد ان ناموں کو ڈیکوریٹر کے ذریعہ پیرامیٹرز کے طور پر نشان زد ٹیسٹ فنکشن میں منتقل کیا جاتا ہے۔ جب پائٹیسٹ اس طرح کے سجے ہوئے ٹیسٹ چلاتا ہے، تو ہر جوڑا اور اس کی اپنی ٹیسٹ آؤٹ پٹ اور منفرد شناخت کے ساتھ ایک علیحدہ رن تشکیل دیتا ہے۔ شناخت کنندہ کو پھر انفرادی ڈیٹا جوڑوں کو چلانے کے لیے استعمال کیا جا سکتا ہے۔ سافٹ ویئر ٹیسٹ لکھتے وقت، دعوی بیان ٹیسٹ کی ناکامی کو بتانے کا ایک بنیادی ذریعہ ہے، جہاں متوقع اقدار کا موازنہ اصل اقدار سے کیا جاتا ہے۔ اگرچہ پائیتھن کا بلٹ ان ایسٹرس کلیدی لفظ صرف اسٹریشن ایرر کو بڑھاتا ہے جس میں ناکامی کی صورتوں میں کوئی تفصیلات نہیں ہوتی ہیں، پائیٹیسٹ پائیتھن کے ایسٹرس کلیدی لفظ کو دوبارہ لکھتا ہے اور ناکامیوں کی وجوہات کے لیے تفصیلی آؤٹ پٹ فراہم کرتا ہے، جیسے کہ اسٹرس سٹیٹمنٹ میں اظہارات کا اندازہ کیا جاتا ہے۔ یونٹ ٹیسٹ (جانچ کے لیے پائیتھن کا بلٹ ان ماڈیول) کے دعوی بیانات کے ساتھ موازنہ کیا جا سکتا ہے: یہ زیادہ لفظی نحو پر عمل پیرا ہے کیونکہ یہ جاوا پروگرامنگ زبان کے جے یونٹ سے متاثر ہے، جیسا کہ زیادہ تر یونٹ ٹیسٹنگ لائبریریاں ہیں۔ پائیتھن کی بلٹ ان ایسٹرس کالز کو روکتے ہوئے پائیتسٹ اسی کو حاصل کرتا ہے، جس سے نقطہ نظر زیادہ مختصر ہو جاتا ہے۔ پائیٹیسٹ فکسچر پائیٹیسٹ کے ٹیسٹ اس بات کی تصدیق کرتے ہیں کہ کمپیوٹر کوڈ ان ٹیسٹوں کا استعمال کرتے ہوئے توقع کے مطابق کارکردگی کا مظاہرہ کرتا ہے جو اے اے اے کے نام سے جانے والے ترتیب، عمل اور دعوی کے سلسلے میں تشکیل شدہ ہوتے ہیں۔ اس کے فکسچر ٹیسٹ کے لیے سیاق و سباق فراہم کرتے ہیں۔ ان کا استعمال کسی نظام کو معروف حالت میں ڈالنے اور ڈیٹا کو ٹیسٹ افعال میں منتقل کرنے کے لیے کیا جا سکتا ہے۔ فکسچر عملی طور پر ٹیسٹ کی اناٹومی میں ترتیب کے مرحلے کی تشکیل کرتے ہیں (اے اے اے، ترتیب، عمل، دعوی کے لیے مختصر)۔ پائیٹیسٹ فکسچر ٹیسٹ کے معاملات سے پہلے سیٹ اپ کے طور پر یا ٹیسٹ کے معاملات کے بعد صفائی کے لیے چل سکتے ہیں، لیکن یونٹ ٹیسٹ اور ناک (ایک اور تھرڈ پارٹی ازگر ٹیسٹنگ فریم ورک) کے سیٹ اپ اور ٹیر ڈاؤن سے مختلف ہیں۔ پائیٹیسٹ فکسچر کے طور پر اعلان کردہ افعال کو ڈیکوریٹر کے ذریعہ نشان زد کیا جاتا ہے، جن کے نام پھر ٹیسٹ افعال میں پیرامیٹرز کے طور پر منتقل کیے جا سکتے ہیں۔ جب پائیٹیسٹ کو ٹیسٹ فنکشن کے پیرامیٹرز میں فکسچر کے نام ملتے ہیں، تو وہ پہلے اسی ماڈیول میں اس طرح کے فکسچر کی تلاش کرتا ہے، اور اگر نہیں ملتا ہے، تو وہ conftest.py فائل میں اس طرح کے فکسچر کی تلاش کرتا ہے۔ مثال کے طور پر: درآمد پائٹیسٹ @pytest.fixture ڈیف ڈیٹا سیٹ (): "" کچھ ڈیٹا کو ٹیسٹ فنکشنز میں واپس کریں "" واپسی {'ڈیٹا 1': 1، 'ڈیٹا 2': 2} ڈیف ٹیسٹ ڈیٹا سیٹ (ڈیٹا سیٹ): "" فکسچر ویلیو کی جانچ اور تصدیق کریں "" ڈیٹ سیٹ کا دعوی کریں = = {'ڈیٹا 1': 1، 'ڈیٹا 2': 2} مندرجہ بالا مثال میں، پائیٹیسٹ فکسچر ایک لغت واپس کرتا ہے، جسے پھر دعوی کے لیے ٹیسٹ فنکشن میں منتقل کیا جاتا ہے۔ ٹیسٹ کیسوں کے طور پر اسی فائل کے اندر فکسچر کا پتہ لگانے کے علاوہ، پائیٹیسٹ فکسچر کو ٹیسٹ ڈائرکٹری میں conftest.py فائل میں بھی رکھا جا سکتا ہے۔ متعدد conftest.py فائلیں ہو سکتی ہیں، جن میں سے ہر ایک کو ٹیسٹ کی ڈائرکٹری کے اندر رکھا جاتا ہے تاکہ ٹیسٹ کے ہر ذیلی سیٹ کے لیے فکسچر کا پتہ لگایا جا سکے۔ فکسچر اسکوپس پائیٹیسٹ میں، فکسچر اسکوپس صارف کو اس بات کی وضاحت کرنے دیتے ہیں کہ فکسچر کو کب کال کیا جانا چاہیے۔ فکسچر کے چار دائرہ کار ہیں: فنکشن کا دائرہ، کلاس کا دائرہ، ماڈیول کا دائرہ، اور سیشن کا دائرہ۔ فنکشن اسکوپڈ فکسچر تمام پائیٹیسٹ فکسچر کے لیے ڈیفالٹ ہوتے ہیں، جنہیں ہر بار ایک فنکشن کہا جاتا ہے جس میں فکسچر بطور پیرامیٹر چلتا ہے۔ ایک وسیع فکسچر کے دائرہ کار کی وضاحت کرنے کا مقصد بار بار فکسچر کالز کو ختم کرنا ہے، جو ٹیسٹ پر عمل درآمد کو سست کر سکتا ہے۔ کلاس اسکوپڈ فکسچرز کو فی ٹیسٹ کلاس میں ایک بار بلایا جاتا ہے، قطع نظر اس کے کہ انہیں کتنی بار بلایا جاتا ہے، اور یہی منطق دیگر تمام دائرہ کار کے لیے بھی ہے۔ فکسچر کے دائرہ کار کو تبدیل کرتے وقت، کسی کو صرف فکسچر ڈیکوریٹرز میں دائرہ کار کے پیرامیٹر کو شامل کرنے کی ضرورت ہوتی ہے، مثال کے طور پر۔ ٹیسٹ فلٹرنگ پائیٹیسٹ کی ایک اور خصوصیت ٹیسٹ کے ذریعے فلٹر کرنے کی صلاحیت ہے، جہاں صرف مطلوبہ ٹیسٹ چلانے کے لیے منتخب کیے جاتے ہیں، یا ڈویلپر کی خواہش کے مطابق ایک خاص انداز میں برتاؤ کرتے ہیں۔ "کے" آپشن کے ساتھ (مثال کے طور پر۔ )، پائٹیسٹ صرف ایسے ٹیسٹ چلائے گا جن کے نام شامل ہوں۔ اس کے برعکس سچ ہے، جہاں کوئی دوڑ سکتا ہے، اور پائٹیسٹ ان تمام ٹیسٹوں کو چلائے گا جن کے نام شامل نہیں ہیں۔ پائیٹیسٹ کے مارکر، ٹیسٹ کے رویے کو تبدیل کرنے کے علاوہ، ٹیسٹ کو فلٹر بھی کر سکتے ہیں۔ پائیٹیسٹ کے مارکر پائیتھن ڈیکوریٹر ہوتے ہیں جو ٹیسٹ فنکشنز کے اوپر رکھے ہوئے نحو سے شروع ہوتے ہیں۔ مختلف من مانی نام کے مارکر کے ساتھ، کمانڈ لائن پر چلنا صرف ان ٹیسٹوں کو چلائے گا جنہیں اس طرح کے مارکر سے سجایا گیا ہے۔ تمام دستیاب مارکر کو ان کی تفصیل کے ساتھ ساتھ درج کیا جا سکتا ہے۔ کسٹم مارکر کو صارفین کے ذریعہ بھی بیان کیا جا سکتا ہے اور pytest.ini میں رجسٹر کیا جا سکتا ہے، اس صورت میں ان کسٹم مارکر کو بلٹ ان مارکر کے ساتھ بھی درج کیا جائے گا۔ JUnit، جاوا ڈاکٹرسٹ پر مبنی معروف سافٹ ویئر ٹیسٹنگ فریم ورک، ڈوکسٹرنگ کے لیے ازگر میں معروف ٹیسٹنگ فریم ورک، یونٹ ٹیسٹنگ فریم ورک کی فہرست حوالہ جات بیرونی لنکس https://pypi.python.org/pypi/pytest https://docs.pytest.org ازگر (پروگرامنگ زبان) ترقیاتی ٹولز مفت سافٹ ویئر ٹیسٹنگ ٹولز یونٹ ٹیسٹنگ فریم ورک