python unittest 单元测试框架

unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。今天初步总结一下unittest的 用法。

测试一段程序是否有错误,我们既可以采用普通的测试方法,也可以采用unittest测试框架

class Count():
    def __init__(self,a,b):
        self.a=a
        self.b=b

    def add(self):
        return self.a+self.b


if __name__=="__main__":
    c=Count(2,3)
    print(c.add())

首先用普通方法进行测试

from count import Count


class TestCount():
    def test_add(self):
        try:
            c = Count(2, 3)
            sum = c.add()
            assert (sum == 6), 'The result is not correct'
        except AssertionError as e:
            print(e)    # e 是一个变量,记录了异常的类,可以打印出错误信息
        else:
            print("test pass")


if __name__=="__main__":
    a = TestCount()
    a.test_add()

采用python内置的断言方法,然后与异常处理相结合

现在再使用unittest测试框架进行测试

import unittest
from count import Count


class TestCount(unittest.TestCase):
    def setUp(self):
        print("test case starts")

    def tearDown(self):
        print("test case ends")

    def test_add(self):
        c=Count(2,4)
        sum=c.add()
        self.assertEqual(sum,7)

    def test_add2(self):
        c = Count(2, 4)
        sum=c.add()
        self.assertEqual(sum,6)


if __name__=="__main__":
    suite=unittest.TestSuite()
    suite.addTest(TestCount("test_add"))   # TestCount 是测试类名
    suite.addTest(TestCount("test_add2"))  # test__add是测试类中测试用例名,有几个测试用例就添加几个
    runner=unittest.TextTestRunner()
    runner.run(suite)

其中if __name__=="__main__":中的代码可以用下面代码代替

if __name__=="__main__":
    unittest.main()

unittest自带的main方法可以执行测试类中所有以test开头的用例

unittest执行测试用例,总会自动执行setUp和tearDown方法,setUp方法完成测试用例一些初始工作,如开启浏览器,teardown方法完成用例执行完的收尾工作,如关闭浏览器

unittest测试类中用例名总是以test开头

unittest自身带有一系列的断言方法:

assertEqual(a,b,[msg='测试失败时打印的信息']) 判断a,b是否相等

assertNotEqual(a,b,[msg='测试失败时打印的信息'])

assertTrue(x,[msg='测试失败时打印的信息']):断言x是否True

assertFalse(x,[msg='测试失败时打印的信息']):断言x是否False

assertIn(a,b,[msg='测试失败时打印的信息']):断言a是否在b中

assertNotIn(a,b,[msg='测试失败时打印的信息']):断言a是否在b中

如果有大量的测试用例,存在于不同的文件中,如果要同时执行这些文件,可以通过discover方法实现,这样右分为两种情况:1.文件都在同级目录下2.含有子级目录

1.文件都在同级目录下

import unittest

if __name__=="__main__":
    testdir = r"F:\python视频\python_file\unit_test"   # testdir是测试文件根目录
    discover = unittest.defaultTestLoader.discover(testdir, pattern="test_un*.py", top_level_dir=None)
    runner=unittest.TextTestRunner()
    runner.run(discover)

2.含有子级目录

代码同上,只是在每个子级目录中新建一个__init__.py文件

多个测试用例同时执行,unittest如何排序,确定先执行哪一个

unittest 通过比较用例名的ascll码,哪个用例名的ascll码在前,先执行,否则后执行

import unittest
from count import Count


class TestCount(unittest.TestCase):
    def setUp(self):
        print("test case starts")

    def tearDown(self):
        print("test case ends")

    def test_add(self):
        print("test_add")
        c=Count(2,4)
        sum=c.add()
        self.assertEqual(sum,6)

    def test_bdd(self):
        print("test_bdd")
        c = Count(2, 4)
        sum=c.add()
        self.assertEqual(sum,6)


if __name__=="__main__":
    unittest.main()

结果

猜你喜欢

转载自www.cnblogs.com/zk-njupt/p/10849002.html