目录
unittest框架
-
通过unittest框架创建测试
-
必须继承unittest.TestCase类
-
可以定义setUp和tearDown方法进行初始化,也可以使用setUpClass和tearDownClass进行初始化
-
所有测试方法必须以test开头。测试方法会在运行时自动被调用。
-
可以使用pycharm自带的unittest框架运行,也可以以普通方式运行。
import unittest
class Demo(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print('setupclass方法 第一个调用')
@classmethod
def tearDownClass(cls) -> None:
print('tearDownClass方法 最后一个调用')
def setUp(self) -> None:
print('初始化方法')
def tearDown(self) -> None:
print('结束方法')
def test_func1(self):
print('第一个测试方法')
def test_func2(self):
print('第二个测试方法')
-
setUp:每个测试方法执行之前执行一次
-
tearDown:每个测试方法执行之后执行一次
-
setUpClass:整个测试类执行之前执行一次
-
tearDownClass:整个测试类执行之后执行一次
测试方法的执行顺序是按方法名来排的
断言操作
通过unittest框架添加断言
常见断言
-
assertIn
-
assertNotln
-
assertEqual
-
assertNotEqual
-
assertTrue
-
assertFalse
def test_func1(self):
print('第一个测试方法')
self.assertEqual(1, 2)
print('这句话不会被执行')
def test_func2(self):
print('第二个测试方法')
self.assertNotEqual(1, 2)
断言失败时失败的方法不会继续往下执行
自动化用例管理TestLoader类
TestLoader类常见方法
-
loadTestsFromTestCase():从定义好的测试类里加载测试方法
-
loadTestsFromModule():从python模块(文件)里加载测试方法
-
loadTestsFromNames():加载指定名称的测试方法
-
discover():从路径中加载测试方法
loadTestsFromTestCase
from web自动化.unittest_demo import Demo
import unittest
st = unittest.defaultTestLoader.loadTestsFromTestCase(Demo) # 从测试类 加载测试方法
suit = unittest.TestSuite([st]) # 将测试方法写入测试集
unittest.TextTestRunner().run(suit)
从指定测试类中加载测试方法
loadTestsFromModule
import unittest
from web自动化 import unittest_demo
from web自动化 import unittest_demo2
mods = [unittest_demo, unittest_demo2]
modules = []
for mod in mods: # 循环 加载测试模块 添加进列表
a = unittest.defaultTestLoader.loadTestsFromModule(mod)
modules.append(a)
tests = unittest.TestSuite(modules) # 等同于[a1, a2]
unittest.TextTestRunner().run(tests)
从指定的模块(python文件)中加载测试方法
loadTestsFromNames
import unittest
from web自动化 import unittest_demo
def getfullName(names):
items = []
for name in names:
if 'func2' in name: # 过滤出包含func2的测试方法名 在(冒烟测试时只测试带有 smoke 的方法)有用
items.append('unittest_demo.Demo.' + name)
return items
case_name = unittest.defaultTestLoader.getTestCaseNames(unittest_demo.Demo) # 获取测试类的所有测试方法的名字
item_names = getfullName(case_name) # 对所有测试方法名进行拼接 unittest_demo.Demo.funcname
st = unittest.defaultTestLoader.loadTestsFromNames(item_names) # 使用方法名 加载测试方法 ['unittest_demo.Demo.funcname']
suite = unittest.TestSuite([st])
unittest.TextTestRunner().run(st)
loadTestsFromNames用于从测试类中挑选出需要运行的测试方法
discover
import unittest
base_url = 'cases' # 与当前运行文件在同一路径下 所有测试用例 分类保存在此文件夹下
test_case = unittest.defaultTestLoader.discover(base_url + '/mms/', pattern='*.py')
print(test_case)
rs = unittest.TestSuite(test_case)
unittest.TextTestRunner().run(rs)
discover用于从指定路径下加载需要运行的测试方法