簡體   English   中英

從Python的另一個類內部調用方法

[英]Call a method from inside another class in Python

我有一些使用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

您正在使它變得比所需復雜得多。 如果您的DeleteLectureFromCoursePanel繼承自Fixtures ,則它獲取該類中定義的方法。 它們將由測試運行器自動調用,因此您沒有理由手動調用它們(尤其是在此類類體內)。

您也無需另外從TestCase繼承。 您已經通過Fixtures獲得了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM