Dalam proyek besar, di beberapa titik, situasi terjadi ketika sudah ada banyak pengujian pada proyek dan secara paralel, kerangka kerja tingkat tingginya sendiri sedang berkembang. Kerangka kerja, dalam hal ini, sebagai pembungkus fungsi objek pengujian dan kapabilitas berbagai alat yang digunakan dalam proyek. Selain itu, semua folder diisi dengan perlengkapan, banyak di antaranya hanya digunakan dalam satu file pengujian.
Pada saat yang luar biasa ini, beberapa masalah muncul. Saya sudah menulis tentang salah satunya, ini adalah implementasi parameterisasi yang mudah digunakan, misalnya, dari file . Kami akan berbicara tentang yang paling malang berikutnya dalam artikel ini.
"Kapten, kami memiliki banyak pertandingan dan pertandingan global muncul"
Membebani direktori uji dengan perlengkapan merupakan konsekuensi logis dari penggunaan konsep yang disertakan dalam py.test, tetapi terkadang pendekatan ini melampaui yang dapat diterima. Selain itu, kami sering dapat mengamati konstruksi dalam tes, yang dirancang untuk menentukan informasi apa yang perlu diambil tes dalam kasus spesifik tertentu, atau keinginan untuk memeriksa terlebih dahulu kemungkinan kelulusan tes lebih lanjut pada tahap persiapan lingkungan.
Kesalahpahaman terbesar, dalam situasi di mana konstruksi ini diteruskan dari beberapa setupperlengkapan dan mengikuti seluruh pengujian, adalah dengan menggunakan globalvariabel. Saya telah menghadapi kasus sulit serupa dan ide ini adalah salah satu yang pertama muncul di pikiran.
Perlu disebutkan pada titik ini bahwa konsep perlengkapan menghindari noda kebersihan kode ini, tetapi juga memberikan tingkat abstraksi tambahan dan banyak referensi. Sebagai upaya terakhir, Anda bisa mendapatkan kebiasaan buruk membongkar hasil perlengkapan, tetapi dalam hal ini, kami merusak log, karena kami tidak memiliki divisi menjadi Setup, Run dan Teardown, dan kami juga memperumit kode pada saat membongkar hasil atau menghasilkan beberapa pintasan.
Mari kita lihat beberapa contoh, dan mulai dengan yang terburuk:
"Jadwal dan global"
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, " "
Hasil dari:
- Ada pemeriksaan awal
- Ada yang bernasib malang
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 .