zoukankan      html  css  js  c++  java
  • Python单元测试框架:unittest(二)

    一、直接使用TestCase

    注意所有测试方法都需要以test开头。代码如下:

    复制代码
    import unittest
    
    class Test1(unittest.TestCase):
        @classmethod
        def setUpClass(self):
            print("execute setUpClass")
    
        @classmethod
        def tearDownClass(self):
            print("execute tearDownClass")
    
        def setUp(self):
            print("execute setUp")
    
        def tearDown(self):
            print("execute tearDown")
    
        def test_one(self):
            print('execute test_one')
            self.assertTrue('FOO'.isupper())
    
        def test_two(self):
            print('execute test_two')
    
    
    if __name__ == '__main__':
        unittest.main()
    复制代码

    执行如下:

    二、使用TestSuite

    直接写TestCase执行时是按字母排序的顺序执行的,如果要设定测试用例的执行先后顺序则需要将TestCase封装到TestSuite。代码如下:

    复制代码
    import unittest
    
    class Test2(unittest.TestCase):
        @classmethod
        def setUpClass(self):
            print("execute setUpClass")
    
        @classmethod
        def tearDownClass(self):
            print("execute tearDownClass")
    
        def setUp(self):
            print("execute setUp")
    
        def tearDown(self):
            print("execute tearDown")
    
        def test_one(self):
            print('execute test_one')
            self.assertTrue('FOO'.isupper())
    
        def test_two(self):
            print('execute test_two')
    
    
    if __name__ == '__main__':
            suite = unittest.TestSuite()
            # Test2是要测试的类名,test_two是要执行的测试方法
            suite.addTest(Test2("test_two"))
            suite.addTest(Test2("test_one"))
            runner = unittest.TextTestRunner()
            runner.run(suite)
    复制代码

    执行如下,可以看到先添加的test_two先执行:

     三、使用HTMLTestRunner

    我们可能还会希望生成一个简单的HTML报告,可使用HTMLTestRunner实现。但pypi官网上最新的都是只支持python2.x的0.8.2版本。可将以下代码自行保存成HTMLTestRunner.py放到自己项目目录下

     View Code

    代码如下:

    复制代码
    import unittest
    import HTMLTestRunner
    
    class Test3(unittest.TestCase):
        @classmethod
        def setUpClass(self):
            print("execute setUpClass")
    
        @classmethod
        def tearDownClass(self):
            print("execute tearDownClass")
    
        def setUp(self):
            print("execute setUp")
    
        def tearDown(self):
            print("execute tearDown")
    
        def test_one(self):
            print('execute test_one')
            self.assertTrue('FOO'.isupper())
    
        def test_two(self):
            print('execute test_two')
    
    
    if __name__ == '__main__':
            suite = unittest.TestSuite()
            # Test3是要测试的类名,test_one是要执行的测试方法
            suite.addTest(Test3("test_one"))
            suite.addTest(Test3("test_two"))
            # 实践中发现执行时的当前路径,不一定是此文件所在的文件夹,所以使用绝对路径
            # print(f"{os.getcwd()}")
            filename = 'F:\PycharmProjects\test3\apptestresult.html'
            fb = open(filename, 'wb')
            runner = HTMLTestRunner.HTMLTestRunner(stream=fb, title="测试HTMLTestRunner", description="测试HTMLTestRunner")
            runner.run(suite)
            fb.close()
    复制代码

    执行如下:

    报告如下:

    四、HTMLTestRunner未生成报告问题处理

    4.1 pytest干扰

     如果python环境中安装了pytest,那么默认运行时会是Run 'py.test for'(如下图所示),这时if __name__ == "__main__"下的语句是不被执行的所以报告肯定不会生成(原理未知)。

    些时需要依次点开pycharm菜单----Run----Edit Configurations...自行添加一个运行配置,如下图

    4.2 路径问题

    一是注意自己把报告输出到了哪个位置,特别是如果有几个地方都会输出报告时不要弄混了,搞得自己在浏览器中刷新半天没看到有变化,认为没生成报告。

    二是实践中通过os.getcwd()发现python运行时的目录不一定是当前目录,所以如果报告使用相对路径然后又没看到有报告生成,那就注意看os.getcwd()返回的运行路径是不是当前文件夹。

  • 相关阅读:
    第一次项目总结
    动画animation
    动画基本
    JQ属性和CSS
    JQ选择器
    关于JS的循环和函数,由入门到放弃
    Js知识点
    课程总结
    移动端开发--项目总总结
    项目总结
  • 原文地址:https://www.cnblogs.com/yaoteng/p/10979099.html
Copyright © 2011-2022 走看看