unittest
一、安装
pip install unittest
二、用法
1、简单的demo
import unittest
测试用例 - testcase
写法:建一个类
class 类名(unittest.Test):
每条测试用例都会执行setUp,tearDown
def setUp(self):
#初始化 --- 开始
def tearDown(self):
结束测试工作
#测试用例用test命名
def test01(self):
#测试用例-1
def test02(self):
#测试用例-2
#启动
if __name__ = '__main__':
#直接运行
unittest.main()
2、套件
测试套件:
1)、把多个测试用例集合到一起
2)、测试套件也可以有多个,可组合到一起形成更多的测试用例集合
通过addTest()的方法
定义套件:unittest.TestSuite()
suite = unittest.TestSuite()
#第一种方法:addTest(),将类中的测试用例添加到测试套件中,一个一个加
suite = addTest(类名(测试用例1))
suite = addTest(类名(测试用例2))
#批量执行
#tests = [类名(测试用例),类名(测试用例2),类名(测试用例3))]
#suite.addTests(tests)
#执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
#第二种方法:makeSuite(),搜索指定ClassName内test开头的方法并添加到测试套件中
suite.addTest(unittest.makeSuite(ClassName))
通过TestLoader()方法组织TestSuite
说明:
用来加载TestCase到TestSuite中,即加载满足条件的测试用例,并把测试用例封装成测试套件。
使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下指定开头的.py文件 ,
并将查找到的测试用例组装到测试套件;
用法:
suite = unittest.TestLoader().discover(test_dir, pattern='test*.py')
自动搜索指定目录下指定开头的.py文件,并将查找到的测试用例组装到测试套件
test_dir: 为指定的测试用例的目录
pattern:为查找的.py文件的格式,默认为'test*.py'
也可以使用unittest.defaultTestLoader 代替 unittest.TestLoader()
运行:
runner = unittest.TextTestRunner()
runner.run(suite)
案例
import unittest
#调用方法
suite = unittest.TestLoader().discover('../case')
#扩展 指定test开头的模块
suit = unittest.TestLoader().discover('../case',pattern ='test*.py')
defaultTestLoader代替TestLoader
suite = unittest.defaultTestLoader.discover('../case',test*.py)
#执行 方法:TextTestRunner
unittest.TextTestRunner().run(suite)
TestLoader和TestSuite区别
1. TestSuite需要手动添加测试用例(可以添加测试类,也可以添加测试类中某个测试方法)
2. TestLoader搜索指定目录下指定开头.py文件,并添加测试类中的所有的测试方法,不能指定添加测试方法;
三、断言
#unitteat中断言的复杂使用:assert
import requests
import unittest
data = {
'username':'11111',
'passwoord':'222222'
}
#1、定义一个类,继承unittest.TestCase
class MyTestCase_02(unittest.TestCase):
#3、初始化-前置条件
def setUp(self):
print('case开始执行')
#3、结束 每一个case执行,都会执行setUp和tearDown
def tearDown(self):
print('case结束执行')
#4、引入静态类,执行case只执行一次
#加入类方法
@classmethod
def setUpClass(cls):
print('case类开始执行')
@classmethod
def tearDownClass(cls):
print('case类执行结束')
#2、执行case
def test_01(self):
print("case01")
data1={
'username':'11111111'
}
#断言:assert;
#assertDictEqual:判断对象是否相等
self.assertDictEqual(data1,data,msg='不相等')
def test_02(self):
print("case02")
data1 = {
'username': '11111',
'passwoord': '222222'
}
self.assertDictEqual(data1, data, msg='相等')
def test_03(self):
print("case03")
flag = True
#断言判断是否为False
self.assertFalse(flag,msg='不为true')
def test_04(self):
print("case03")
flag = '11111'
flag1 = '22222'
#断言判断字符串是否相等
self.assertEqual(flag, flag1,msg='不相等')
def test_05(self):
print("case03")
flag = 'abcjgkjorogrogporiog'
flag1 = 'piouyytytyt'
#断言判断flag1是否在flag中
self.assertIn(flag1, flag, msg='不包含')
#运行:unittest.main()
if __name__ == '__main__':
unittest.main()