Unittest核心要素:
- 测试用例 TestCase
- 测试套件 TestSuite
- 测试执行 TestRunner
- 批量执行测试用例 TestLoader
使用Unittest编写用例,必须遵守以下规则:
-
测试文件必须先
import unittest
-
测试类必须继承
unittest.TestCase
-
测试方法必须以
test_
开头 -
测试类必须要有
unittest.main()
方法
Unittest用例前置后置:
- Unittest提供了setUp/tearDown方法,每个用例运行前、结束后运行一次。
- Unittest提供了setUpClass和tearDownClass类方法,使用
@classmethod
注释,用例执行前、结束后,只运行一次。
断言
Unittest提供了断言的方式判断用例有没有成功,包括assertEqual(a, b)
、assertIn(a, b)
、assertTrue(x)
、assertFalse(x)
等方法。
实例1
import unittest
from Unni_study.mathfunc import add, minus, multi, divide
class TestMathfunc(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print('class')
@classmethod
def tearDownClass(cls) -> None:
print('tclass')
# 每个测试方法执行之前都会执行(初始化)
def setUp(self) -> None:
print("before")
# 每个测试方法执行之后都会执行(释放)
def tearDown(self) -> None:
print("after")
# 测试方法必须以“test_”开头
def test_add(self):
self.assertEqual(3, add(1, 2))
# self.assertEqual(3, add(2,2))
def test_minus(self):
self.assertEqual(-1, minus(1, 2))
# self.assertEqual(2, minus(2, 2))
def test_multi(self):
# self.skipTest("multi")
self.assertEqual(2, multi(1, 2))
def test_divide(self):
# self.skipTest("跳过")
self.assertEqual(2, divide(2, 1))
self.assertEqual(2, divide(5, 2))
# 测试类必须有unittest.main()方法
if __name__ == '_main_':
unittest.main()
实例2,结合WebDriver
import unittest
import time
from selenium import webdriver
from selenium.webdriver.common import by
class forTest(unittest.TestCase):
# 测试用例初始化
# 打开谷歌浏览器,进入网页
def setUp(self) -> None:
self.dr = webdriver.Chrome()
self.dr.get('https://www.baidu.com/')
self.dr.maximize_window()
# 测试用例释放
# 等待3s,关闭浏览器
def tearDown(self) -> None:
time.sleep(3)
self.dr.quit()
def test_1(self):
pass
self.dr.find_element(by.By.XPATH, "//*[@id = 'kw']").send_keys('战狼')
self.dr.find_element(by.By.XPATH, "//*[@id = 'su']").click()
if __name__ == '__main__':
unittest.main()