首页 > 编程语言 > 详细

Python单元测试框架:unittest(二)

时间:2019-06-05 14:12:49      阅读:84      评论:0      收藏:0      [点我收藏+]

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

Python单元测试框架:unittest(二)

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!