سؤال

أنا أكتب خادم عميل Python+يستخدم gevent.socket للاتصال. هل هناك أي طرق جيدة لاختبار التشغيل على مستوى المقبس للرمز (على سبيل المثال ، التحقق من أن اتصالات SSL مع شهادة غير صالحة سيتم رفضها)؟ أم أنه من الأبسط فقط spawn خادم حقيقي؟

تعديل: لا أعتقد أن السخرية "الساذجة" ستكون كافية لاختبار مكونات SSL بسبب التفاعلات المعقدة المعنية. هل أنا مخطئ في ذلك؟ أم أن هناك طريقة أفضل لاختبار أشياء SSL'd؟

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

المحلول

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

علي سبيل المثال:

class SimpleServer(gevent.server.StreamServer):

    def handle(self, socket, address):
        socket.sendall('hello and goodbye!')

class Test(unittest.TestCase):      

    def test(self):
        server = SimpleServer(('127.0.0.1', 0))
        server.start()
        client = gevent.socket.create_connection(('127.0.0.1', server.server_port))
        response = client.makefile().read()
        assert response == 'hello and goodbye!'
        server.stop()

استخدام 0 بالنسبة لقيمة المنفذ يعني أن الخادم سيستخدم أي منفذ متاح. بعد بدء تشغيل الخادم ، القيمة الفعلية التي تم اختيارها بواسطة bind متاح على النحو server_port ينسب.

StreamServer يدعم SSL أيضًا ، تمرير keyfile و certfile الحجج إلى المُنشئ وسوف يلف كل مقبس SSLObject قبل نقله إلى معالجك.

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

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

أعتقد أنه لا توجد حاجة لسخر أي من واجهة برمجة تطبيقات Gevent ، فمن الأسهل بكثير استخدامه كخوادم والعملاء يمكنهم العيش بسعادة في نفس العملية.

نصائح أخرى

هناك طريقة أخرى (IMO أفضل): يجب أن تسخر من المكتبة التي تستخدمها. مثال على السخرية المساعد لبيثون موكس.

لا تحتاج إلى مجموعة من الخوادم ذات شهادة صالحة ، أخرى ذات شهادة غير صالحة ، مع عدم وجود دعم SSL على الإطلاق ، لا تستجيب لأي حزم على الإطلاق ، وما إلى ذلك. يمكنك محاكاة سلوكها مع مقبس عميل "وهمية" . الطريقة التي تعمل بها مع Mox هي أنك "تعليم" أولاً ما يجب أن تتوقعه وكيف يجب أن تتفاعل ثم تنفذ الكود الحقيقي الخاص بك عليه أثناء تبديل gevent.socket الحقيقي للسيارة. يتطلب الأمر بعض الممارسات للحصول على تعليقه ، لكنه يستحق ذلك.

السخرية والعبادة رائعة ، ولكن في بعض الأحيان تحتاج إلى نقلها إلى المستوى التالي من التكامل. نظرًا لأن تفريخ الخادم ، حتى خادم مزيف ، يمكن أن يستغرق بعض الوقت ، فقد يكون التفكير في مجموعة اختبار منفصلة (تسميها اختبارات التكامل).

"اختبره كما لو كنت ستستخدمه" هو المبدأ التوجيهي الخاص بي ، وإذا كنت تسخر وذوي الخطر لدرجة أن الاختبار يصبح تافهاً ، فهذا ليس مفيدًا (على الرغم من أن أي اختبار تقريبًا أفضل من لا شيء). إذا كنت قلقًا بشأن التعامل مع شهادات SSL السيئة ، فبإجراء بعض الأشياء السيئة وتكتب اختبارًا لتجهيزها. إذا كان هذا يعني تفريخ الخادم ، فليكن ذلك. ربما إذا كان هذا يزعجك بما يكفي ، فسيؤدي ذلك إلى إعادة إنشاء من شأنها أن تجعلها قابلة للاختبار بطريقة أخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top