python中pytest收集用例规则与运行指定用例详解
前言
上篇文章相信大家已经了解了pytest在cmd下结合各种命令行参数如何运行测试用例,并输出我们想要看到的信息。那么今天会讲解一下pytest是如何收集我们写好的用例?我们又有哪些方式来运行单个用例或者批量运行用例呢?下面将为大家一一解答!
pytest收集用例原理分析
首先我们按照如下目录结构新建我们的项目
[pyttest搜索测试用例的规则] |[测试用例目录1] ||__init__.py ||test_测试模块1.py ||test_测试模块2.py |[测试用例目录2] ||__init__.py ||test_测试用例1.py ||测试用例.py |test_测试模块.py |测试用例2.py
代码实例
#test_测试模块1.py deftest_testFunc1(): print('\n我是一个测试用例!intest_testFunc1') assert1==1 deffunc1(): print('我不是一个测试用例') assert1==1 #test_测试模块2.py classTestClass1(object): deftest_class_func1(self): print('\n我是一个类里面的测试用例intest_class_func1') assert1==1 defclass_func1(self): print('我是类里面的一个普通函数!') #test_测试用例1.py classTestClass2(object): deftest_class_func2(self): print('\n我是一个类里面的测试用例intest_class_func2',) assert1==1 defclass_func2(self): print('我是类里面的一个普通函数!') deftest_testFunc2(): print('\n我是一个测试用例intest_testFunc2!') assert1==1 deffunc2(): print('我不是一个测试用例') assert1==1 #测试用例.py deftest_testFunc3(): print('\n我是一个测试用例!in测试用例.py') assert1==1 deffunc3(): print('我不是一个测试用例') assert1==1 #test_测试模块3.py deftest_testFunc4(): print('\n我是一个测试用例!intest_testFunc4') assert1==1 deffunc4(): print('我不是一个测试用例') assert1==1 classTestClass3(object): deftest_class_func3(self): print('\n我是一个类里面的测试用例intest_class_func3') assert1==1 defclass_func3(self): print('我是类里面的一个普通函数!') #测试用例2.py deftest_testFunc5(): print('\n我是一个测试用例!intest_testFunc5') assert1==1 deffunc5(): print('我不是一个测试用例') assert1==1
下面我们使用cmd命令来执行一下这个项目,看一下究竟会有多少条用例是有效的用例?打开cmd切换到项目的根目录执行命令pytest-v
D:\pytest搜索测试用例规则>pytest-v =============================testsessionstarts============================= platformwin32--Python3.6.4,pytest-3.8.0,py-1.6.0,pluggy-0.7.1--c:\python36\python.exe cachedir:.pytest_cache metadata:{'Python':'3.6.4','Platform':'Windows-10-10.0.17134-SP0','Packages':{'pytest':'3.8.0','py':'1.6.0','pluggy':'0.7.1'},'Plugins':{'metadata':'1.8.0','html':'1.20.0','allure-adaptor':'1.7.10'},'JAVA_HOME':'C:\\ProgramFiles\\Java\\jdk1.8.0_181'} rootdir:D:\pytest搜索测试用例规则,inifile: plugins:metadata-1.8.0,html-1.20.0,allure-adaptor-1.7.10 collected6items test_测试模块3.py::test_testFunc4PASSED[16%] test_测试模块3.py::TestClass3::test_class_func3PASSED[33%] 测试用例目录1/test_测试模块1.py::test_testFunc1PASSED[50%] 测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1PASSED[66%] 测试用例目录2/test_测试用例1.py::TestClass2::test_class_func2PASSED[83%] 测试用例目录2/test_测试用例1.py::test_testFunc2PASSED[100%] ==========================6passedin0.59seconds===========================
运行结果可以看到一共有6条用例passed,且详细的列出了是哪6条,那么按照我们上面编写的用例其实并不止6条,那么为什么会只运行了6条呢?综合以上的代码结构和我们的执行结果对比,我们应该能发现这样的规律
pytets会从我们当前运行的目录开始查找所有目录,查找以test_开头的文件且文件中所有以test_开头的函数和以Test开头的类和类里面以test_开头的函数为测试用例。这就是为什么上面之运行了6条测试用例!
pytest运行指定测试用例
我们仍然使用上面的项目作为演示(cdm切换到项目的根目录)
1.运行指定目录下的所有用例
我们指定运行测试用例目录1里面的所有用例(pytest-v测试用例目录1)
D:\pytest搜索测试用例规则>pytest-v测试用例目录1 =============================testsessionstarts============================= platformwin32--Python3.6.4,pytest-3.8.0,py-1.6.0,pluggy-0.7.1--c:\python36\python.exe cachedir:.pytest_cache metadata:{'Python':'3.6.4','Platform':'Windows-10-10.0.17134-SP0','Packages':{'pytest':'3.8.0','py':'1.6.0','pluggy':'0.7.1'},'Plugins':{'metadata':'1.8.0','html':'1.20.0','allure-adaptor':'1.7.10'},'JAVA_HOME':'C:\\ProgramFiles\\Java\\jdk1.8.0_181'} rootdir:D:\pytest搜索测试用例规则,inifile: plugins:metadata-1.8.0,html-1.20.0,allure-adaptor-1.7.10 collected2items 测试用例目录1/test_测试模块1.py::test_testFunc1PASSED[50%] 测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1PASSED[100%] ==========================2passedin0.05seconds=========================== #这样就会只搜索和指定指定目录下面所有的用
2.运行指定文件中的所有用例
我们指定运行test_测试模块1.py(pytest-v测试用例目录1/test_测试模块1.py)
D:\pytest搜索测试用例规则>pytest-v测试用例目录1/test_测试模块1.py =============================testsessionstarts============================= platformwin32--Python3.6.4,pytest-3.8.0,py-1.6.0,pluggy-0.7.1--c:\python36\python.exe cachedir:.pytest_cache metadata:{'Python':'3.6.4','Platform':'Windows-10-10.0.17134-SP0','Packages':{'pytest':'3.8.0','py':'1.6.0','pluggy':'0.7.1'},'Plugins':{'metadata':'1.8.0','html':'1.20.0','allure-adaptor':'1.7.10'},'JAVA_HOME':'C:\\ProgramFiles\\Java\\jdk1.8.0_181'} rootdir:D:\pytest搜索测试用例规则,inifile: plugins:metadata-1.8.0,html-1.20.0,allure-adaptor-1.7.10 collected1item 测试用例目录1/test_测试模块1.py::test_testFunc1PASSED[100%] ==========================1passedin0.09seconds=========================== #运行指定文件下的所有用例
3.运行指定文件中的测试类
我们指定运行test_测试模块2.py中的测试类Testclass1(pytest-v测试用例目录1/test_测试模块2.py::TestClass1)
D:\pytest搜索测试用例规则>pytest-v测试用例目录1/test_测试模块2.py::TestClass1 =============================testsessionstarts============================= platformwin32--Python3.6.4,pytest-3.8.0,py-1.6.0,pluggy-0.7.1--c:\python36\python.exe cachedir:.pytest_cache metadata:{'Python':'3.6.4','Platform':'Windows-10-10.0.17134-SP0','Packages':{'pytest':'3.8.0','py':'1.6.0','pluggy':'0.7.1'},'Plugins':{'metadata':'1.8.0','html':'1.20.0','allure-adaptor':'1.7.10'},'JAVA_HOME':'C:\\ProgramFiles\\Java\\jdk1.8.0_181'} rootdir:D:\pytest搜索测试用例规则,inifile: plugins:metadata-1.8.0,html-1.20.0,allure-adaptor-1.7.10 collected1item 测试用例目录1/test_测试模块2.py::TestClass1::test_class_func1PASSED[100%] ==========================1passedin0.05seconds=========================== #运行指定的测试类中的所有测试用
4.运行指定的测试用例函数
我们指定运行test_testFunc1(pytest-v测试用例目录1/test_测试模块1.py::test_testFunc1)
D:\pytest搜索测试用例规则>pytest-v测试用例目录1/test_测试模块1.py::test_testFunc1 =============================testsessionstarts============================= platformwin32--Python3.6.4,pytest-3.8.0,py-1.6.0,pluggy-0.7.1--c:\python36\python.exe cachedir:.pytest_cache metadata:{'Python':'3.6.4','Platform':'Windows-10-10.0.17134-SP0','Packages':{'pytest':'3.8.0','py':'1.6.0','pluggy':'0.7.1'},'Plugins':{'metadata':'1.8.0','html':'1.20.0','allure-adaptor':'1.7.10'},'JAVA_HOME':'C:\\ProgramFiles\\Java\\jdk1.8.0_181'} rootdir:D:\pytest搜索测试用例规则,inifile: plugins:metadata-1.8.0,html-1.20.0,allure-adaptor-1.7.10 collected1item 测试用例目录1/test_测试模块1.py::test_testFunc1PASSED[100%] ==========================1passedin0.03seconds===========================
总结
收集用例规则:搜索所有以test_开头的测试文件,以Test开头的测试类,以test_开头的测试函数
执行用例规则:从-v参数输出的执行信息我们就应该能发现,运行指定的目录下用例使用命令pytest目录/目录即可;运行指定文件使用pytest目录/文件即可;运行指定类或者函数使用命令pytest目录/文件::类名::函数名或者pytest目录/文件::函数名
搜索用例规则也是我们命名用例文件,测试类,测试函数的规则;执行指定测试用例记住规则即可
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。