2013-10-07 5 views
1

Nose로 실행하는 Python 테스트가 있습니다. 나는 시험의 매우 큰 금액을 가지고 있고이 모듈 식 코드 아키텍처를 만들려하기 때문에 .... 나는 내부의 report_pass_fail, 설정 및 해체 방법을 가지고 싶습니다 때문에Python의 다른 클래스 내부에서 메서드 호출

class Logout(unittest.TestCase): 

    def report_pass_fail(self): 
     #code 

    def setUp(self): 
     #code 

    def test_Logout(self): 
     #code 

    def tearDown(self): 
     #code 

: 예는 이것이다 별도의 파일 (모듈)을 만들고 테스트 클래스 내에 필요할 때 호출하면됩니다.

나는 OOP에 익숙하지 않다. 몇 가지 조합을 시도했지만 성공하지 못했다. 어떻게 할 수 있습니까?

import json, httplib, base64, unittest, sys 
from selenium import webdriver 
import className 
from creds import config, sauce_hub 

class Fixtures(unittest.TestCase): 
    def report_pass_fail(self): 
     base64string = base64.encodestring('%s:%s' % (config['username'], config['access-key']))[:-1] 
     result = json.dumps({'public': 'true', 'passed': sys.exc_info() == (None, None, None)}) 
     connection = httplib.HTTPConnection("saucelabs.com") 
     connection.request('PUT', '/rest/v1/%s/jobs/%s' % (config['username'], self.wd.session_id), result, headers={"Authorization": "Basic %s" % base64string}) 
     result = connection.getresponse() 
     return result.status == 200 

    def setUp(self): 
     desired_capabilities = webdriver.DesiredCapabilities.FIREFOX 
     desired_capabilities['version'] = '4' 
     desired_capabilities['platform'] = 'Linux' 
     desired_capabilities['name'] = className.getName(self) 
     desired_capabilities['record-video'] = False 

     self.wd = webdriver.Remote(desired_capabilities=desired_capabilities, 
            command_executor="http://" + config['username'] + ":" + config['access-key'] + sauce_hub) 
     self.wd.implicitly_wait(10) 

    def tearDown(self): 
     self.wd.quit() 

그리고 테스트 파일에서의 사용이 같은 것입니다 :

import unittest 
from fixture_module import Fixtures 
#is_alert_present(wd) 

#credentials 



class DeleteLectureFromCoursePanel(Fixtures,unittest.TestCase): 

    import fixture_module 

    f = fixture_module.Fixtures() 
    f.report_pass_fail() 

    f.setUp() 

    def test_DeleteLectureFromCoursePanel(self): 
     success = True 
     wd = self.wd 
     wd.find_element_by_link_text("Delete").click() 
     self.assertEqual("Are you sure?", wd.switch_to_alert().text) 
     wd.switch_to_alert().accept() 
     self.assertTrue(success) 

    f.tearDown() 


if __name__ == '__main__': 
    unittest.main() 

그것은 좋아 보인다 PyCharmIDE에 오류가 없지만 때 나는

내가 만든 모듈이 있습니다 콘솔에서 실행하십시오 :

답변

2

이 작업은 필요한 것보다 훨씬 복잡합니다. 되려고. DeleteLectureFromCoursePanelFixtures에서 상속되면 이미이 해당 클래스에 정의 된 메소드를 가져옵니다. 그들은 테스트 주자에 의해 자동으로 호출되며, 수동으로 호출 할 이유는 없습니다 (특히 클래스 본문 내에서).

TestCase에서 추가로 상속 할 필요가 없습니다. 당신은 이미 Fixtures을 통해 그것을 얻습니다.

+0

안녕 다니엘. 감사합니다. DeleteLectureFromCoursePanel에서 TestCase의 상속을 제거하고 테스트 클래스 내부에서 가져 오기와 인스턴스를 삭제했습니다. 이제는 원하는대로 작동합니다. 메소드가 자동으로 호출됩니다. 파이썬에서 OOP를 더 잘 이해할 수 있다고 생각합니다. 다시 한 번 감사드립니다! –