我有一些我用Nose运行的Python测试。 一个例子是:
class Logout(unittest.TestCase):
def report_pass_fail(self):
#code
def setUp(self):
#code
def test_Logout(self):
#code
def tearDown(self):
#code
因为我有大量的测试,因为我想创建一个模块化的代码架构....我想将report_pass_fail,setUp和tearDown方法放在一个单独的文件(模块)中,并在调用时调用它们在测试班里需要。
我在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没有错误,但是当我从控制台运行它时说:
ValueError:no such test method in <class 'fixture_module.Fixtures'> : runTest
答案 0 :(得分:2)
你使这个变得比它需要的复杂得多。如果您的DeleteLectureFromCoursePanel
继承自Fixtures
,则已经获取该类中定义的方法。它们将由测试运行器自动调用,并且您没有理由手动调用它们(特别是在类体内)。
您也无需另外继承TestCase
。您已经通过Fixtures
获得了这一点。