سؤال

أنا مكلف باختبارات وحدة الكتابة لمجموعة من البرامج الشبكية المكتوبة في بيثون. الوحدات الكتابة لبناة الرسائل والطرق الثابتة الأخرى بسيطة للغاية، لكنني أصابت جدارا عندما يتعلق الأمر بكتابة اختبارات مؤشرات الترابط للشبكة.

على سبيل المثال: يمكن أن يكون الخادم الذي يتصل به في أي منفذ، وأريد أن أكون قادرا على اختبار القدرة على الاتصال بالعديد من المنافذ (بالتسلسل، وليس متوازا) دون الحاجة فعليا إلى تشغيل العديد من الخوادم. ما هي طريقة جيدة للتعامل مع هذا؟ ربما جعل خادم بناء الخادم وتدمير جزء من الاختبار؟ يخبرني شيء أنه يجب أن يكون هناك إجابة أبسط تهربني.

يجب أن أتخيل أن هناك أساليب لاختبار الوحدات المواضيع الشبكية، لكن لا يمكنني العثور على أي.

هل كانت مفيدة؟

المحلول

سأحاول تقديم مصنع في التعليمات البرمجية الموجودة التي تهدف إلى إنشاء كائنات مأخذ. ثم في اختبار اختبار في مصنع وهمية يقوم بإنشاء مآخذ وهمية يتظاهرون فقط بأنهم متصلون بخادم (أو ليس من أجل حالات الخطأ، والتي تريد أيضا اختبارها أو ألا أفعلها؟) وتسجيل حركة مرور الرسائل للإثبات أن رمزك يستخدم المنافذ المناسبة للاتصال بالأنواع المناسبة من الخوادم.

حاول ألا تستخدم الخيوط حتى الآن، لتبسيط الاختبار.

نصائح أخرى

يعتمد ذلك على كيفية طبقة برامج الشبكة الخاصة بك وكيف تريد أن تكون مفصلة لا تتصدر الاختبارات الخاصة بك، ولكن بالتأكيد ممكن في بعض السيناريوهات لإجراء إعداد الخادم والتمزق جزءا من الاختبار. على سبيل المثال، عندما كنت أعمل على حزمة تسجيل بيثون (قبل أن أصبح جزءا من ثعبان)، كان لدي اختبار (لم أستخدمه pyunit/unittest - كان مجرد برنامج نصي مخصص) أطلقت (في اختبار واحد) أربعة خوادم للاستماع إلى منافذ TCP و UDP و HTTP و HTTP / SOAP، ثم أرسلت حركة مرور الشبكة إليهم. إذا كنت مهتما، فإن التوزيع هو هنا وينصي الاختبار ذي الصلة في الأرشيف للنظر في log_test.py. وبعد تتولى حزمة تسجيل الدخول في ثيثون بالطبع بطريقة ما منذ ذلك الحين، ولكن الحزمة القديمة لا تزال موجودة للاستخدام مع إصدارات Python <2.3 و> 1.5.2.

لدي بعض حالات الاختبار التي تعمل على خادم في الإعداد وإغلاقه في الدموع. لا أعرف إذا كانت طريقة أنيقة جدا للقيام بذلك ولكنها تعمل من أجلي.

أنا سعيد أن أحصل عليه ويساعدني كثيرا.

إذا كان الخادم الأول طويلا جدا، فبديلا سيكون أتمتة ذلك مع النمل. سيتم تشغيل النمل / إيقاف الخادم قبل / بعد تنفيذ الاختبارات.

يرى هنا لبرنامج تعليمي مثير للاهتمام للغاية حول النمل والبيثون

ستحتاج إلى إنشاء مآخذ وهمية. الطريقة الدقيقة للقيام بذلك تعتمد على كيفية إنشاء مقابس وإنشاء مولد المقبس سيكون فكرة جيدة. يمكنك أيضا استخدام مكتبة السخرية مثل pymox. لجعل حياتك أسهل. يمكن أيضا القضاء على الحاجة لإنشاء مولد المقبس فقط للغرض الوحيد من الاختبار.

باستخدام Pymox، كنت تفعل شيئا مثل هذا:

def test_connect(self):
    m = mox.Mox()
    m.StubOutWithMock(socket, 'socket')
    socket_mock = m.MockAnything()
    m.socket.socket(socket.AF_INET, socket.SOCK_STREAM).AndReturn(socket_mock)
    socket_mock.connect(('test_server1', 80))
    socket_mock.connect(('test_server2', 81))
    socket_mock.connect(('test_server3', 82))

    m.ReplayAll()
    code_to_be_tested()
    m.VerifyAll()
    m.UnsetStubs()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top