"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كتابة اختبارات متوازية باستخدام إطار عمل Carlspring/Idempotence لـ Java

كتابة اختبارات متوازية باستخدام إطار عمل Carlspring/Idempotence لـ Java

تم النشر بتاريخ 2024-11-08
تصفح:556

Writing parallelizable tests with the carlspring/idempotence framework for Java

تنصل

هذه إعادة نشر لمقالتي على Medium.com على أمل الوصول إلى المزيد من مطوري OSS كجزء من #Hacktoberfest.

مقدمة

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

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

ما هو اختبار العزلة؟

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

ما هو اختبار العجز الجنسي؟

عجز الاختبار يعني أن اختباراتك ستعيد دائمًا نفس النتائج. بغض النظر عن عدد المرات التي تم تنفيذها وبغض النظر عن الاختبارات الأخرى التي يتم إجراؤها بالتوازي.

ما هو إطار كارلسبرينج/إديمبوتينس لجافا

هذا إطار عمل خفيف الوزن يساعد في تحديد ونسخ ملفات موارد الاختبار بطريقة معزولة لاختبارات JUnit5 الخاصة بك. يتم تعريف موارد الاختبار باستخدام التعليقات التوضيحية ويتم نسخها في الدلائل الخاصة بها للمساعدة في تنفيذ فصل وعزل موارد الاختبار.

كيف يعمل إطار عمل Java Carlspring/Idempotence

يتم تخزين جميع موارد الاختبار الشائعة ضمن دليل src/test/resources كالمعتاد. تحدد كل طريقة اختبار بعد ذلك الموارد التي تحتاجها باستخدام التعليق التوضيحي @TestResources. يقوم إطار العمل بنسخ هذه الموارد إلى دليل معزول لكل طريقة اختبار. وهذا يضمن أن لديه حق الوصول الحصري إلى الموارد التي يحتاجها، مما يمنع التداخل من الاختبارات الأخرى التي تعمل بالتوازي، بما في ذلك طرق الاختبار الأخرى في نفس فئة الاختبار.

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

كيفية كتابة الاختبارات باستخدام إطار عمل Java Carlspring/Idempotence

إليك الخطوة التي ستحتاجها للبدء.

تحديد التبعيات

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

  • بالنسبة لـ Gradle (باستخدام Groovy DSL):

testImplementation "org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3"


  • Gradle (باستخدام Kotlin DSL):

testImplementation("org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3")


  • لـ Maven:

org.carlspring.testing.idempotenceidempotence-maven1.0.0-rc-3test

إضافة التعليقات التوضيحية

يجب أن يتم التعليق على فصل الاختبار الخاص بك باستخدام التعليق التوضيحي @ExtendWith(TestResourceExtension.class). هذا التعليق التوضيحي مسؤول عن النسخ الفعلي للموارد.

ستحتاج أيضًا إلى إضافة تعليق توضيحي إلى طرق الاختبار الخاصة بك باستخدام التعليق التوضيحي @TestResources لتحديد الموارد التي تحتاجها.

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


package com.foo;

import org.carlspring.testing.idempotence.annotation.TestResource;
import org.carlspring.testing.idempotence.annotation.TestResources;
import org.carlspring.testing.idempotence.extension.TestResourceExtension;

@ExtendWith(TestResourceExtension.class)
class MyTest {

    @Test
    @TestResources({ @TestResource(source = "classpath:/foo.txt"),
                     @TestResource(source = "classpath*:/**/bar.txt")} )
    void testFoo()
    {
        // Perform whatever checks you need using these resources
    }

}


سيتم إنشاء دليل لكل طريقة اختبار بالتنسيق التالي:

  • بالنسبة لمشروع Gradle، مع اختبار يسمى MyTest مع طريقة testFoo، سيتم وضعها تحت:

build/test-resources/MyTest-testFoo/nested/dir/foo.txt
build/test-resources/MyTest-testFoo/bar.txt


  • بالنسبة لمشروع Maven، باستخدام اختبار يسمى MyTest مع طريقة testFoo، سيتم وضعها تحت:

target/test-resources/MyTest-testFoo/nested/dir/foo.txt
target/test-resources/MyTest-testFoo/bar.txt


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

أين تجد الوثائق

يمكن العثور على وثائق مشروع Idempotence هنا.

يمكنك إلقاء نظرة على النظرة العامة المفاهيمية للحصول على شرح أكثر تفصيلاً لكيفية عمل الأشياء.

كيفية المساهمة

هذا مشروع جديد يشتمل على الوظائف الأساسية والبنية التحتية، ولكن المساعدة مرحب بها دائمًا.

يمكن للمساهمين الذين لديهم خبرة في JUnit وSpringframework وMkDocs المساعدة في تشكيل المشروع ببعض الأفكار والحلول الرائعة. نرحب أيضًا بالمتبنين الأوائل الذين يمكنهم تقديم تعليقات!

المشكلات التي تحمل عنوان hacktoberfest أو المساعدة المطلوبة متاحة للاستيلاء عليها ومن المفترض أن تساعدك على البدء بسرعة. يمكنك العثور عليها هنا.

خاتمة

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

يوفر مشروع carlspring/idmpotence إطار عمل سهل الاستخدام ومناسب لكل من المشاريع الجديدة وتراث إعادة البناء.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/carlspring/writing-parallelizable-tests-with-the-carlspringidempotence-framework-for-java-420n?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3