ولّد ملفات اختبار حقيقية بحجم دقيق
PDF وPNG وDOCX وZIP، 26 صيغة في المجمل، وكلٌّ منها ملف حقيقي يُفتح في البرنامج الذي يملكه، وبـالحجم الذي طلبته تمامًا. كما يدوّن كل تشغيل ما يجب أن يفعله تطبيقك بكل ملف. سطر أوامر ونافذة سطح مكتب، مجاني ومفتوح المصدر، ويعمل بالكامل على جهازك.
مجاني ومفتوح المصدر، GPL-3.0. لا حاجة إلى التسجيل. تنزيلات ويندوز وماك موقّعة وتعمل دون تحذير.
-
26
صيغة حقيقية، وكلٌّ منها يُفتح في البرنامج الذي يملكه
-
1 بايت
دقة كل حجم تطلبه، دون تقريب صامت أبدًا
-
0
اتصالات إلى أي مكان - لا حساب ولا قياسات عن بُعد ولا فحص للتحديثات
المشكلة
صنع ملف اختبار واحد سهل. صنع الألف الصحيحة هو الجزء المرهق
أنت تختبر برنامجًا يقبل ملفات من الناس. عاجلًا أم آجلًا ستحتاج إلى:
- ملف PDF بحجم 10 MB تمامًا، لتعرف إن كان حد الرفع حقيقيًا
- الملفات الثلاثة على جانبي هذا الحد، لاصطياد أخطاء الفرق بواحد
- 10,000 ملف سجل، لترى ماذا تفعل المهمة الليلية حين يكون المجلد كبيرًا
- ملف ZIP يحتوي فعلًا على 200 مستند، لا قشرة فارغة بالامتداد الصحيح
- ملف بحجم 4 GB دون الاحتفاظ بملف 4 GB في مستودعك
- بيانات الاختبار نفسها على حاسوبك المحمول وعلى خادم البناء، بايتًا ببايت
هذا ما يحل محله هذا المولّد. صُمم لمهندسي ضمان الجودة وأتمتة الاختبار، ولكل من خلف شيفرته نموذج رفع أو روتين استيراد أو محلل أو حصة تخزين.
ما الذي يميّزه
المولّدات الأخرى تتوقف عند البايتات. هذا المولّد يجيب عما يسأله اختبارك فعلًا
مجلد من الملفات يتركك تقرر بنفسك ما يُفترض أن يثبته كل ملف. يكتب كل تشغيل هنا ملف
manifest.json بجانب الملفات، وهو قائمة بسيطة بكل ما أُنتج، ولكل عنصر توقّع
معلن.
لنفترض أن نقطة الرفع عندك تسمح بـ 1 MB. اطلب الملفات الثلاثة الواقعة على هذا الخط:
tfg generate --preset size-boundaries --limit 1mb --spread 1B --format pdf --out ./edges
| الملف | البايتات | ما يجب أن يفعله نظامك | السبب |
|---|---|---|---|
1mb_under_1b.pdf | 1048575 | قبول | داخل الحد |
1mb_at_limit.pdf | 1048576 | قبول | الحد نفسه مسموح |
1mb_over_1b.pdf | 1048577 | رفض | size_limit |
ثلاثة ملفات، وثلاث إجابات مختلفة، بصيغة تقرؤها الآلة. يقرأ اختبارك البيان بدل أن تكتب التأكيدات يدويًا:
import json, os
directory = "edges"
manifest = json.load(open(os.path.join(directory, "manifest.json")))
for entry in manifest["files"]:
response = upload(os.path.join(directory, entry["path"]))
outcome = entry["expected"]["outcome"]
if outcome == "accept":
assert response.ok, entry["path"]
elif outcome == "reject":
assert not response.ok, entry["path"]
حين تعتمد الإجابة على سياستك أنت، يقول البيان ذلك
يسجّل unspecified بدل اختلاق توقّع. المولّد الذي يخمّن يصنع إخفاقات زائفة، ومجموعة
الاختبارات التي تطلق إنذارات كاذبة يُوقف العمل بها.
الإعدادات المسبقة
اختر السؤال، واحصل على المجموعة كاملة
الإعداد المسبق مجموعة ملفات اختبار مصممة حول سؤال اختبار واحد، فلا تحتاج إلى معرفة أي الملفات يثبت ماذا. لكل منها صفحة تذكر ما يكتشفه عادةً، وما في المجموعة، وكل إعداد يقبله.
-
هل يمر ملف صالح بأصغر حجم تسمح به الصيغة؟
empty-and-minimal -
هل سيخزّن نظامي ويعرض ويعيد اسم ملف لم يتوقعه؟
filename-handling -
هل يُطبَّق حد الحجم تمامًا حيث أُعلن عنه؟
size-boundaries -
هل يصمد استيراد الجداول عندي أمام ما تصدّره الأدوات الحقيقية؟
tabular-import -
هل يعرف قارئي ترميز الملف، أم يخمّن؟
text-encoding -
هل يقبل نموذج الرفع عندي ما يجب قبوله ويرفض الباقي؟
upload-validation
بداية سريعة
ثلاثة أوامر لترى الأداة تعمل
-
أنشئ ملفًا
ملف PNG واحد، بحجم ميغابايتين تمامًا:
tfg generate --format png --size 2mb --out ./fixtures -
أنشئ ملفات كثيرة
عشرة آلاف ملف سجل، حجم كل منها بين واحد وثمانية كيلوبايت، تُسحب الأحجام من البذرة ليعطي الغد المجموعة نفسها. امنح كل تشغيل مجلده الخاص، فالبيان هو السجل الوحيد لما كتبه التشغيل، لذا ترفض الأداة كتابة بيان ثانٍ فوقه:
tfg generate --format log --size-range 1kb-8kb --count 10000 --out ./logs -
افحصها، ثم احذفها
يخبرك
verifyبأن شيئًا لم يتحرك. ويحذفcleanupما كُتب بالضبط ولا شيء غيره:tfg verify ./logs/manifest.json tfg cleanup ./logs/manifest.json --yes
تُعدّ الأحجام بالمضاعفات 1024 كما يفعل مدير الملفات لديك، فـ2mb تعني 2097152 بايتًا.
وعدد البايتات المجرد يصلح أيضًا. يغطي التوثيق الوصفات والبيان ورموز
الخروج.
ما تحصل عليه
مبني لمجموعة اختبارات تعمل دون إشراف
-
حجم دقيق، حتى البايت
اطلب 10485761 بايتًا واحصل على هذا العدد بالضبط. الحجم الذي لا تستطيع الصيغة بلوغه خطأ مع سبب، وليس ملفًا بحجم خاطئ أبدًا.
-
26 صيغة حقيقية
ليست أصفارًا حشوية بامتداد. يُفتح ملف PNG المولَّد في عارض الصور، ويُفتح DOCX في Word، ويُفك ضغط ZIP. وتُفحص كل صيغة بقرّاء مستقلين قبل إصدارها.
-
بيان هو مرجع للاختبار
المسار والحجم وSHA-256 والصيغة والبذرة وإصدار الأداة، وما يجب أن يفعله نظامك بالملف.
-
قابل لإعادة الإنتاج
الوصفة نفسها والبذرة نفسها تعطيان البايتات نفسها على أي جهاز. أودع وصفة YAML صغيرة بدل بيانات اختبار ثنائية كبيرة.
-
واجهتان ومحرك واحد
سطر أوامر مبني للتكامل المستمر، ونافذة سطح مكتب للاختبار الاستكشافي. ليست أيٌّ منهما نسخة مبتورة من الأخرى، ويقارنهما اختبار ميزةً ميزة.
-
دون اتصال بالكامل
لا حساب ولا سحابة ولا قياسات عن بُعد ولا فحص للتحديثات. والملف التنفيذي لسطر الأوامر لا تُترجَم فيه حزمة شبكة أصلًا.
التنزيل
اختر الإصدار المناسب لنظامك
فك ضغط الأرشيف وشغّل الملف. tfg هو سطر الأوامر وtfg-gui هو نافذة سطح
المكتب. لا يوجد مثبّت ولا شيء يُضاف إلى جهازك.
| النظام | سطر الأوامر | نافذة سطح المكتب |
|---|---|---|
| Windows | amd64, arm64 |
amd64 |
| Linux | amd64, arm64 |
amd64 |
| macOS | arm64 |
arm64 |
ما الموقَّع وما غير الموقَّع
تنزيلات ويندوز وماك موقّعة، لذا تبدأ دون تحذير من مطوّر غير معروف. أما تنزيلات لينكس فغير موقّعة،
لأن لينكس المكتبي لا يملك ما يوقَّع به. وكل أرشيف مدرج في verify-SHA256SUMS.txt
على صفحة الإصدارات، لتتحقق مما نزّلته.
مجاني ومفتوح المصدر، GPL-3.0. لا حاجة إلى التسجيل. تنزيلات ويندوز وماك موقّعة وتعمل دون تحذير.