主要做
- 测试发现:
- 测试执行:将测试用例按照一定的顺序和条件执行,并生成结果
- 测试判断:通过断言判断预期结果和实际结果差异
- 测试报告:统计测试进度,耗时,通过率,生产测试报告
不同点
一. 测试用例编写规则
unittest:
- 导入import unittest
- 继承unittest.TestCase
- 测试用例必须以test_开头
import unittest
class TestApi(unittest.TestCase):
def test_01_login(self):
print('testcase1')
if __name__ == '__main__':
unittest.main()
pytest:
- 测试文件必须以test_开头或者_test结尾
- 测试的类名必须以Test开头
- 测试方法必须以test_开头
import pytest
class TestApi:
def test_01_login(self):
print('testcase1')
if __name__ == '__main__':
pytest.main()
结论:unittest需要依赖于unittest.TestCase这个类,而pytest不需要依赖任何类,pytest更加解耦合
二. 执行方式
unittest和pytest都可以通过main()和命令行两种运行方式来运行,pytest还可以通过第三种方式:通过pytest.ini文件来运行
三. 断言
unittest: 提供assertEqual, assertIn, assertTrue等30几种断言
import unittest
class TestApi(unittest.TestCase):
def test_01_login(self):
print('testcase1')
self.assertEqual('1', '1')
if __name__ == '__main__':
unittest.main()
pytest: 直接使用python自带的assert
import pytest
class TestApi:
def test_01_login(self):
print('testcase1')
assert 1 == 1
if __name__ == '__main__':
pytest.main()
四. 失败重跑
unittest: 不支持
pytest: 通过pytest-rerunfailures pytest --reruns 2
test_1.py::TestApi::test_01_login testcase1
RERUN
test_1.py::TestApi::test_01_login testcase1
RERUN
test_1.py::TestApi::test_01_login testcase1
FAILED
pytest有强大的插件支持,100多种
五. 参数化(数据驱动)
unittest:依赖于ddt库
pytest: 使用自带的@pytest.mark.parametrize装饰器实现
六. 测试用例分类执行
unittest: 用TestSuite()指定用例,或者用TestLoader.discover去发现用例
if __name__ == '__main__':
suite = unittest.defaultTestLoader.discover(start_dir=os.getcwd(), pattern='test_*.py')
unittest.main(defaultTest="suite")
pytest: 通过@pytest.mark.smoke标记
import pytest
if __name__ == '__main__':
pytest.main(['-m', 'smoke'])
总结:pytest可以执行不同文件中不同的用例
七. 测试报告
unittest: 通过HTMLTestRunner.py生成HTML报告
import unittest
from HtmlTestRunner import HTMLTestRunner
if __name__ == '__main__':
suite = unittest.defaultTestLoader.discover(start_dir='./', pattern='test*.py')
# unittest.main(defaultTest='suite')
file = open('./report.html', 'w')
runner = HTMLTestRunner(stream=file, descriptions=True, report_name='学习自动化测试报告name')
runner.run(suite)
file.close()
pytest: 集成allure插件生成HTML报告
import pytest
if __name__ == '__main__':
pytest.main(['-m', 'smoke'])
os.system("allure generate ./temps -o ./reports --clean")
除了更丰富的展示外,还能够根据不同公司的要求做定制开发
常见技术栈组合方式
web自动化:
python+ selenium+unittest+ddt+excel数据驱动+关键字驱动(POM)+HTMLTestRunner
接口自动化:
python+ request+pytest+parametrize+yaml数据驱动+allure