1. TestCase(测试用例)
步骤:
1. 导包 import unittest
2. 新建测试类并继承 unittest.TestCase
3. 测试方法必须以test字母开头
运行:
1. 运行测试类所有的测试方法,光标定位到类当前行右键运行
2. 运行单个测试方法:光标放到测试方法当前行。
测试脚本:
# 导包
import unittest
# 定义乘法函数
def sub(x, y):
return x*y
# 定义测试类 并 继承
class Test01(unittest.TestCase):
# 定义测试方法
def test_sub01(self):
result = sub(1, 2)
print("test1:", result)
def test_sub02(self):
result = sub(3, 2)
print("test1:",result)
print("__name__内置变量获取当前运行的模块名称:", __name__)
def test_sub03(self):
result = sub(5, 2)
print("test1:", result)
if __name__ == "__main__":
unittest.main()
运行效果:
2.TestSuite(测试套件),TextTestRunner(以文本的形式运行测试用例)
步骤:
1. 导包
2. 获取测试套件对象 suite = unittest.TestSuite()
3. 调用addTest()方法 添加测试用例
添加测试用例方法:
1. suite.addTest(类名("方法名称")) # 添加指定类中指定的测试方法
2. suite.addTest(unittest.makeSuite(类名)) # 添加指定类中所有已test开头的方法
TextTestRunner:
说明:执行测试套件方法
步骤:
1. 导包
2. 实例化后去执行套件对象 runner = unittest.TextTestRunner()
3. 调用run方法去执行 runner.run(suite)
测试脚本:
test09.py
import unittest
class Test02(unittest.TestCase):
def test01(self):
print("test01执行")
def test02(self):
print("test02执行")
def test03(self):
print("test03执行")
def test04(self):
print("test04执行")
if __name__ == "__main__":
print("__name__的值:", __name__)
run_main.py
import unittest
from scripts.test09 import Test02
# 实例化 suite
suite = unittest.TestSuite()
# 调用添加方法
suite.addTest(Test02("test01"))
# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)
测试结果:
3.TestLoader(批量执行测试用例-搜索指定文件夹内指定字母开头的模块)
TestLoader:
说明:
1. 将符合条件的测试方法添加到测试套件中
2. 搜索指定目录文件下指定字母开头的模块文件下test开始的方法,并将这些方法添加到测试套件中,最后返回测试套件
操作:
1. 导包
import unittest
2. 调用TestLoader()
写法1. suite = unittest.TestLoader().discover("指定搜索的目录文件","指定字母开头模块文件")
写法2. suite = unittest.defaultTestLoader.discover("指定搜索的目录文件","指定字母开头模块文件") 【推荐】
注意:如果使用写法1,TestLoader()必须有括号。
3. 执行测试套件
unittest.TextTestRunner().run(suite)
测试脚本:
# 导包
import unittest
# 调用方法
suite = unittest.TestLoader().discover(r"D:\Learn\autoTest\rescource\cases")
# 执行 套件 方法 TextTestRunner
unittest.TextTestRunner().run(suite)
测试效果:
TestSuite与TestLoader区别:
共同点:都是测试套件
不同点:实现方式不同
TestSuite: 要么添加指定的测试类中所有test开头的方法,要么添加指定测试类中指定某个test开头的方法
TestLoader: 搜索指定目录下指定字母开头的模块文件中以test字母开头的方法并将这些方法添加到测试套件中,最后返回测试套件
4.Fixture(固定装置(两个固定的函数,一个初始化时使用,一个结束时使用))
说明:装置函数(setUp、tearDown)
级别:
1). 函数级别 def setUp() / def tearDown()
特性:几个测试函数,执行几次。每个测试函数执行之前都会执行 setUp,执行之后都会执行tearDwon
2). 类级别 def setUpClass() / def tearDownClass()
特性:测试类运行之前运行一次setUpClass 类运行之后运行一次tearDownClass
注意:类方法必须使用 @classmethod修饰
3). 模块级别:def setUpModule() / def tearDownModule()
特殊:模块运行之前执行一次setUpModule ,运行之后运行一次tearDownModule
提示:
无论使用函数级别还是类级别,最后常用场景为:
初始化:
1. 获取浏览器实例化对象
2. 最大化浏览器
3. 隐式等待
结束:
关闭浏览器驱动对象
测试脚本:
import unittest
def setUpModule():
print("SetUpModule")
def tearDownModule():
print("tearDownModule")
class Test03(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass被执行")
@classmethod
def tearDownClass(cls):
print("tearDownClass被执行")
def setUp(self):
print("setUp被执行")
def tearDown(self):
print("tearDown被执行")
def test01(self):
print("test01被执行")
def test02(self):
print("test02被执行")
class Test04(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass被执行")
@classmethod
def tearDownClass(cls):
print("tearDownClass被执行")
def setUp(self):
print("setUp被执行")
def tearDown(self):
print("tearDown被执行")
def test01(self):
print("test01被执行")
def test02(self):
print("test02被执行")
测试效果: