python unittest框架有哪些方法_python单元测试框架unittest总结

一、基本用法

unittest是python自带的单元测试框架,主要用于测试用例的组织和执行。

1、基本概念

TestCase:即一个测试用例,包含测试环境准备、测试过程、测试结束后环境销毁等完整的测试流程

TestSuite:多个TestCase的集合构成测试套件

TestRunner:执行测试用例

Test fixture:对测试环境的创建和销毁,比如,在测试之前需要进行登录,测试完成后需要进行退出登录,测试用例更过的专注于核心测试逻辑

2、基本用法

importunittestfrom calculator importCount#测试类需要继承unittest的TestCase类

classTestCount(unittest.TestCase):#重写setUp方法,进行测试前的操作

defsetUp(self):print('测试开始')#重写tearDown方法,进行测试前的操作

deftearDown(self):print('测试结束')#测试核心逻辑

deftest_add(self):

res= Count(1,2).add()

self.assertEqual(res,3,'计算错误!')deftest_add1(self):

res= Count(2,3).add()

self.assertEqual(res,5,'计算错误')if __name__ == '__main__':

unittest.main()

执行结果如下:

ddf6fb00316e01a287daa81b3f6e9cfb.png

说明:

1、每个测试用例都会单独执行setUp、tearDown方法;

2、测试方法以test开头命名;

二、拓展用法

1、构建TestSuite的几种方法:

(1). 通过unittest.TestSuite()类直接构建,或者通过TestSuite实例的addTests、addTest方法构建

importunittestclassUserCase(unittest.TestCase):deftestAddUser(self):print("add a user")deftestDelUser(self):print("delete a user")if __name__ == '__main__':

suite= unittest.TestSuite(map(UserCase,['testAddUser','testDelUser']))

suite2=unittest.TestSuite()

suite2.addTests(map(UserCase,['testAddUser','testDelUser']))

suite3=unittest.TestSuite()

suite3.addTest(UserCase('testAddUser'))

suite3.addTest(UserCase('testDelUser'))

(2). 通过unittest.TestLoader类的discover、loadTestsFromTestCase、loadTestsFromModule、loadTestsFromName、loadTestsFromNames这五个方法去构建

importunittestclassUserCase(unittest.TestCase):deftestAddUser(self):print("add a user")deftestDelUser(self):print("delete a user")if __name__ == '__main__':

module= __import__(__name__)

suite= unittest.TestLoader().discover('.','unittest_user.py') #unittest_user.py

suite2 =unittest.TestLoader().loadTestsFromTestCase(UserCase)

suite3= unittest.TestLoader().loadTestsFromModule(module)

(3). 通过unittest.makeSuite()、unittest.findTestCases()这两个方法去构建

importunittestclassUserCase(unittest.TestCase):deftestAddUser(self):print("add a user")deftestDelUser(self):print("delete a user")if __name__ == '__main__':

module= __import__(__name__)

suite= unittest.makeSuite(UserCase,prefix='test')

suite2= unittest.findTestCases(module,prefix='test')

2、unittest执行顺序

unittest框架默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0~9,A~Z,a~z。所以,TestAdd类会优先于TestBdd类被执 行,test_aaa()方法会优先于test_ccc()被执行,因而它并没有按照用例从 上到下的顺序执行;

对于测试目录与测试文件来说,unittest框架同样是按照这个规则来 加载测试用例。

3、跳过测试和预期失败

在运行测试时,有时需要直接跳过某些测试用例,或者当用例符合 某个条件时跳过测试,又或者直接将测试用例设置为失败。unittest提供了实现这些需求的装饰器:

#无条件的跳过装饰的测试方法或类

unittest.skip(reason)#当条件为真时,跳过装饰的的测试方法或类

unittest.skipIf(condition, reason)#跳过装饰的测试方法或类,除非条件为真

unittest.skipUnless(condition, reason)#不管执行结果是否为失败,同一标记为失败

unittest.expectedFailure()

4、更大范围的fixture

对于测试module、测试类、测试方法都有对应的fixture,完整的示例代码:

from selenium importwebdriverfrom selenium.webdriver.common.by importByimportunittestdefsetUpModule():print('start module')deftearDownModule():print('end module')classTestClass(unittest.TestCase):

@classmethoddefsetUpClass(cls):print('start class')

@classmethoddeftearDownClass(cls):print('end class')defsetUp(self):print('start case')deftearDown(self):print('end case')deftest_add(self):print('case1')deftest_add1(self):print('case2')if __name__ == '__main__':

unittest.main()

执行结果如下:

bbd86085abb2b5a9feefbad89135e314.png

可以看出模块和类的fixture只执行了一次,而对于测试方法的fixture,有多少个测试方法就执行了几次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值