一、用例编写
-
unittest
- 使用自定义的测试类TestFixture(如:MyTestBaidu),必须继承unittest.Testcase
- TestSuite:测试套件,使用需要声明unittest.Test.TestSuite().
- 测试方法必须以“test_”开头
- 执行测试类必须要方法unittest.main()
- unittest提供了test_case、test_suite、test_fixture、test_runner相关的类让测试更加明确、方便、可控,使用unittest编写测试用例
- unittest:用例格式复杂,不能兼容pytest用例
- pytest
- 测试文件名必须以“test_”开头或者“_test”结尾
- 测试方法必须以“test_“开头
- 测试类名必须以“Test”开头
- pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效
- pytest:用例格式-简单,可以兼容unittest用例,运行不需要main
二、断言
- pytest:直接使用assert表达式,原生态的pythoin断言函数
- unittest:unittest提供了assertEqual、assertIn、assertTure、assertFalse
三、测试报告
- unittest:使用HTMLTestRunner库生成测试报告
- pytest有pytest-HTML、allure插件
四、失败重跑机制
- unittest:无失败重跑机制
- pytest:pytest支持用例的失败重跑,使用的是pytest-rerunfailure插件
,。五、参数化
- unittest:需要依赖ddt库进行数据驱动
- pytest:直接使用@pytest.mark.parametrize装饰器
六、用例分类执行
- unittest:默认执行去全部的测试用例,可以通过加在testsuit执行模块的测试用例
- pytest:可以通过@pytest.mark暟标记测试用例,执行的时候需要加上参数"-m"既可以运行标记的用例
七、用例前置和后置条件
- unittest:unittest提供的Fixture用以在测试执行前和测试执行后进行必要的准备和清理工作。可以定义在模块、类、用例执行的前后的工作
- 在模块中定义setUpMoudel()和tearDownMoudel()处理模块执行前后的操作
- 每个测试用例执行前后都会调用setUp和tearDown()
- 在测试用例中定义setUpClass()和tearDownClass()函数处理测试类执行前后的工作
- pytest
- pytest提供了模块级、函数级、类级、方法级别的setup/teardown,比unittest的setUp/tearDown更灵活
- 模块级(setup_moudel、teardown_moudel)开始于模块始末,全局的
- 函数级(setup_funtion/teardown_funtion)只对函数用例生效(不在类中)
- 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)、
- 方法级(setup_method/teardown_method)运行在调用方法的前后
- pytest还可以在函数前加@pytest.fixture()的装饰器,在测试用例中使用fixture函数。fixture的使用范围可以是function,moudel、class、session
- 命名方式灵活:不局限于setup/teardown这几个命名
- conftest.py就可以实现数据共享,不需要import就能实现一些配置,可以多个py文件使用
- scope = 'model'可以实现多个.py文件跨文件共享配置
- scope = 'session' 以实现多个.py文件使用一个sesion来完成多个用例
- 用yied来唤醒teardown的执行