pytest是一种自动化测试框架,pytest相比于python自带的unittest库要更加灵活,方法更加丰富,可以使很多复杂的逻辑简单化,下面就根据我的个人理解来对pytest进行说明。
一、pytest用例规则:
与unittest不同,pytest不需要继承任何类,它只需要文件、类、函数的命名符合规则就会被pytest认为是测试用例,命名规则如下:
- 文件名:以test_开头或结尾
- 类名:以Test开头
- 函数名:以test开头
二、pytest.main运行用例,参数详解
pytest执行测试用例使用main方法,main()中传入不同命令用以执行指定用例
参数如下:
- -s:打印出程序中logging/print输出信息
- -v:丰富信息模式,打印更详细的用例执行信息
- -q:安静模式,不打印执行信息
- -k:关键字匹配,可用and追加筛选用例,匹配范围(文件名,类名,函数名)。用于执行指定用例
2-1.参数 -k 的使用实例:
1.
pytest.main(['-s','-k','my']) #匹配包含my的用例(匹配目录名、模块名、类名、用例名)
代码及运行结果截图如下:
只有命名包含my的路径下用例被执行(用例路径:testcase/test_index.py)
2.
pytest.main(['-s','-k','my','./testcase/test_index.py']) #只匹配testcase/test_index.py模块下包含my的用例
目录如下:
test_index.py:
test_my.py:
运行结果:
可以看到因为指定了匹配范围,所以虽然test_my.py中包含my,但不会被匹配
2-2.运行指定路径下的用例:
目录代码先放这里:
test_index.py
test_my.py
1.运行根目录下所有用例
pytest.main(['-s','./'])
运行结果:
2.运行指定目录下的用例:
pytest.main(['-s','./testcase'])
运行结果:
3.运行指定模块下的用例
pytest.main(['-s','./testcase/test_index.py'])
运行结果:
4.运行指定类下的用例:
pytest.main(['-s','./testcase/test_index.py::TestIndex'])
运行结果:
5.运行指定用例函数:
pytest.main(['-s','./testcase/test_index.py::TestIndex::test_myself'])
运行结果: