pytest和unittest有什么区别

主要做

  1. 测试发现:
  2. 测试执行:将测试用例按照一定的顺序和条件执行,并生成结果
  3. 测试判断:通过断言判断预期结果和实际结果差异
  4. 测试报告:统计测试进度,耗时,通过率,生产测试报告

不同点

一. 测试用例编写规则

unittest:

  1. 导入import unittest
  2. 继承unittest.TestCase
  3. 测试用例必须以test_开头
import unittest


class TestApi(unittest.TestCase):
    def test_01_login(self):
        print('testcase1')


if __name__ == '__main__':
    unittest.main()

pytest:

  1. 测试文件必须以test_开头或者_test结尾
  2. 测试的类名必须以Test开头
  3. 测试方法必须以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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容