python unittest模块简单使用
1、fixture-TestCase2、TestSuite-TextTestRunner3、TestLoader4、断言5、参数化-parameterized6、跳过-skip7、生成HTML报告
1、 fixture-TestCase
定义的类,必须继承TestCasefixture属于执行测试函数的前面以及之后处理的代码块
类级别函数级别
import unittest
class Test_01(unittest
.TestCase
):
@
classmethod
def setUpClass(cls
):
"""
类级别
"""
print("类开始")
def setUp(self
):
"""
函数级别
"""
print("函数开始")
def test_01(self
):
print("我是测试test_01模块中的:test_01")
def test_02(self
):
print("我是测试test_01模块中的:test_02")
def tearDown(self
):
"""
函数级别
"""
print("函数结束")
@
classmethod
def tearDownClass(cls
):
"""
类级别
"""
print("类结束")
if __name__
== '__main__':
unittest
.main
()
运行结果:
类开始
..
函数开始
我是测试test_01模块中的:test_01
函数结束
----------------------------------------------------------------------
函数开始
Ran
2 tests
in 0.000s
OK
我是测试test_01模块中的:test_02
函数结束
类结束
2、TestSuite-TextTestRunner
TestSuite(测试套件)用于添加多条测试用例-测试类可以存在不同的文件
加载指定类中的函数加载类中的所有test开头的函数 TextTestRunner 用于执行测试用例和测试套件
import unittest
class T1(unittest
.TestCase
):
def test_01(self
):
print("我是T1类中的test_01")
def test_02(self
):
print("我是T1类中的test_02")
class T2(unittest
.TestCase
):
def test_01(self
):
print("我是T2类中的test_01")
if __name__
== '__main__':
suite
= unittest
.TestSuite
()
suite
.addTest
(T2
("test_01"))
suite
.addTest
(unittest
.makeSuite
(T1
))
runner
= unittest
.TextTestRunner
()
runner
.run
(suite
)
运行结果:
我是T2类中的test_01
...
我是T1类中的test_01
我是T1类中的test_02
----------------------------------------------------------------------
Ran
3 tests
in 0.000s
OK
3、TestLoader
TestLoader 用来添加测试用例,满足条件的用例
scripts/test_01.py
import unittest
class T1(unittest
.TestCase
):
def test_01(self
):
print("我是T1类中的test_01")
def test_02(self
):
print("我是T1类中的test_02")
class T2(unittest
.TestCase
):
def test_01(self
):
print("我是T2类中的test_01")
main.py
import unittest
if __name__
== '__main__':
suite
= unittest
.defaultTestLoader
.discover
(start_dir
="./scripts", pattern
="test*.py")
runner
= unittest
.TextTestRunner
()
runner
.run
(suite
)
运行结果:
我是T1类中的test_01
我是T1类中的test_02
我是T2类中的test_01
...
----------------------------------------------------------------------
Ran
3 tests
in 0.000s
OK
4、 断言
import unittest
class T1(unittest
.TestCase
):
def test_01(self
):
self
.assertTrue
(True, msg
="不是True")
self
.assertFalse
(False, msg
="不是False")
self
.assertEqual
(1, 1, msg
="两个比较数不相等")
self
.assertNotEqual
(1, 2, msg
="两个比较数相等")
self
.assertIsNone
(None, msg
="不为None")
self
.assertIsNotNone
("123", msg
="为None")
self
.assertIn
("ab", "dafjabc", msg
="在字符串中")
self
.assertNotIn
("abcd", "dafjabc", msg
="不字符串中")
if __name__
== '__main__':
unittest
.main
()
5、参数化-parameterized
安装模块:pip install parameterized使用
from parameterized
import parameterized
import unittest
class T1(unittest
.TestCase
):
def setUp(self
):
print("函数开始")
@parameterized
.expand
([(1, 2, 3), (11, 22, 33), (111, 222, 333)])
def test(self
, a
, b
, c
):
print(a
, b
, c
)
if __name__
== '__main__':
unittest
.main
()
结果
函数开始
1 2 3
函数开始
11 22 33
函数开始
111 222 333
...
----------------------------------------------------------------------
Ran
3 tests
in 0.000s
OK
6、 跳过-skip
import unittest
class T1(unittest
.TestCase
):
temp
= 10
def test(self
):
print("test--->")
@unittest
.skip
("暂时不执行该函数")
def test1(self
):
print("test1--->")
@unittest
.skipIf
(temp
> 2, "temp大于2时跳过")
def test2(self
):
print("test2--->")
@unittest
.skipUnless
(temp
> 2, "temp小于2时跳过")
def test3(self
):
print("test3--->")
if __name__
== '__main__':
unittest
.main
()
运行结果:
.ss
.
test
--->
----------------------------------------------------------------------
Ran
4 tests
in 0.000s
test3
--->
OK
(skipped
=2)
7、 生成HTML报告
报告下载地址-使用说明 复制BeautifulReport文件夹到 python安装目录的/site-packages/scripts/test_01.py
import unittest
class T1(unittest
.TestCase
):
def test_01(self
):
print("我是T1类中的test_01")
def test_02(self
):
print("我是T1类中的test_02")
class T2(unittest
.TestCase
):
def test_01(self
):
print("我是T2类中的test_01")
1、初次使用 新建report文件夹
import unittest
from BeautifulReport
import BeautifulReport
if __name__
== '__main__':
suite
= unittest
.defaultTestLoader
.discover
(start_dir
="./scripts",pattern
="test*.py")
result
= BeautifulReport
(suite
)
result
.report
(filename
="测试报告",description
="测试deafult报告",log_path
='report')
运行结果:
2、添加用例描述-报错的信息点击用例展开即可查看
import unittest
import time
from BeautifulReport
import BeautifulReport
from selenium
import webdriver
class T3(unittest
.TestCase
):
def test_01(self
):
"""
我是test_01函数
"""
print("我是T3中的test_01函数")
def test_02(self
):
"""
我是test_02函数
"""
print("我是T3中的test_02函数")
self
.assertEqual
(1,2)
if __name__
== '__main__':
suite
= unittest
.TestSuite
()
suite
.addTest
(T3
("test_01"))
suite
.addTest
(T3
("test_02"))
result
= BeautifulReport
(suite
)
result
.report
(filename
="测试报告",description
="测试deafult报告",log_path
='report')
运行结果:
3、断言失败-自动截图(前提实现save_img函数)
在当前目录创建img目录存储图片当前目录report存储报告
import unittest
from selenium
import webdriver
from BeautifulReport
import BeautifulReport
class T3(unittest
.TestCase
):
""" 测试T3"""
def save_img(self
, img_name
):
"""
保存图片
"""
self
.driver
.get_screenshot_as_file
('{}/{}.png'.format("./img", img_name
))
@BeautifulReport
.add_test_img
('百度首页')
def test_01(self
):
"""
打开首页, 截图
"""
self
.driver
= webdriver
.Chrome
()
self
.driver
.get
("http://www.baidu.com")
self
.assertEqual
(1,2)
self
.driver
.quit
()
if __name__
== '__main__':
suite
= unittest
.TestSuite
()
suite
.addTest
(T3
("test_01"))
result
= BeautifulReport
(suite
)
result
.report
(filename
="测试报告", description
="测试deafult报告", log_path
='report')
4、没有断言-需要添加图片-可以在函数中调用save_img
小Bug,如果只添加一个图片,则会发现测试报告中没有图片(所以在一个测试用例中添加两个图片以上)
import unittest
from selenium
import webdriver
from BeautifulReport
import BeautifulReport
class T3(unittest
.TestCase
):
def save_img(self
, img_name
):
"""
保存图片
"""
self
.driver
.get_screenshot_as_file
('{}/{}.png'.format("./img", img_name
))
@BeautifulReport
.add_test_img
('百度首页', "百度首页点击新闻按钮")
def test_01(self
):
"""
打开首页截图,点击新闻链接截图
"""
self
.driver
= webdriver
.Chrome
()
self
.driver
.get
("http://www.baidu.com")
self
.save_img
('百度首页')
self
.driver
.find_element_by_xpath
("//*[@id='u1']/a[1]")
self
.save_img
('百度首页点击新闻按钮')
print('跳转与保存截图完成')
self
.driver
.quit
()
if __name__
== '__main__':
suite
= unittest
.TestSuite
()
suite
.addTest
(T3
("test_01"))
result
= BeautifulReport
(suite
)
result
.report
(filename
="测试报告", description
="测试deafult报告", log_path
='report')