Saya menggunakan selenium untuk pengujian ujung ke ujung dan saya tidak bisa mendapatkan cara menggunakan setup_class
dan teardown_class
metode.
Saya perlu mengatur browser dalam setup_class
metode, kemudian melakukan banyak tes yang didefinisikan sebagai metode kelas dan akhirnya keluar dari teardown_class
metode browser .
Tapi secara logis sepertinya solusi yang buruk, karena sebenarnya tes saya tidak akan bekerja dengan kelas, tetapi dengan objek. Saya meneruskan self
param di dalam setiap metode pengujian, jadi saya dapat mengakses vars objek:
class TestClass:
def setup_class(cls):
pass
def test_buttons(self, data):
# self.$attribute can be used, but not cls.$attribute?
pass
def test_buttons2(self, data):
# self.$attribute can be used, but not cls.$attribute?
pass
def teardown_class(cls):
pass
Dan bahkan sepertinya tidak benar membuat instance browser untuk kelas .. Itu harus dibuat untuk setiap objek secara terpisah, bukan?
Jadi, saya perlu menggunakan __init__
dan __del__
metode daripada setup_class
dan teardown_class
?
resource
parameter ditest_that_depends_on_resource(self, resource)
Ketika Anda menulis "tes yang didefinisikan sebagai metode kelas" , apakah yang Anda maksud adalah metode kelas (metode yang menerima kelasnya sebagai parameter pertama) atau hanya metode biasa (metode yang menerima turunan sebagai parameter pertama)?
Karena contoh Anda digunakan
self
untuk metode pengujian, saya mengasumsikan yang terakhir, jadi Anda hanya perlu menggunakansetup_method
:Contoh metode pengujian diteruskan ke
setup_method
danteardown_method
, tetapi dapat diabaikan jika kode penyiapan / pembongkaran Anda tidak perlu mengetahui konteks pengujian. Informasi lebih lanjut dapat ditemukan di sini .Saya juga menyarankan agar Anda membiasakan diri dengan perlengkapan py.test , karena ini adalah konsep yang lebih kuat.
sumber
setup_class
dengan metode tiruan dan sejenisnya perlu dimodernisasi.setup_class(self, foo, bar)
->setup_method(self,function,foo,bar)
Ini mungkin membantu http://docs.pytest.org/en/latest/xunit_setup.html
Dalam rangkaian pengujian saya, saya mengelompokkan kasus pengujian saya ke dalam beberapa kelas. Untuk penyiapan dan pembongkaran yang saya perlukan untuk semua kasus pengujian di kelas itu, saya menggunakan metode
setup_class(cls)
andteardown_class(cls)
class.Dan untuk penyiapan dan pembongkaran yang saya perlukan untuk setiap kasus uji, saya menggunakan
setup_method(method)
danteardown_method(methods)
Contoh:
Sekarang ketika saya menjalankan pengujian saya, saat eksekusi TestClass dimulai, ia mencatat detail kapan mulai dieksekusi, saat mengakhiri eksekusi dan sama untuk metode ..
Anda dapat menambahkan langkah penyiapan dan pembongkaran lain yang mungkin Anda miliki di lokasi masing-masing.
Semoga membantu!
sumber
setup_class
vssetup_method
?<setup/teardown>_class
seluruh kelas. Di sini, bisa berupa hal-hal seperti mengatur link ke DB atau memuat datafile. Dan kemudian, setiap kasus uji dapat memiliki penyiapannya sendiri dalam bentuk<setup/teardown>_method
. Semuanya sudah jelas sekarang. Terima kasih banyak!Seperti yang disarankan oleh @Bruno, menggunakan perlengkapan pytest adalah solusi lain yang dapat diakses untuk kedua kelas pengujian atau bahkan hanya fungsi pengujian sederhana. Berikut ini contoh pengujian fungsi python2.7 :
Jadi, menjalankan
test_1...
menghasilkan:Perhatikan yang
stuff_i_setup
direferensikan di fixture, memungkinkan objek itu menjadisetup
dantorn down
untuk pengujian berinteraksi dengannya. Anda bisa membayangkan ini bisa berguna untuk objek persisten, seperti database hipotetis atau beberapa koneksi, yang harus dibersihkan sebelum setiap pengujian dijalankan agar tetap terisolasi.sumber
Kode Anda harus berfungsi seperti yang Anda harapkan jika Anda menambahkan
@classmethod
dekorator.Lihat http://pythontesting.net/framework/pytest/pytest-xunit-style-fixtures/
sumber
self
digunakan untuk metode contoh, di mana argumen pertama adalah contoh objek spesifik tempat operasi metode berlangsung, sementaracls
digunakan untuk@classmethod
s, yang terikat ke kelas dan bukan turunan dari kelas (yaitu objek).