unittest介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unittest介绍相关的知识,希望对你有一定的参考价值。

参考技术A 1、unittest的介绍

unittest是python单元测试框架,类似于JAVA的JUnit框架;

单元测试:是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义。接口测试里面,一个接口可以作为一个单元。

unittest核心:TestFixture(脚手架,做一些启动关闭的清理程序)、TestCase(python中方法)、TestSuite(套件)、TestRunner

2、使用

用import语句引入unittest模块

测试的类都继承TestCase(class UserTestCase(unittest.TestCase))

setUp()测试前的初始化工作

tearDown()测试后的资源清理工作

执行所有用例只运行一次初始化和清理条件,用setUpClass(cls)、tearDownClass(cls)(方法名上标注@classmethod)

注意:

(1)所有类中方法的入参为self,定义方法的变量也要,self.变量

(2)定义测试用例,以"test"开头命名的方法,方法入参为self

(3)unittest.main()方法会搜索该模块下的所有以test开头的测试用例方法,并自动执行

(4)自己写的py文件不能用unittest.py命名,不然后找不到TestCase

(5)用例成功是输出.失败是F

断言(支持自定义报错信息)

跳过用例方法名称上加上:@unittest.skip

日志输出:verbosity默认是1,为0最简洁,不输出每个用例执行结果,2输出用例的详细执行结果unittest.main(verbosity=2)

测试用例执行的顺序是按照ASCII码执行

3、unittest测试套件TestSuite

a)用来确定测试用例的顺序,哪个先执行哪个后执行

b)如果一个class中有四个test开头的方法,则加载到suite中时则有四个测试用例

c)由TestLoader加载TestCase到TeastSuite

d)verbosity参数可以控制执行结果的输出,0是简单报告,1是一般报告,2是详细报告。默认1会在每个成功的用例前面有个”.“每个失败的用例前面有个”F“

注意:

testsuite()方法,调用addTest来加载测试用例:类名(‘方法名’)的集合

addTest()添加一个测试用例(addTest(类名(方法名)))

addTests([类名(方法名),类名(方法名)])添加多个测试用例

例如:suite = unittest.TestSuite()       suite.addTest(类名(方法名))    runner=unittest.TextTestRunner(verbosity=2)    runner.run(suite)

4、TestLoader多个文件测试用例批量加载

用例加载器,我们通过把用例都存放在这里,然后再通过Suite进行批量执行,但无法对case进行排序

例如:suite = unittest.TestSuite()  loader=unittest.TestLoader()     suite.addTests(loader.loadTestsFromTestCase(类名))

5、Discover多个文件测试用例批量加载

常见的用例加载

参数:case_dir待执行用例的目录

参数:pattern这是匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本

参数:top_level_dir这个是顶层目录的名称,一般默认等于None就行了

当前文件的路径case_path=os.path.join(os.getcwd,"文件名")

例如:unittest.defaultTestLoader.discover(case_path,pattern="*Case.py",top_level_dir=None)

unittest断言方法的介绍

断言如同在测试用例上,类似于预期结果与实际结果是否一致,如果一致则表示测试通过,Assert断言很好的用于测试结果判断上,更灵活的对预期结果和实际结果进行对比,下面简单的介绍一下unittest的Assert断言
unittest中基础的assert断言包括:

方法 用法 说明
assertEqual(a,?b) a?==?b 用来判断a与b相等,如果相等则测试通过
assertNotEqual(a,?b) a?!=?b 用来判断a与b不相等,如果不相等则测试通过
assertTrue(x) bool(x)?is?True 用来判断条件是否为真,如果条件为真,测试通过(备注:最好使用assertEqual断言方法,代替)
assertFalse(x) bool(x)?is?False 用来判断条件是否为假,如果条件为假,测试通过(备注:最好使用assertNotEqual断言方法,代替)
assertIs(a,?b) a?is?b 用来判断a和b是不是同一个对象,如果是,测试通过
assertIsNot(a,?b) a?is?not?b 用来判断a和b是不是同一个对象,如果不是,测试通过
assertIsNone(x) x?is?None 用来判断a是否空,如果为空,测试通过
assertIsNotNone(x) x?is?not?None 用来判断a是否空,如果不为空,测试通过
assertIn(a,?b) a?in?b 用来判断a字符串是否出现在b字符中,如果出现,测试通过
assertNotIn(a,?b) a?not?in?b 用来判断a字符串是否出现在b字符中,如果不出现,测试通过
assertIsInstance(a,?b) isinstance(a,?b) 用来判断a是否属于某一个数据类型,如果属于,测试通过
assertNotIsInstance(a,?b) not?isinstance(a,?b) 用来判断a是否属于某一个数据类型,如果不属于,测试通过
# -*- coding:utf-8 -*-
import unittest
class MyAssertTest(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        pass

    def setUp(self):
        pass

    def tearDown(self):
        pass
    @classmethod
    def tearDownClass(self):
        pass


    def test_assertNotEqual(self):
        a = 1
        b = 2
        self.assertNotEqual(a,b,msg="测试不通过,a是等于b的") #a不等于b是,测试通过

    def test_assertTrue(self):
        bool=True
        self.assertTrue(bool,msg="测试不通过,bool值为假")

    def test_assertFalse(self):
        bool=False
        self.assertFalse(bool,msg="测试不通过,bool值为真")

    def test_assertIs(self):
        a = [1]
        b = a
        self.assertIs(a,b,msg="测试不通过,a和b不是同一个obj")

    def test_assertNotIs(self):
        a = [1]
        b = [1]
        self.assertIsNot(a,b,msg="测试不通过,a和b是同一个obj")

    def test_assertIsNone(self):
        a = None
        self.assertIsNone(a,msg="测试不通过,a变量不为空")
    def test_assertIsNotNone(self):
        a = 1
        self.assertIsNotNone(a,msg="测试不通过,a变量为空")

    def test_assertIn(self):
        a = "Hello"
        str = 'Hello World'
        self.assertIn(a,str,msg="测试不通过,%s字符串不在%s中"%(a,str))

    def test_assertNotIn(self):
        a = "hello"
        str = 'Hello World'
        self.assertNotIn(a,str,msg="测试不通过,%s字符串在%s中"%(a,str))

    def test_assertIsInstance(self):
        a = 1
        self.assertIsInstance(a,str,msg="测试不通过,%s不是%s类型,%s是%s类型"%(a,str,a,type(a)))
        

    def test_assertIsNotInstance(self):
        a = 1
        self.assertNotIsInstance(a,str,msg="测试不通过")

以上是关于unittest介绍的主要内容,如果未能解决你的问题,请参考以下文章

unittest介绍

unittest断言方法的介绍

unittest单元测试

Python单元测试:unittest使用简介

单元测试框架之unittest

Python单元测试框架unittest之深入学习