简述unittest框架
unittest单元测试框架不仅可以适用于单元测试,还可以适用web UI 和 接口 API 自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
一、unittest结构概览
unittest中最核心的四个概念是:test fixture、test case, test suite, test runner/report
1、test fixture
① setup():每个测试函数运行前运行
② teardown():每个测试函数运行完后执行
③ setUpClass():必须使用@classmethod 装饰器,所有test运行前运行一次
④ tearDownClass():必须使用@classmethod装饰器,所有test运行完后运行一次
2、Testcase
a、编写自己的测试用例必须继承TestCase类
import unittest class TestCase(unittest.TestCase)
b、编写测试case:
def test_001_case1(self): print("case1") def test_002_case1(self): print("case2")
注:
1、测试用例的名字必须以test开头,不以test命名的测试用例不会被加载运行(除在test命名的测试用例中调用外)
2、测试用例的执行顺序可以自定义,如果以数字命名测试用例(如:test_001_case1、test_002_case1),则按照数字顺序执行,如果不以数字命名则按照test后的英文单词的字母顺序作为执行顺序
c、选择性的执行测试case
"""@unittest.skip(reason): skip(reason)装饰器:无条件跳过装饰的测试,并说明跳过测试的原因。 @unittest.skipIf(reason): skipIf(condition,reason)装饰器:条件为真时,跳过装饰的测试,并说明跳过测试的原因。 @unittest.skipUnless(reason): skipUnless(condition,reason)装饰器:条件为假时,跳过装饰的测试,并说明跳过测试的原因。 @unittest.expectedFailure(): expectedFailure()测试标记为失败。"""
d、测试case常用的断言
""" assertEqual(a,b,[msg=‘测试失败时打印的信息‘]):断言a和b是否相等,相等则测试用例通过。 assertNotEqual(a,b,[msg=‘测试失败时打印的信息‘]):断言a和b是否相等,不相等则测试用例通过。 assertTrue(x,[msg=‘测试失败时打印的信息‘]):断言x是否True,是True则测试用例通过。 assertFalse(x,[msg=‘测试失败时打印的信息‘]):断言x是否False,是False则测试用例通过。 assertIs(a,b,[msg=‘测试失败时打印的信息‘]):断言a是否是b,是则测试用例通过。 assertNotIs(a,b,[msg=‘测试失败时打印的信息‘]):断言a是否是b,不是则测试用例通过。 assertIsNone(x,[msg=‘测试失败时打印的信息‘]):断言x是否None,是None则测试用例通过。 assertIsNotNone(x,[msg=‘测试失败时打印的信息‘]):断言x是否None,不是None则测试用例通过。 assertIn(a,b,[msg=‘测试失败时打印的信息‘]):断言a是否在b中,在b中则测试用例通过。 assertNotIn(a,b,[msg=‘测试失败时打印的信息‘]):断言a是否在b中,不在b中则测试用例通过。 assertIsInstance(a,b,[msg=‘测试失败时打印的信息‘]):断言a是是b的一个实例,是则测试用例通过。 assertNotIsInstance(a,b,[msg=‘测试失败时打印的信息‘]):断言a是是b的一个实例,不是则测试用例通过。 """
E、测试case参数化操作
测试case 默认是不支持传参操作的,因此想要达到传参效果,需要用到一个第三方模块进行参数化操作。
1、下载
pip3 install nose_parameterized
2、示例:
import unittest from nose_parameterized import parameterized class Test(unittest.TestCase): @parameterized.expand( [ [‘xiaogang‘,‘123456‘,True], #可以是list,也可以是元祖 [‘‘,‘123456‘,True], [‘xiaogang‘,‘‘,False], [‘adgadg‘,‘123456‘,False] ] ) def test_login(self,args1,args2,args3): #这里的参数对应上述列表里的元素,运行的时候会遍历上述列表里的二维列表直到所有元素都调用运行完成 print(args1,args2)
3、Text Suite
原文地址:https://www.cnblogs.com/Keep-Ambition/p/8976583.html
时间: 2024-10-02 10:32:12