1、用例设计对比
1.1 unittest
- 测试类必须继承unittest.TestCase
- 测试函数必须以"test_"开头
- 测试类必须有unittest.main()方法
1.2 pytest
- 测试文件的文件名必须以"test"开头,或者以"test"结尾
- 测试类命名必须以"Test"开头
- 测试函数名必须以"test"开头
- 测试类里面不能使用__init__ 方法
总结:pytest是基于unittest衍生出来的新的测试框架,使用起来相对于unittest来说更简单、效率来说更高,pytest兼容unittest测试用例,但是反过来unittest不兼容pytest,所以说pytest的容错性更好一些!在使用交互逻辑上面pytest比unittest更全一些!
2、断言对比
2.1 unittest
assertEqual(a, b) 判断a和b是否相等
assertIn(a, b) 判断a是否是b的子串
…
2.2 pytest
pytest只需要用assert 来断言就行,assert 后面加需要断言的条件就可以了,例如:assert a = = b 判断a是否等于b
总结:从断言上面来看,pytest的断言比unittest要简单些,unittest断言需要记很多断言格式,pytest只有assert一个表达式,用起来比较方便
3、前置和后置函数
- unittest的前置和后置没有pytest的前置后置灵活,unittest的包括类和方法级别的
- pytest包括函数级别的,类级别的,方法级别的,模块级别的,除此之外还可以通过@pytest.fixture()去进行单独定义。
4、参数化
- unittest:需要借助第三方包,ddt来进行实现
- pytest:通过装饰器@pytest.mark.parametrize来实现
5、报告
- unittest :通过HTMLTestRunner生成报告
- pytest:
a. 通过pytest-html生成html格式报告
b. 通过allure生成方案(很详细)