UnitTest是python自带的一个单元测试框架,用它来做单元测试。
对于测试来说,unittest框架的作用是自动化脚本(用例代码)执行框架,使用unittest框架来管理运行多个测试用例的。
1. 能够组织多个用例去执行
2.提供丰富的断言方法(让程序代替人工自动的判断预期结果和实际结果是否相符)
3. 能够生成测试报告
TestCase是unittest框架的组成部分,不是手工和自动化所说的用例
主要作用:每个TestCase(测试用例)都是一个代码文件,在这个代码文件中来书写真正的用例代码
"""
代码的目的:学习TestCase(测试用例)模块的书写方法
"""
# 1.导入unittest包
import unittest
# 2.自定义的测试类,只要继承unittest模块中的TestCase类即可
class TestDemo(unittest.TestCase):
# 书写测试方法,即用例代码
# 书写要修,测试方法必须以test_ 开头(本质是以test开头)
def test_method1(self):
print('测试方法 1')
def test_method2(self):
print('测试方法 2')
# 4 执行用例(方法)
# 4.1 将光标放在 类名 的后面运行,会执行类中的所有的测试方法
# 4.2 将光标放在 方法名 的后面运行,只执行当前的方法
TestSuite(测试套件),用来组装(打包)、管理多个TestCase(测试用例的)
"""
代码的目的:学习TestSuite(套件)模块的书写方法
"""
# 1. 导入 unittest包
import unittest
# 2. 实例化testsuite对象
from hm_08_testcase import TestDemo
from hm_09_testcase import TestDemo1
suite = unittest.TestSuite()
# 3. 使用套件对象添加用例方法
# 方法一:套件对象.addTest(测试类名('方法名'))
suite.addTest(TestDemo('test_method1'))
suite.addTest(TestDemo('test_method2'))
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
# 方法二 将一个测试类中的所有方法进行添加
# 套件对象.addTest(unittest.makeSuite(测试类名))
suite.addTest(unittest.makeSuite(TestDemo))
# 4.实例化运行对象
runner = unittest.TextTestRunner()
# 5. 使用运行对象去执行套件对象 运行对象.run(套件对象)
runner.run(suite)
TestRunner(测试执行,测试运行),用来执行TestSuite(测试套件)的
TestLoader(测试加速),功能是对TestSuite(测试套件)功能的补充,用来组装(打包)、管理多个TestCase(测试用例的)
"""
TestLoader 的使用
"""
# 1. 导包
import unittest
# 2. 实例化加载对象并添加实例
# unittest.TestLoader().discover("用例所在的路径", "用例的代码文件名")
# 用例的代码文件名 支持通配符
suite = unittest.TestLoader().discover("./case", "*")
# 3. 实例化运行对象,并执行
unittest.TextTestRunner().run(suite)
Fixture(测试夹具),书写在TestCase代码中的,是一个代码结构,
5.1 方法级别
可以在每个方法执行前后都会执行的内容
# 方法执行之前
def setUp(self):
每个测试方法执行之前都会执行
# 方法执行之后
def tearDown(self):
每个测试方法执行之后都会执行
5.2 类级别
可以在每个测试类中所有方法执行前后都会执行的内容,在整个类中,执行前后各一次
类级别的Fixture方法,是一个类方法
#类中所有方法之前
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(clas):
pass
import unittest
class TestLogin(unittest.TestCase):
def setUp(self):
print("输入网址......")
def tearDown(self):
print("关闭网页")
@classmethod
def setUpClass(cls):
print("打开浏览器")
@classmethod
def tearDownClass(cls):
print("关闭浏览器")
def test_login(self):
print("输入正确的账户密码")
def test_login_error(self):
print("输入错误的账户密码")
断言的结果有两种
断言方法 | 断言描述 | 优先级 |
assertTrue(expr,msg=None) | 验证expr是true,如果是false,则为fail | |
assertFalse(expr,msg=None) | 验证expr是flase,如果为true,则fail | |
assertEqual(expected,actual,msg=None) | 验证expected==actual,不等则fail | 重点 |
assertIn(member,container,msg=None) | 验证是否member in container | 重点 |