python - 从 Python 中的另一个类中调用方法

标签 python functional-testing fixtures nose

我有一些使用 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 获得了该信息。

关于python - 从 Python 中的另一个类中调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19220104/

相关文章:

python - 在 python 中传递可选参数

django - 如何向灯具添加与 'through' 关系的 ManyToMany 字段?

python - Gunicorn:多个后台工作线程

python - 使用 Falcon 的测试模块模拟多部分/表单数据文件上传

unit-testing - tdd - 为第 3 方代码创建测试

unit-testing - 您如何决定在您的测试套件中测试什么?

python - pytest fixture - 获取值并避免错误 "Fixture ' X' 直接调用”

ruby-on-rails - 在 Rails 3 中,我得到了一个用于回收的 NoMethodError!测试过程中的方法

python - 为什么我收到 NameError : name 'ActionChains' is not defined?

python - 类型错误:字符串索引必须是整数(使用 pandas Dataframe)