Megpróbálok tesztelni egy webalkalmazást Selenium és Python segítségével. Az alkalmazásnak van egy adatbázis-mentési segédprogramja, amely nagyon praktikus. Jelenleg egy nagy osztályom van RegressionTest(unittest.TestCase)
, és ez a setUpClass()
és tearDownClass()
osztályokat használja az adatbázis biztonsági mentésének végrehajtásához a teszt befejezése előtt és a visszaállításhoz. Minden remekül működik, de nagyon szeretném ezeket a teszteket több osztályra felosztani (mindegyik tesztosztálynak saját fájlja van), de nem találok erre megfelelő módot a biztonsági másolat megkettőzése nélkül. /restore művelet.
Tovább bonyolítja a dolgokat, a következő korlátozásokkal szeretném kiegészíteni:
Ezt mind a TeamCity CI-szerveremen (jelenleg python3 -m teamcity.unittestpy
-t használom, de rugalmas vagyok, amíg továbbra is kapok tesztjelentéseket) és a PyCharm szabványos egységteszt-konfigurációján keresztül is meg kell hívni. Sajnos, amikor a PyCharmon keresztül hívják meg, úgy tűnik, hogy az '__main__' == __name__
értéke False
, ami kizárja egy ehhez hasonló környezetkezelő lehetőségét:
if '__main__' == __name__:
with BackupManager():
if seleniumutils.is_running_under_teamcity():
runner = TeamcityTestRunner()
else:
runner = unittest.TextTestRunner()
unittest.main(testRunner=runner)
Íme a PyCharm által végrehajtott sor: /usr/bin/python3 /Path/To/PyCharm/Installation/helpers/pycharm/_jb_unittest_runner.py --path /Path/To/Project/Test/Code/testregression.py
És itt van a _jb_unittest_runner.py
pontos verziója a PyCharm jelenleg használt verziójában: https://github.com/JetBrains/intellij-community/blob/3486b93168677dbc2519a78f472039bc50ca78be/python/helpers/pycharm/_jb_unittest_runner.py
Nem jut eszembe semmi, ami lehetővé tenné, hogy ezt megtegyem. Azt hittem, talán a többszörös öröklődés segíthet, bármilyen csúnya is legyen az. De nem tudok olyan forgatókönyvet kitalálni a fejemben, amely ne hagyná, hogy minden tesztet legalább kétszer meghívjanak.
Szóval, tud valaki olyan megoldást találni, amely lehetővé teszi, hogy pontosan egyszer hajtsak végre egy műveletet a tesztek előtt és után?
.py
fájl lenne. Tehát ha azt tervezi, hogy a nagy tesztosztályt külön modulokba (.py
fájlokba) kívánja átalakítani, az azt jelenti, hogy mindegyikben különsetUpModule()
éstearDownModule()
függvényeket kell meghatározni. 15.03.2018setUpClass()
és atearDownClass()
használata. Látom, a kérdésemben nem szerepelt kifejezetten az a vágyam, hogy fájlonként egy tesztosztály legyen, ezért szerkesztem. 15.03.2018init.py
-re, és különösen ainit.py
-ra, aunittest
-ra vonatkozóan.__init__.py
-re gondolsz? Ha igen, az nem adná vissza a funkcionalitást, igaz? 16.03.2018