فيمَ يستخدمه الناس
خمس مهام تظهر في كل مشروع تقريبًا يقبل ملفات من الناس، والأمر الذي ينفذ كلًّا منها. كل مثال أدناه يعمل كما هو مكتوب.
حدود الرفع
اختبار ما إذا كان حد حجم الملف يُطبَّق حيث يقول إنه يُطبَّق
الحد ثلاث حالات اختبار لا حالة واحدة: أقل منه بقليل، وعنده تمامًا، وأعلى منه بقليل. الحصول عليها يدويًا يعني حساب أعداد البايتات والأمل في ألا تخطئ بواحد. اطلب المجموعة بدلًا من ذلك:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
تحصل على ثلاثة ملفات PDF حقيقية بحجم 1048575 و1048576 و1048577 بايتًا، وبيان يقول إن الأولين يجب
قبولهما والثالث يُرفض بسبب size_limit. يقرأ اختبارك التوقّع بدل أن تكتب ثلاثة
تأكيدات يدويًا، وحين يتغير الحد تغيّر رقمًا واحدًا وتعيد التشغيل.
ويعمل الأمر نفسه دون إعداد مسبق حين تريد مجموعة حدود واحدة داخل الأمر:
tfg generate --format png --boundary 5mb --out ./png-edges
التكامل المستمر
إبقاء بيانات الاختبار خارج المستودع دون فقدانها
بيانات الاختبار الثنائية الكبيرة تُبطئ استنساخ المستودع وتُصعّب مراجعته، ولا أحد يعرف ما الذي تغيّر حين تُستبدل واحدة. الوصفة بضع مئات من أحرف YAML تعيد بناء الملفات المطابقة، بايتًا ببايت وعلى أي جهاز، لأن كل ملف مشتق من بذرة التشغيل.
- name: build the fixtures
run: tfg generate fixtures.yaml --out ./fixtures
- name: run the tests
run: pytest tests/
- name: nothing moved
run: tfg verify ./fixtures/manifest.json
لكل نهاية رمز خروج خاص بها، فيستطيع خط البناء التمييز بين وصفة سيئة وقرص ممتلئ وعدم تطابق في التحقق. والتشغيل الفاشل لا يطبع شيئًا على المخرج القياسي، فلا يقرأ محلل السجلات خطأً على أنه بيانات.
الحجم الكبير
معرفة ما يحدث حين يكون المجلد كبيرًا
تتصرف روتينات الاستيراد والمهام الليلية وقوائم المجلدات بشكل مختلف عند عشرة آلاف ملف عنه عند عشرة. الأحجام المسحوبة من نطاق تجعل المجموعة تبدو كحركة حقيقية لا كعشرة آلاف ملف متطابق، ويأتي السحب من البذرة، فتكون المجموعة نفسها غدًا.
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./fixtures
تحقق من كلفة التشغيل قبل أن يكتب أي شيء، وهذا مهم حين يُقاس المجموع بالغيغابايت:
tfg generate --format log --size-range 1kb-8kb --count 10000 --dry-run
التشغيل الأكبر من المساحة الحرة على القرص يُرفض قبل كتابة أول بايت، بدل أن يملأ القرص ويفشل في منتصف الطريق.
الأرشيفات
اختبار أداة فك الضغط بأرشيف يحتوي ملفات حقيقية فعلًا
أرشيف فارغ بالامتداد الصحيح لا يثبت شيئًا عن شيفرة تفتحه وتجتاز ما بداخله. صرّح بالمحتوى فيحتويه الأرشيف فعلًا:
targets:
- id: bundle
format: zip
contains:
- format: txt
count: 200
size: 4kb
عمق التداخل وعدد العناصر وحجم ما بالداخل كلها أمور لروتين الاستيراد رأي فيها، وهكذا تعرف ما هي تلك الآراء.
المحللات والعارضات
التحقق من أن شيفرتك تقرأ الصيغة كما يفعل البرنامج الحقيقي
كل صيغة هنا تُفحص بقارئ مستقل قبل إصدارها: يُفتح PNG وتُقارَن بكسلاته، ويُقرأ DOCX من جديد بمكتبات منفصلة، ويُفك أرشيف. وهذا يعني أن ملفًا يرفضه محللك هو نتيجة عن محللك، لا عن المولّد.
tfg generate --format docx --size 300kb --set paragraphs=120 --out ./documents
tfg generate --format xlsx --size 2mb --set rows=400 --set columns=6 --out ./sheets
تسرد صفحة الصيغ الإعدادات التي تقبلها كل صيغة وأصغر ملف يمكن أن تكونه.
أدلة
اثنان منها بتفصيل أكبر
- ملفات اختبار تالفة - ملف أُتلف عمدًا بحجم دقيق، وما ينبغي أن يحدث له مكتوب في البيان.
- ملفات الاختبار في CI - سير عمل لـ GitHub Actions ومهمة في GitLab ورموز الخروج التي تُفشل البناء.
لمن هذا
لمهندسي ضمان الجودة وأتمتة الاختبار، ولكل من خلف شيفرته نموذج رفع أو روتين استيراد أو محلل أو حصة تخزين. يعمل على جهاز بلا شبكة إطلاقًا، وهذا مهم في بيئة مؤسسية مغلقة لا يكون فيها المولّد القائم على المتصفح خيارًا.
مجاني ومفتوح المصدر، GPL-3.0. لا حاجة إلى التسجيل. تنزيلات ويندوز وماك موقّعة وتعمل دون تحذير.