{ اختبار البرمجيات - Software Testing }

اختبار البريد الإلكتروني أصبح سهلاً بواسطة Python

اختبار البريد الإلكتروني يمكن أن يكون عملية مرهقة مليئة بالأخطاء عند القيام بها يدويًا. ماذا لو تمكنت من أتمتة هذه العملية باستخدام بضعة أسطر من كود Python؟ يتيح لك هذا السكربت تحويل اختبار البريد الإلكتروني من مهمة مملة إلى سير عمل منظم وفعال.


تحدي اختبار البريد الإلكتروني

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

الأتمتة تحل هذه التحديات عن طريق تقديم نهج برمجي لاختبار البريد الإلكتروني. بدلاً من النقر عبر صناديق البريد، يمكن للمطورين كتابة بضعة أسطر من الكود التي:

  • تبحث وتسترجع رسائل بريد إلكتروني محددة فورًا
  • تتحقق تلقائيًا من المرسل والموضوع والمحتوى
  • تندمج بسلاسة في خطوط التكامل المستمر
  • تقلل الأخطاء البشرية ووقت الاختبار بشكل كبير

النتيجة؟ مزيد من الوقت للتطوير الفعلي وثقة أكبر في وظائف البريد الإلكتروني لديك.


بناء أداة اختبار البريد الإلكتروني باستخدام Python

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

  • الاتصال والمصادقة: تقوم فئة EmailTester بإنشاء اتصال آمن مع خادم البريد باستخدام تشفير SSL لتسجيل الدخول والوصول إلى صندوق الوارد.
  • البحث الذكي والتصفية: باستخدام إمكانيات البحث في IMAP، يستطيع السكربت تصفية الرسائل بناءً على المرسل أو الموضوع أو المحتوى.
  • استخراج البريد الإلكتروني القوي: يتعامل السكربت بذكاء مع تنسيقات البريد الإلكتروني المختلفة، مما يتيح استخراج العناوين الإلكترونية وتحليل المحتويات المتعددة الأجزاء، وتقديم تمثيل واضح ومفيد للبريد.


تقنيات التصفية المرنة

الاختبار الفعال للبريد الإلكتروني يتطلب أكثر من مجرد الاسترجاع الأساسي. يقدم السكربت تقنيات تصفية قوية تتعامل مع تعقيد البريد الإلكتروني الواقعي:

  • مطابقة المرسل الذكية: يتعامل السكربت مع الصيغ غير المتسقة للمرسلين، حيث يمكنه استخراج العناوين الإلكترونية حتى من الأسماء المعروضة.
  • تصفية دقيقة للموضوع والمحتوى: يمكن للمطورين تصفية الرسائل بدقة متناهية بناءً على المرسل أو موضوع البريد أو محتواه.
  • معالجة تنسيقات البريد المختلفة: يدير السكربت رسائل البريد المتعددة الأجزاء، مستخرجًا النصوص من كل من التنسيقات العادية وHTML.


التنفيذ العملي

كود الفئة EmailTester

class EmailTester:
    def __init__(self, email_server, username, password):
        self.mail = imaplib.IMAP4_SSL(email_server)
        self.mail.login(username, password)


طريقة استخراج عنوان البريد الإلكتروني

def _extract_email_address(self, sender_string):
    match = re.search(r'<([^>]+)>', sender_string)
    if match:
        return match.group(1)
    if '@' in sender_string:
        return sender_string.strip()
    return ''


التحقق من استقبال البريد الإلكتروني

def check_email_received(self, sender=None, subject=None, contains=None, min_wait=0, max_wait=60):
    if min_wait > 0:
        time.sleep(min_wait)
    start_time = time.time()
    end_time = start_time + max_wait

    self.mail.select('inbox')  # تحديد مجلد الوارد

    if sender and subject:
        status, data = self.mail.search(None, f'(FROM "{sender}" SUBJECT "{subject}")')
    elif sender:
        status, data = self.mail.search(None, f'FROM "{sender}"')
    elif subject:
        status, data = self.mail.search(None, f'SUBJECT "{subject}")')
    else:
        status, data = self.mail.search(None, 'ALL')  # استرجاع جميع الرسائل إذا لم يتم توفير عوامل التصفية

    email_ids = data[0].split()  # قائمة بمعرفات الرسائل المطابقة
    if email_ids:
        latest_email_id = email_ids[-1]
        status, email_data = self.mail.fetch(latest_email_id, '(RFC822)')
        raw_email = email_data[0][1]
        email_message = email.message_from_bytes(raw_email)

        body = self._get_email_body(email_message)
        from_field = email_message['From']
        extracted_sender = self._extract_email_address(from_field)

        sender_match = not sender or sender.lower() == extracted_sender.lower()
        content_match = True if not contains or contains in body else False

        if sender_match and content_match:
            return True, {
                'from': extracted_sender,
                'subject': email_message['Subject'],
                'date': email_message['Date'],
                'body': body
            }

    time.sleep(2)
    return False, None


استخراج النص من البريد

def _get_email_body(self, email_message):
    body = ""
    for part in email_message.walk():
        if part.get_content_type() in ['text/plain', 'text/html']:
            try:
                part_body = part.get_payload(decode=True).decode('utf-8')
                body += part_body
            except:
                pass
    return body


اختبار أداة التحقق

def test_email_verification():
    EMAIL_SERVER = '<email_server>'
    USERNAME = '<your_email_address>'
    PASSWORD = '<your_app_password>'
    email_tester = EmailTester(EMAIL_SERVER, USERNAME, PASSWORD)
    send_test_email()

    email_received, email_details = email_tester.check_email_received(
        sender='<email_sender>',
        subject='<email_subject>',
        contains='<email_content>',
        min_wait=5,
        max_wait=60
    )

    assert email_received, "No email was received"
    assert email_details['from'] == '<email_sender>', "Sender email does not match"


إرسال بريد تجريبي

def send_test_email():
    pass


الخلاصة

أتمتة اختبار البريد الإلكتروني توفر طريقة عملية وفعالة للتحقق من وظائف البريد الإلكتروني، مما يضمن تجربة مستخدم سلسة.
تشمل الفوائد:

  • كفاءة الوقت: التحقق السريع من البريد يقلل الوقت اللازم للاختبارات اليدوية.
  • الاعتمادية: ضمان الاتساق عبر البيئات المختلفة.
  • الشمولية: التحقق من جميع التفاصيل مثل المرسل والمحتوى.

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

المصدر: thegreenreport

مقالات ذات صلة

زر الذهاب إلى الأعلى