pytest
1、安装
pip install pytest
测试安装是否成功
pytest --version
出现版本信息则安装成功
2、pytest的优点
- 1、简单灵活,容易上手,文档丰富;
- 2、支持参数化,可以细粒度地控制要测试的测试用例;
- 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
- 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
- 5、测试用例的skip和xfail处理;
- 6、可以很好的和CI工具结合,例如jenkins
3、使用
注意点
- 测试文件以test_开头(以_test结尾也可以)
- 测试类以Test开头,并且不能带有 init 方法
- 测试函数以test_开头
- 断言使用基本的assert即可
运行方式
1、pytest,自动寻找测试用例
2、pytest ***.py 运行模块内的测试用例
3、pytest somepath 运行指定路径下的测试用例
4、pytest test_mod.py::test_func 运行指定包下的测试用例
控制台参数
-v 用于显示每个测试函数的执行结果
-q 只显示整体测试结果
-s 用于显示测试函数中print()函数输出
-x, --exitfirst, exit instantly on first error or failed test
-h 帮助
例子
test_demo.py
class TestDemmo(object):
def test_1(self):
print("test_1")
def test_2(self):
print("test_2")
4、使用扩展插件生成测试报告
安装
pip install pytest-html
生成报告
pytest --html=report.html
将css样式合并到html
pytest --html=report.html --self-contained-html
2、unittest
unittest 要求单元测试类必须继承 unittest.TestCase,该类中的测试方法需要满足如下要求:
测试方法应该没有返回值。
测试方法不应该有任何参数。
测试方法应以test 开头。
unittest.TestCase 内置了大量 assertXxx 方法来执行断言
unittest.TestCase 包含了 setUp() 和 tearDown() 两个方法,其中 setUp() 方法用于初始化测试;而 tearDown() 方法用于销毁测试。程序会在运行每个测试用例(以 test_ 开头的方法)之前自动执行 setUp() 方法来初始化测试固件,井在每个测试用例(以 test_ 开头的方法)运行完成之后自动执行 tearDown() 方法来销毁测试固件。
如果希望程序在该类的所有测试用例执行之前都用一个方法来初始化测试固件,在该类的所有测试用例执行之后都用一个方法来销毁测试固件,则可通过重写 setUpClass() 和 tearDownClass() 类方法来实现。
执行方法
1、在测试用例中添加
if __name__ == '__main__':
unittest.main()
python -m unittest 测试文件
或python -m unittest
自动寻找
TestSuite
测试包(TestSuite)可以组织多个测试用例,测试包还可以嵌套测试包。在使用测试包组织多个测试用例和测试包之后,程序可以使用测试运行器(TestRunner)来运行该测试包所包含的所有测试用例。
使用addTest或addTests添加测试用例,例如
suite = unittest.TestSuite()
suite.addTests([TestT('test_1'), TestT('test_2')])
import unittest
from BeautifulReport import BeautifulReport as BF
class TestT(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass")
@classmethod
def tearDownClass(cls):
print('tearDownClass')
def test_1(self):
"""
测试相等
:return:
"""
unittest.TestCase.assertEqual(self, 3, 3, msg='测试失败')
def test_2(self):
"""
测试大于
:return:
"""
unittest.TestCase.assertGreater(self, 4, 6, msg='测试失败')
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTests([TestT('test_1'), TestT('test_2')])
runner = unittest.TextTestRunner()
runner.run(suite)
运行结果
生成更炫酷的测试报告
pip install BeautifulReport
import unittest
from BeautifulReport import BeautifulReport as BF
class TestT(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass")
@classmethod
def tearDownClass(cls):
print('tearDownClass')
def test_1(self):
"""
测试相等
:return:
"""
unittest.TestCase.assertEqual(self, 3, 3, msg='测试失败')
def test_2(self):
"""
测试大于
:return:
"""
unittest.TestCase.assertGreater(self, 4, 6, msg='测试失败')
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTests([TestT('test_1'), TestT('test_2')])
# runner = unittest.TextTestRunner()
# runner.run(suite)
run = BF(suites=suite) # 实例化BeautifulReport模块
run.report(filename='report.html', description='这个描述参数是必填的', theme='theme_memories')
# theme可选theme_cyan theme_candy theme_default