في المشاريع الكبيرة ، في مرحلة ما ، يحدث الموقف عندما يكون هناك بالفعل الكثير من الاختبارات على المشروع وبالتوازي مع تطوير إطار العمل عالي المستوى الخاص به. الإطار ، في هذه الحالة ، كغلاف حول وظائف كائن الاختبار وإمكانيات الأدوات المختلفة المستخدمة في المشروع. بالإضافة إلى ذلك ، تمتلئ جميع المجلدات بالتركيبات ، ويستخدم الكثير منها في ملف اختبار واحد فقط.
في هذه اللحظة الرائعة ، تظهر بعض المشاكل. لقد كتبت بالفعل عن أحدهم ، هذا هو تنفيذ معلمات ملائمة ، على سبيل المثال ، من ملف . سنتحدث عن التالي من أكثر الأشياء المؤسفة في هذه المقالة.
"كابتن ، لدينا الكثير من المباريات والكرة الأرضية"
يعتبر التحميل الزائد لأدلة الاختبار بالتركيبات نتيجة منطقية لاستخدام المفهوم المضمن في اختبار py.test ، ولكن في بعض الأحيان يتجاوز هذا النهج المقبول. بالإضافة إلى ذلك ، يمكننا في كثير من الأحيان ملاحظة الإنشاءات في الاختبارات ، والتي تم تصميمها لتحديد المعلومات التي يحتاج الاختبار إلى أخذها في حالة معينة ، أو الرغبة في التحقق مبدئيًا من إمكانية اجتياز الاختبار مرة أخرى في مرحلة إعداد البيئة.
أكبر اعتقاد خاطئ ، في الموقف الذي يتم فيه تمرير هذه التركيبات من بعض التركيبات وتواصل setupالاختبار بأكمله ، هو استخدام globalالمتغيرات. لقد واجهت حالات صعبة مماثلة وهذه الفكرة هي واحدة من أولى الأفكار التي تتبادر إلى الذهن.
من الجدير بالذكر في هذه المرحلة أن مفهوم التركيبات يتجنب هذا التلوث في نظافة الكود ، ولكنه يوفر أيضًا مستويات إضافية من التجريد والكثير من المراجع. كحل أخير ، يمكنك الحصول على عادة رهيبة تتمثل في تفريغ نتيجة التثبيت ، ولكن في هذه الحالة ، نفسد السجلات ، لأن ليس لدينا قسم إلى Setup و Run و Teardown ، كما أننا نعقد الكود في لحظة تفريغ النتائج أو إنتاج اختصارات متعددة.
لنلقِ نظرة على بعض الأمثلة ونبدأ بالأسوأ:
"التركيبات والعالمية"
import pytest
@pytest.fixture(autouse=True)
def setup(create_human, goto_room, goto_default_position, choose_window, get_current_view):
global human
global window
#
desired_room = 1 # ,
human = create_human("John", "Doe") #
# - ,
assert goto_room(human, desired_room), "{} {}".format(human.full_name, desired_room)
#
window = choose_window(desired_room)
view = get_current_view(window)
assert view, " {} ".format (window)
yield
# Teardown
goto_default_position(human)
@pytest.mark.parametrize(
"city, expected_result",
[
("New York", False),
("Berlin", False),
("Unknown", True)
]
)
def test_city_in_window(city, expected_result):
""" ."""
window_view = human.look_into(window)
recognized_city = human.recognize_city(window_view)
assert (recognized_city == city) == expected_result, " "
كنتيجة ل:
- هناك فحوصات أولية
- هناك مصير مشؤوم
global
" "
import pytest
@pytest.fixture
def setup(create_human, goto_room, goto_default_position, choose_window, get_current_view):
#
desired_room = 1 # ,
human = create_human("John", "Doe") #
# - ,
assert goto_room(human, desired_room), "{} {}".format(human.full_name, desired_room)
#
window = choose_window(desired_room)
view = get_current_view(window)
assert view, " {} ".format (window)
yield { "human": human, "window": window}
# Teardown
goto_default_position(human)
@pytest.mark.parametrize(
"city, expected_result",
[
("New York", False),
("Berlin", False),
("Unknown", True)
]
)
def test_city_in_window(setup, city, expected_result):
""" ."""
data = setup
window_view = data["human"].look_into(data["window"])
recognized_city = data["human"].recognize_city(window_view)
assert (recognized_city == city) == expected_result, " "
:
-
setup - , ,
, 400+ , .
, 8 setup : , ?
— . py.test, .
:
import pytest
class TestWindowView:
@pytest.fixture
def setup(self, create_human, goto_room, goto_default_position, choose_window, get_current_view):
#
desired_room = 1 # ,
self.human = create_human("John", "Doe") #
# - ,
assert goto_room(self.human, desired_room), "{} {}".format(human.full_name, desired_room)
#
self.window = choose_window(desired_room)
view = get_current_view(self.window)
assert view, " {} ".format (self.window)
yield
# Teardown
goto_default_position(self.human)
@pytest.mark.parametrize(
"city, expected_result",
[
("New York", False),
("Berlin", False),
("Unknown", True)
]
)
def test_city_in_window(self, setup, city, expected_result):
""" ."""
window_view = self.human.look_into(self.window)
recognized_city = self.human.recognize_city(window_view)
assert (recognized_city == city) == expected_result, " "
:
-
global
, .
, . , .
Android/iOS Appium IOT/Embedded .