python unittest 单元测试框架

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

测试一段程序是否有错误,咱们既能够采用普通的测试方法,也能够采用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__":中的代码能够用下面代码代替ui

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

unittest自带的main方法能够执行测试类中全部以test开头的用例spa

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

unittest测试类中用例名老是以test开头视频

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

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

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

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()

结果

相关文章
相关标签/搜索