• 小阳
    2022-04-05
    def __init__(self,method,login): unittest.TestCase.__init__(self,method) self.login = login if __name__ == '__main__': login = TestAdminLogin() login.test_login_ok() test_article = TestAddArticle() 提示参数method和login未填,这里的method传什么内容? test_article.test_add_article_ok()

    作者回复: 在使用 unittest.TestCase 编写测试用例时,可以通过将测试函数名作为参数传递给 `unittest.defaultTestLoader.loadTestsFromName()` 方法来获取指定的测试函数。而 `unittest.TestSuite()` 则可以将多个测试函数打包成一个测试套件。 因此,如果需要在一个脚本中执行多个测试函数,可以按照如下步骤进行: 1. 定义多个测试函数,并将每个测试函数都打包成一个测试套件; 2. 将所有测试套件添加到主测试套件中; 3. 使用 `unittest.TextTestRunner()` 执行主测试套件。 在你提供的代码中,`TestAddArticle` 类和 `TestAdminLogin` 类都继承自 `unittest.TestCase`,因此可以将它们分别打包成测试套件,并添加到主测试套件中。示例如下: ``` import unittest class TestAddArticle(unittest.TestCase): def test_add_article_ok(self): print("Test add article OK") class TestAdminLogin(unittest.TestCase): def test_login_ok(self): print("Test login OK") if __name__ == '__main__': # 将测试函数打包成测试套件 suite_article = unittest.TestLoader().loadTestsFromTestCase(TestAddArticle) suite_login = unittest.TestLoader().loadTestsFromTestCase(TestAdminLogin) # 创建主测试套件并添加测试套件 all_tests = unittest.TestSuite([suite_article, suite_login]) # 执行主测试套件 runner = unittest.TextTestRunner() runner.run(all_tests) ``` 在以上代码中,首先将 `TestAddArticle` 和 `TestAdminLogin` 类中的测试函数打包成测试套件,并将它们添加到主测试套件 `all_tests` 中。然后使用 `unittest.TextTestRunner()` 执行主测试套件即可。 至于 `__init__()` 方法中的 `method` 参数,通常情况下可以使用默认值 `None`,因为 `unittest.TestCase` 中已经定义了测试函数的执行方法。如果需要自定义测试函数的执行方法,可以通过重写 `runTest()` 方法来实现。例如: ``` class TestAddArticle(unittest.TestCase): def __init__(self, login): super().__init__() self.login = login def runTest(self): self.login() print("Test add article OK") class TestAdminLogin(unittest.TestCase): def __init__(self): super().__init__() def runTest(self): print("Test login OK") if __name__ == '__main__': login = TestAdminLogin() test_article = TestAddArticle(login) test_article.run() ``` 在以上代码中,`TestAddArticle` 类的 `__init__()` 方法接收一个 `login` 参数,并将其保存在实例属性中。然后重写了 `runTest()` 方法,先执行登录操作,然后再执行添加文章的操作。`TestAdminLogin` 类同理,只是不需要接收参数。最后在 `__main__` 函数中分别创建两个测试类的实例,然后调用 `run()` 方法执行测试函数。

    
    
  • yjluo
    2022-02-20
    class LoginTest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.driver=webdriver.Chrome() cls.driver.get('*****') cls.driver.maximize_window() def test1(self): pass @classmethod def tearDownClass(cls) -> None: cls.driver.qiut() 想问下最后调用tearDownClass()方法,cls.识别不了driver变量,没法关闭浏览器,怎么解决?

    作者回复: 对照一下我的视频和源码

    
    
  • ZBQ
    2021-09-11
    有没有完整的重构代码

    作者回复: 都在源码里面

    
    
  • Geek_88b1a8
    2020-12-02
    老师,我在用unittest重构这个添加文章但是时候报这错,尝试 了好久都没解决,您可以帮我看一下是什么问题吗? 报错的信息: TypeError: __init__() missing 1 required positional argument: 'login' 我的调用: if __name__ == '__main__': login = TestAdminLogin() login.test_admin_login_ok() testArticle = TestArticle(login) testArticle.test_add_article_ok()

    作者回复: 在初始化方法加参数

    共 3 条评论
    
  • 瓜皮喵宝宝
    2020-10-04
    老师,在做unittest重构时,比如test_article.py类中,改写为unittest断言方式,会报错,如: self.assertEqual(msg_text, expected) 执行后AttributeError: 'TestArticle' object has no attribute '_type_equality_funcs' 报错位置就在改写的断言上; 调整为之前,assert msg.text == expected则执行成功; 断点调试的时候比较看了下msg_text 和 expected也是一致的。

    作者回复: 看看测试类 是否继承了unittest的父类

    
    
  • 西西
    2020-09-05
    class TestArticle(unittest.TestCase): def __init__(self, method, login): unittest.TestCase.__init__(self, method) self.login = login 老师 new TestArtic类的对象时候为什么不需要传method参数,只需要传login参数呢

    作者回复: 这个就是Python语法跟se没啥关系 如果不是默认参数 是必须要传参的

    共 2 条评论
    
  • 落叶知秋cium
    2020-08-14
    if __name__ == '__main__': login = TestUserLogin() login.test2_user_login_ok() class TestUserLogin(unittest.TestCase): ------------------------------------ @classmethod def setUpClass(cls) -> None: cls.driver = webdriver.Chrome() cls.driver.get(url) cls.driver.maximize_window() 运行main的时候会报 AttributeError: 'TestUserLogin' object has no attribute 'driver'

    作者回复: 设置断点 看看driver初始化了吗

    共 3 条评论
    
  • 从前从前
    2022-04-17
    没有人发现,老师后面跑的不是重构的代码吗,应该是unittest包下的,引入包没改
    
    