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()返回的运行路径是不是当前文件夹。

原文地址:https://www.cnblogs.com/yaoteng/p/10979099.html