![Python服务端测试开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/984/52841984/b_52841984.jpg)
1.4 pytest常用命令
在pytest测试框架中执行程序时会用到很多命令,下面详细介绍一些常用命令的使用。
1.打印详细信息
在pytest中执行命令时带上-v参数,就会输出详细的信息,代码如下。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P19_30752.jpg?sign=1739422865-QFgcDepmalhJFzEf9bk1o3KJbDpOvzTY-0-155b1f33af67ffcb6607ac6c00686b06)
不带-v参数的命令如下。
python3 -m pytest test_command.py
不带-v参数命令执行后的结果如图1-7所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P20_1722.jpg?sign=1739422865-MNLPtx17pF230ouJkHVU3H2YWIP8KS7M-0-cd672d82558e290eab246c322a3d111c)
图1-7 不带-v参数命令执行后的结果
在图1-7中可以看到执行结果是.,.表示的是通过。带-v参数的命令如下。带-v参数命令执行后的结果如图1-8所示。
python3 -m pytest -v test_command.py
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P20_1733.jpg?sign=1739422865-ONzgloblBrbeQYP7mbwSHW6XknB3BdTU-0-8727b2f7826e7b388c9fb4f9dd1f768b)
图1-8 带-v参数命令执行后的结果
备注:
执行带-v参数的命令的输出结果中详细地显示了测试模块中具体的测试函数,结果信息也是通过PASSED来表示。
2.输出信息
在实际测试中,当测试函数出现错误时,需要进行具体的调试,可以通过在测试函数中添加print()函数输出调试信息来帮助调试具体的错误。pytest执行时,如果需要输出测试函数的信息,则应带上-s参数。修改test_command.py模块的代码如下。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P20_30758.jpg?sign=1739422865-MAMcdS9xEGYhdOIKDQghWQuUiNZPCX9M-0-badb67a518eea2a05b4e5b5a80fac798)
执行命令如下。
python3 -m pytest -v -s test_command.py
带-s参数命令执行后的结果如图1-9所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P21_1795.jpg?sign=1739422865-EnUa13pdMWXc8wWq8TmJsPhqrl38IYZJ-0-7067ec656f2f76b6ee5a635f28b134a9)
图1-9 带-s参数命令执行后的结果
备注:
图1-9中显示了测试函数中print()输出的内容。
3.按分类执行
在pytest中,参数-k允许使用表达式来指定希望执行的测试用例,如果测试用例编写的过程中按照业务进行命名,那么在执行过程中可以指定执行哪些业务的测试用例,代码如下。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P21_30763.jpg?sign=1739422865-f40BCpTZK0lqcV4VEuMHBpZ0pk8uhkZ7-0-3ad31a7d07dacc8cee74d206c930d32f)
在如上代码中,假设开发只调整了login模块,那么可以只执行测试函数名中带login的测试用例,命令如下。
python3 -m pytest -v -k "login" test_login.py
带-k参数命令执行后的结果如图1-10所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P21_1859.jpg?sign=1739422865-dEPDQWBKyfpI3vRUQHjMuxwVSEvrDbyd-0-c1605c23fe40a00dce15207ea31c280b)
图1-10 带-k参数命令执行后的结果
备注:
如上结果中,只执行了函数名中带login关键字的测试用例。如果想同时执行函数名中带login和logout的测试用例,可以使用以下命令。
python3 -m pytest -v -k "login or logout" test_command.py
执行后输出的结果如图1-11所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P22_1880.jpg?sign=1739422865-7ZQ9wLwHUFjFOYkw4ffTVC7MRk2dZhh5-0-330a1f4d04b04ccfcbf857cd0bc4bfb5)
图1-11 分类执行条件为或(or)的执行结果
备注:
如果在执行命令中的表达式是或的关系,那么就会执行函数名中带login和logout的测试用例,图1-11中的执行结果显示执行了带不同关键字的两个测试用例。
4.按分组执行
pytest的命令中带参数-m可以快速找到分组并且立刻执行,分组模式主要是根据装饰器执行的。代码如下。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P22_30769.jpg?sign=1739422865-1ib0gKfJhPqz1DDCauWuyBTzjQ0YUFOU-0-9e86ced1c4ad99e1f1c5b307131bd084)
下面介绍使用分组的方式来执行测试用例,如只执行分组为login和logout的测试用例,命令如下。
python3 -m pytest -v -m "login and logout" test_command.py
带-m参数命令执行后的结果如图1-12所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P23_2002.jpg?sign=1739422865-9dH343k0xgkYx4WB1tD6K5WFREEuOSXH-0-22f0048cbfc68176996c04aa8004a9ce)
图1-12 带-m参数命令执行后的结果
备注:
如上输出结果中,同时满足login和logout分组的测试用例只有test_command_001()测试函数,所以只执行了该函数。
对执行的命令进行调整,同时执行分组login和logout的测试用例,命令如下。
python3 -m pytest -v -m "login or logout" test_command.py
执行结果如图1-13所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P23_2015.jpg?sign=1739422865-58zaAp0ZfAuVlxERmiQQnNW3lrwCnNUX-0-6a91b994c8298db87b4e6db79aa8ad82)
图1-13 执行结果
备注:
如果执行的表达式是或关系,则执行所有满足条件的测试用例。
5.执行失败立刻停止
在pytest执行测试用例的过程中,如果有一个测试用例执行失败,就立刻停止执行所有测试用例,使用到的参数是-x,代码如下。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P23_30782.jpg?sign=1739422865-RO7Cf9tq72NnBttK4k5QJntxgwQb0ATI-0-babbb82c6f9bff2ace93be18a249a35d)
如上代码中第一个测试用例断言执行失败,即说明执行的过程失败,命令如下。
python3 -m pytest -v -x test_command.py
执行结果如图1-14所示。
![](https://epubservercos.yuewen.com/B5D6AE/31397731707980106/epubprivate/OEBPS/Images/Figure-P24_2097.jpg?sign=1739422865-4c4bK0FeX0rCNRev75295D4xI8tKluIX-0-cd800dc39c726e47608470084b2b574d)
图1-14 带-x参数命令执行结果
备注:
如上代码中,执行到第一个测试用例时失败,后面的测试用例就不会执行。一般不建议使用该命令。在测试执行的过程中,不管是否执行失败,都应该把所有的测试用例执行完成。