unittest 单元测试和coverage覆盖率 极简实例

一、首先在我的temp\temp_test1\下新建一个py文件,名字为divi.py

文件中的内容为:

def divi(a, b):

    if type(a) and type(b) not in (int, float):
        return False
    if b == 0:
        return False
    else:
        result = a/b
        return result

 二、同级目录下,也可以不同级。创建test_divi.py,Terminal中输入pip install ddt安装,安装完成后,编辑py文件内容如下:

import ddt
import unittest
from temp_test1.divi import divi


data = [
    {'num_a': 1, 'num_b': 2, 'result': 0.5},
    {'num_a': 1, 'num_b': 0, 'result': False},
    {'num_a': 4, 'num_b': 2, 'result': 2.0},
    {'num_a': 5.2, 'num_b': 2,  'result': 2.6},
    {'num_a': 5.2, 'num_b': 3, 'result': 1.73},
]

@ddt.ddt
class TestDivi(unittest.TestCase):
    def setUp(self):
        print('======test start======')

    def tearDown(self):
        print('======test end======')

    @ddt.data(*data)
    def test_divi(self, data):
        self.assertEqual(divi(data['num_a'], data['num_b']), data['result'])

三、执行进行单元测试,验证divi方法在不同情况下的处理和代码的健壮性。可以看到有一个是失败的,因为返5.2/3返回的是1.7333333333333334 不等于我的预期1.73

四、 安装coverage模块,进行代码覆盖率检查。在Terminal中输入pip install coverage安装

安装成功后,进入Terminal终端,进入到代码目录中,执行coverage run test_divi.py,发现报错了

报错原因是因为找不到,因此我们添加环境变量,打开环境变量,添加PYTHONPATH,把路径C:\Users\songlihui\PycharmProjects\temp\temp_test1添加进去保存

 继续执行coverage run test_divi.py,发现还是报刚才的错,就是配置环境配置完成后,没能在终端模式中立即生效的原因。

我们换一种方式,在代码顶部加一段下面红框中的话

继续执行coverage run test_divi.py,发现成功了

继续接着执行coverage html

 

然后进入到test_divi.py文件目录中,我们发现多了一个叫htmlcov的文件夹

 

打开文件夹中的index.html,我们看到了代码覆盖率。不过里面有一个ddt,会干扰我们的统计结果。留给大家自行学习深入,大家可以上网查一下解决方法~~

 


版权声明:本文为songlh1234原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。