![Python服务端测试开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/984/52841984/b_52841984.jpg)
1.3 pytest执行规则
1.pytest测试搜索
测试搜索是指在pytest测试框架中,如果没有指定执行的目录,pytest默认会搜索一个项目下所有可执行的测试模块以及测试模块中的测试方法来执行,在这个过程中,并不在乎测试用例是在哪个包、哪个模块下,这个过程被称为“测试搜索”。只要是符合pytest执行规则的测试方法都会被执行。测试类是以Test开头,测试方法是以test开头。所以在使用pytest测试框架的过程中,建议所有的测试模块都放在test包下,test包下每个Python文件的命名形式为“test_模块名称.py”,测试方法都以“test_”开头。在执行的过程中,只需要进入test包的目录执行命令pytest -v,pytest就会先搜索符合规则的测试模块中的测试方法,然后按顺序执行。
2.pytest执行方式
使用pytest测试框架编写的测试用例都会放在test包下,但是在实际执行的过程中,可以根据自己的需求,按照包的方式执行;也可以执行包下某一个测试模块,或者是测试模块中某个单一的测试函数以及测试类中的某个测试方法。下面结合具体的案例详细介绍不同的执行方式。
1)包级别执行方式
包级别执行方式是指执行包下所有符合要求的测试模块。创建test包,在test包下创建测试模块test_demo.py,代码如下。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P16_30732.jpg?sign=1739032076-igHRNhFwKLytALPOT4MooburECvAY9QZ-0-0989ce5222c85c40104e7ea31bbee585)
下面通过包的方式来执行该测试模块,进入项目目录,命令如下。
python3 -m pytest -v test/
进入项目目录后,就会执行包下所有测试模块中符合要求的测试方法,执行后,输出结果如图1-2所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P17_1542.jpg?sign=1739032076-rs9W8by2aF8oAGAHB81QbqnSVjUI2XSS-0-d1b1770cbe0e2d75855604adbff73ae7)
图1-2 按包执行方式输出结果
备注:
如图1-2所示,test包下所有测试模块中符合测试搜索规则的测试方法都被执行了。
2)模块级别执行方式
模块级别执行方式是指在一个包下有很多的测试模块时,自定义指定需要执行的测试模块,这样只会执行这个包下被指定执行的测试模块,其他的测试模块不会被执行。在test包下新增test_login.py模块,该模块的代码如下。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P17_30738.jpg?sign=1739032076-hmVFdOceNORmNAWxfCdPtkyxQ613t2B2-0-25443da4ab2adef2e774bc2d129af033)
下面介绍测试模块的执行方式,只执行test包下test_login.py模块的代码,命令如下。
python3 -m pytest -v test/test_login.py
按模块执行后的结果如图1-3所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P18_1615.jpg?sign=1739032076-8L19lz5aezzEIzLQyBqFlTvQfnngeBsw-0-30b63da333113ec2871313d002bdc50d)
图1-3 按模块执行后的结果
备注:
在图1-3的输出结果中可以发现,程序只执行了test包下test_login.py模块中的代码,test_demo.py中的代码没有被执行。
3)类级别执行方式
类级别执行方式是指只执行测试模块中某一个类中的测试方法,如只执行test_demo.py模块中的TestAdd类中的测试方法,命令如下。
pyhton3 -m pytest -v test/test_demo.py::TestAdd
按类执行后的结果如图1-4所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P18_1628.jpg?sign=1739032076-OG1pxnRVCnLcdmr1xXoqvpgJoW3ZP1vo-0-2cbcd3925aff65cf3c05396617bfec66)
图1-4 按类执行后的结果
备注:
在图1-4的结果中可以发现,程序只执行了test_demo.py模块中测试类TestAdd中的测试方法。
4)方法级别执行方式
方法级别执行方式是自定义指定只执行测试类中具体的测试方法,如只执行TestAdd类中的test_add_str方法,命令如下。
python3 -m pytest -v test/test_demo.py::TestAdd::test_add_str
按方法执行后的结果如图1-5所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P19_1651.jpg?sign=1739032076-9oeOXlmX9AD76NE4Q3gDCROc8379KjxZ-0-fd59a660ba54904536f442fbfafc85a8)
图1-5 按方法执行后的结果
备注:
在图1-5的输出结果中可以发现,程序只执行了TestAdd类中的test_add_str方法,test_add_int方法并没有被执行。
5)函数级别执行方式
函数级别执行方式是自定义指定执行测试模块中的某一个测试函数,如指定执行test_demo.py模块中的测试函数test_add_int,命令如下。按函数执行后的结果如图1-6所示。
python3 -m pytest -v test/test_demo.py::test_add_int
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P19_1664.jpg?sign=1739032076-FCTQdigddRfpqNCyt2eOk0cgbVo8cPsv-0-d2ef6a65c55660edb433bf2c9b19fe5f)
图1-6 按函数执行后的结果
备注:
在图1-6的结果中可以发现,程序只执行了指定模块中的test_add_int函数。