【问题标题】:When I run my test suite I am getting a TypeError I am not able to understand why当我运行我的测试套件时,我得到一个 TypeError 我无法理解为什么
【发布时间】:2018-06-12 21:48:55
【问题描述】:

我正在使用 HtmlTestRunner 生成我的测试报告,但我无法理解为什么会出现此错误:"TypeError: issubclass() arg 1 must be a class"

我的设置是 Python 3.6、pytest、Ubuntu 17.10。

这是我写的代码:

from pages.Home.category_page import CategoryPage
from utilites.testStatus import TestStatus
import pytest
import unittest
import time

@pytest.mark.usefixture("oneTimeSetUp","setUp")
class CategoryTest(unittest.TestCase):
    @pytest.fixture(autouse=True)
    def classSetup(self,oneTimeSetUp):
        self.ca = CategoryPage(self.driver)
        self.ts = TestStatus(self.driver)

    @pytest.mark.run(order=1)
    def test_Announcements_link_WAF001(self):
        result = self.ca.find_announcements_link()
        self.ts.markFinal("Announcements link", result,"To find announcements link")
        time.sleep(2)

    @pytest.mark.run(order=2)
    def test_FirstLinkInAnnouncements_WAF002(self):
        result=self.ca.find_first_announcement_link()
        self.ts.markFinal("Latest link in announcements",result,"To click on latest announcements link")
        time.sleep(2)

    @pytest.mark.run(order=3)
    def test_Products_Link_WAF003(self):
        result=self.ca.find_products()
        self.ts.markFinal("Products link",result,"To find products link")
        time.sleep(2)

    @pytest.mark.run(order=4)
    def test_FirstLinkInProducts_WAF004(self):
        result=self.ca.find_first_products_link()
        self.ts.markFinal("Latest link in products",result,"To click on latest products link")
        time.sleep(2)

测试套件运行器:

from unittest import TestLoader, TestSuite
from HtmlTestRunner import HTMLTestRunner
from tests.Home import category_test

example_tests = TestLoader().loadTestsFromTestCase(category_test)
suite = TestSuite(example_tests)
runner = HTMLTestRunner(output='example_suite', template='path/to/template', report_title='My Report')
runner.run(suite)

这是产生的错误:

Traceback (most recent call last):
  File "/home/manoj/PycharmProjects/untitled8/test/test_suite.py", line 6, in <module>
    example_tests = TestLoader().loadTestsFromTestCase(to_test_login)
  File "/usr/lib/python3.6/unittest/loader.py", line 85, in loadTestsFromTestCase
    if issubclass(testCaseClass, suite.TestSuite):
TypeError: issubclass() arg 1 must be a class

【问题讨论】:

  • 错误标记在哪里?
  • 如果您想使用unittest 运行测试,则不应使用pytest 功能。
  • 这是我收到的错误@Dragonthoughts Traceback(最近一次调用最后一次):文件“/home/manoj/PycharmProjects/untitled8/test/test_suite.py”,第 6 行,在 example_tests = TestLoader().loadTestsFromTestCase(to_test_login) File "/usr/lib/python3.6/unittest/loader.py", line 85, in loadTestsFromTestCase if issubclass(testCaseClass, suite.TestSuite): TypeError: issubclass() arg 1 must成为一个班级

标签: python python-3.x typeerror pytest


【解决方案1】:

您的问题是您将测试模块而不是测试类传递给跑步者。如果您查看unittest's documentation for loadTestsFromTestCase,您会发现它的参数必须是TestCase 派生类。

我将您的示例简化为最小版本以简化我的答案:

tests.py:

import unittest

class MyTestCase(unittest.TestCase):
    def test_something(self):
        assert True

runner.py,基于你的:

from unittest import TestLoader, TestSuite, TextTestRunner
import tests

example_tests = TestLoader().loadTestsFromTestCase(tests)
suite = TestSuite(example_tests)
runner = TextTestRunner()
runner.run(suite)

这将给出以下输出:

$ python runner.py
Traceback (most recent call last):
  File "runner.py", line 4, in <module>
    example_tests = TestLoader().loadTestsFromTestCase(tests)
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/loader.py", line 85, in loadTestsFromTestCase
    if issubclass(testCaseClass, suite.TestSuite):
TypeError: issubclass() arg 1 must be a class

如果我将 runner.py 切换为使用该类,它会起作用:

from unittest import TestLoader, TestSuite, TextTestRunner
from tests import MyTestCase

example_tests = TestLoader().loadTestsFromTestCase(MyTestCase)
suite = TestSuite(example_tests)
runner = TextTestRunner()
runner.run(suite)

输出:

$ python runner.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

您应该能够根据您的代码进行调整。话虽如此,pytest 集成可能不适用于基于单元测试的 HtmlTestRunner。确保您查看pytest-html

【讨论】:

    猜你喜欢
    • 2022-07-18
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多