[英]When I run my test suite I am getting a TypeError I am not able to understand why
我正在使用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
的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.