一、什么是单元测试框架?
unittest 是python标准的单元测试框架模块
pytest 是python第三方库的测试框架
二、从兼容性方面考虑
因unnitest是标准库,所以unnitest的兼容性更强
三、安装方面
unnitest是标准库,python是自带的,安装python以后可以直接导入
第三方库:需要独立安装,要注意兼容性,有可能会存在安装不成功,或者是某些库的功能使用不了。
四、unittest 的使用更加复杂一些, pytest 更加容易使用。
eg:
unittest
第一步:创建测试套件
suite = unittest.TestSuite()
第二步:testloader.discover(test_case_dir), 加载测试用例到套件
loader = unittest.TestLoader()
suite.addTest(loader.discover(CASE_DIR))
第三步:启动器, 运行, testrunner.run()
runner.run(suite)
pytest , 自动收集测试用例,自动执行测试用例。
pytest 运行:
1, pytest.main() python: 代码形式. 生产环境。
2, 命令行的形式 : 在项目根目录下运行 pytest 命令
3, pycharm 右键运行(如果pycharm 没有出现 pytest 命令,run. configraiton 当中进行配置。)
五、断言
pytest assert 1=1
unittest assertEqual(expected,autual)
六、pytest可以灵活运用指定的测试用例,标签化,回归,正向、冒烟、登陆 使用的是pytest的mark功能
七、pytest (夹具 )环境管理灵活,会话、模块,哪个用,哪个不用。fixture,setup,tearDown,setupClass,setUpModule
八、pytest有丰富的插件,测试报告。eg: allure
九、pytest 和unnitest/nose兼容 意思是以unnitest的框架写的用例,以pytest去执行是可以的,但是反之就不行。
十、pytest发现用例的格式为:
pytest 收集测试用例的规则(pytest 将怎样的函数看成是测试用例)
1, 模块名: test_*.py 或者是 *_test.py
2, 类名: TestLogin
3, 方法名: test_
4, pytest 的测试用例并不一定要以类的形式存在,可以直接以函数的形式存在:
def test_demo():
pass
5.类形式:
class TestYang:
# 不要写 __init__() 函数, 容易报错
def test_yangleduo(self):
pass
当在哪个文件夹,(目录)执行 pytest 指令,那么 pytest 会自动发现当前目录下所有
test_ 开头的 py 文件,将这些文件当成测试用例文件.
unnitest 不能找到直接以函数的形式存在的用例