setUpClass
에 PhantomJS를 시작하고 tearDownClass
에서 PhantomJS를 실행하는 SeleniumTestCase
클래스를 작성했습니다.이 클래스는 안정적으로 setUpClass에서 시작된 phantomjs를 강제 종료합니다. 그러나 파생 클래스 'setUpClass
이 오류를 발생 시키면 SeleniumTestCase.tearDownClass
이 호출되지 않기 때문에 PhantomJS 프로세스가 중단됩니다.파생 클래스 'setUpClass가 실패하면
from django.test import LiveServerTestCase
import sys, signal, os
from selenium import webdriver
errorShots = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', "errorShots")
class SeleniumTestCase(LiveServerTestCase):
@classmethod
def setUpClass(cls):
"""
Launches PhantomJS
"""
super(SeleniumTestCase, cls).setUpClass()
cls.browser = webdriver.PhantomJS()
@classmethod
def tearDownClass(cls):
"""
Saves a screenshot if the test failed, and kills PhantomJS
"""
print 'Tearing down...'
if cls.browser:
if sys.exc_info()[0]:
try:
os.mkdir(errorShots)
except:
pass
errorShotPath = os.path.join(
errorShots,
"ERROR_phantomjs_%s_%s.png" % (cls._testMethodName, datetime.datetime.now().isoformat())
)
cls.browser.save_screenshot(errorShotPath)
print 'Saved screenshot to', errorShotPath
cls.browser.service.process.send_signal(signal.SIGTERM)
cls.browser.quit()
class SetUpClassTest(SeleniumTestCase):
@classmethod
def setUpClass(cls):
print 'Setting Up'
super(SetUpClassTest, cls).setUpClass()
raise Error('gotcha!')
def test1(self):
pass
출력 ("허무"가 인쇄되지 않습니다)
$ ./manage.py test
Creating test database for alias 'default'...
Setting Up
E
======================================================================
ERROR: setUpClass (trucks.tests.SetUpClassTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/andy/leased-on/trucks/tests.py", line 1416, in setUpClass
raise Error('gotcha!')
NameError: global name 'Error' is not defined
----------------------------------------------------------------------
Ran 0 tests in 1.034s
FAILED (errors=1)
Destroying test database for alias 'default'...
제품군의
setUpClass
실패
어떻게 죽일 수 PhantomJS 후 ? setUp
과 addCleanup
을 사용하는 것으로 전환 할 수 있음을 알고 있지만 모든 단일 테스트를 수행하기 전에 PhantomJS를 재발행하지 않도록하고 (다시 앱에 로그인하는 것을 피하고 싶습니다.)