1,pytes框架介绍及与unittest框架对比
一,pytest与unittest对比
1,编写测试用例
1.1规则
unittest:
- 测试类必须继承unittest.TestCase
- 测试函数必须以"test_"开头
- 使用defaultTestLoader.descover()加载测试用例时,测试模块(py文件)名称要以test_开头
pytest:
- 测试模块文件的文件名必须是"test_.py"或者以"_test.py"
- 测试类命名必须以"Test"开头
- 测试函数名必须以"test_"开头
- 测试类里面不能使用"init"方法
1.2前置后置
unittest:
- setup/teardown:在每个用例执行前后执行.
- setupclass/teardownclass:在类中用例执行前后执行.
pytest:
方案一:
- setup/teardown:会话级别,类和类外用例都可以使用.
- setup_calss/teardownclass:类级别,测试类执行前后执行.
- setup_module/teardown_module:模块级别,整个模块之情前后执行
pytest方案二:
fixture,是pytest特色,用的比较多
1.3断言
unittest: self.assertXXX()
- assertEqual(a, b) 判断 a 和 b 是否相等
- assertNotEqual(a, b) 判断 a 不等于 b
- assertTrue(a) 判断 a 是否为 Ture
- assertFalse(a) 判断 a 是否为 False
- assertIn(a, b) a 包含在 b 里面
- asserNotIn(a, b) a 不包含在 b 里面
pytest: assert 表达式,表达式为真判断通过,否者失败
2,收集测试用例
unittest:通过TestLoader.discover(目录)收集到套件中
pytest:为自动收集
收集方式:
- 1,目录 --从那个目录下开始搜索用例,确定roodir:pytest命令在那个目录下运行,就以那个目录为roodir.
- 2,文件名 --通过文件名过滤,查找符合条件(test_.py或者_test.py)的文件名
- 3,函数名/类下的方法中进行查找,符合规定的用例
--函数名以test_开头
--以Test开头的类下的test_开头方法
3,执行测试用例
unittest:run方法
pytest:为收集并执行的过程.
- 方式一:命令行的方式,pytest -s -v 控制台显示详细的用例执行情况.
- 方式二:main文件的方式,py文件main:pytest.main([命令行参数])
pytst的执行顺序:
- 1,通过文件名的ascii码的顺序执行,可通过改变文件名调整执行顺序.
- 2,py文件内部根据代码的顺序执行.
4,测试报告生成
unittest:
- 通过HTMLTestRunner生成
- 通过BeautifulReport生成
pytest:
- html插件:
--安装html插件:pip install pytest-html
--在运行用例的时候,添加参数 --html=htlm的路径(相对于roodir的路径) - allure
--安装allure命令行(手动安装适用于各种平台)
--安装allure与pytest的集成:pip install allure-pytest
二,pytest的特色
- 1,自动收集测试用例
- 2,断言使用 assert 表达式
- 3,可以设置多种级别的fixture来共享前置后置,有自己独特的fixture方式
- 4,有丰富的插件库,比如测试报告allure,官方文档:https://docs.pytest.org/en/stable/
难者不会 会者不难 学是关键