一、unittest简介
unittest是Python中常用的单元测试框架,与Java中的Junit单元测试框架类似。
二、示例程序
1)导入unittest模块
import unittest
2)使用help()函数查看源码中的示例程序
help(unittest)
Simple usage:
import unittest
class IntegerArithmeticTestCase(unittest.TestCase):
def testAdd(self): # test method names begin with 'test'
self.assertEqual((1 + 2), 3)
self.assertEqual(0 + 1, 1)
def testMultiply(self):
self.assertEqual((0 * 10), 0)
self.assertEqual((5 * 8), 40)
if __name__ == '__main__':
unittest.main()
3)示例程序解析
- 第一行是导入unittest模块。
- class这一行是定义了一个测试类,并继承unittest.TestCase类。
- 接下来是定义了两个测试方法:testAdd和testMultiply。这里的注释很重要:测试方法的名称要以test开头。
- 方法中是断言assert,断言其实就是拿实际结果和期望结果去对比。这里使用的是assertEqual断言方法,用来判断两个元素是否相等,方法中可以写多个断言。
- unittest.main()是运行主函数,运行后会看到如下测试结果:
三、简单用法
上面的示例程序中是加法和乘法,我们可以添加测试方法来测试一下减法和除法。
import unittest
class Demo(unittest.TestCase):
def testMinus(self):
self.assertEqual((5 - 2), 3)
def testDiv(self):
self.assertEqual((5 / 2), 2)
if __name__ == '__main__':
unittest.main()
运行代码,第二个测试方法是失败的,失败原因:AssertionError: 2.5 != 2。
四、前置和后置
1)setUp:在写测试方法时,每次操作都需要先打开浏览器输入对应网址,这些操作就是执行测试方法的前置条件。
2)tearDown:测试方法执行完毕后,为了不影响下一个测试方法的执行,一般需要有数据还原的过程,这就是执行测试方法的后置条件。
3)前置条件和后置条件都是非必要,如果没有可以写pass。
4)很多人执行完测试方法后,不去做数据还原,导致下一个测试方法执行失败,这就是不喜欢擦屁股的坏习惯。
import unittest
class Demo(unittest.TestCase):
def setUp(self):
print('setUp')
def tearDown(self):
print('tearDown')
def testMinus(self):
print('testMinus')
self.assertEqual((5 - 2), 3)
if __name__ == '__main__':
unittest.main()
五、测试类的运行方式
import unittest
class Test(unittest.TestCase):
def test01(self):
print('test01 start')
self.assertEqual(1, 1)
print('test01 end')
def test02(self):
print('test02 start')
self.assertEqual(1, 2)
print('test02 end')
if __name__ == "__main__":
print('测试开始~')
unittest.main()
注:当测试方法中断言失败,后续的代码将不会执行。test02方法断言会失败,后续的打印语句将不会执行。
1)右键,选择 Run 'Unittests in .... ' 执行
这种方式是以pycharm的unittest运行模式执行测试类,不会执行 if 条件下的代码,将 if 代码块去掉,也能执行所有的测试方法。
2)添加配置,以普通.py文件执行
3)添加配置,以pycharm的unittest运行模式执行
六、案例演示
以打开百度搜索页为例,判断title是否完全等于期望结果。
from selenium import webdriver
import unittest
import time
class Demo(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get('https://www.baidu.com')
time.sleep(3)
def tearDown(self):
time.sleep(1)
self.driver.quit()
def testTitle(self):
title = self.driver.title
print(title)
self.assertEqual(title, '百度一下')
if __name__ == '__main__':
unittest.main()