pytest 执行同一个py文件时,有时候是找到0个用例或部分,有时候全部用例都搜索到了。两次运行,环境脚本并无任何改动。但是有时候就是找不到用例,有知道怎么解决的吗?
问题描述:
上面是两次运行的结果。
下面是我的测试代码,还望了解的朋友帮忙解惑一下。不胜感激。
import time
import pytest
from ddt import ddt,data,unpack
@ddt
class Test_learn():
# @pytest.mark.run(order=4)
def test_t1(self):
"""用例描述:这是用例1"""
print("第一个测试用例T1")
# @pytest.mark.run(order=3)
def test_t2(self):
print("第二个测试用例T2")
# @pytest.mark.run(order=2)
def test_t3(self):
time.sleep(1)
print("测试用例3,耗时操作")
# @pytest.mark.run(order=1)
def test_t4(self):
"""用例描述:执行顺序为1的用例."""
time.sleep(1)
print("测试用例4,耗时操作")
@pytest.mark.skip
def test_t5(self):
"""用例描述:这是一个被跳过的用例."""
print("用例5:被标记跳过的用例,不会执行.")
def test_t6(self,setUp): # 把前置操作当成参数传入.
"""?"""
print("用例6:有前置函数的.")
@pytest.mark.parametrize('ar1,ar2',[('a1','a2'),('a12','a22')],ids=['用例1','case2'])
def test_t7(self,ar1,ar2):
print(f"ar1:{ar1},ar2:{ar2}")
@data('t8_测试','t8_2','t8_3')
def test_t8(self,ar1="默认"):
print(f"参数ar1----->{ar1}")
print("打印了吗????????????")
if __name__ == '__main__':
pytest.main()
答
1. 恭喜你,踩了一个坑
踩坑不要紧,从坑里爬出来就是进步
首先我猜你是通过右键-Run执行的,
改一下代码
if __name__ == '__main__':
1/0 # 错误的语法,如果执行会报错
pytest.main()
如果不报错的话,说明书if下面的代码根本没执行,也就是说根本没执行 pytest.main()
2. pycharm的坑
pycharm对python有额外的支持,通过一个特殊的runner,实现unittest 和 pytest单个用例的执行
比如截图中的 js_pytest_runner.py
注意两张图片的细节,都不是执行你写代码的py文件,而是执行你文件中的用例
这就是为什么在步骤1中修改代码不报错的原因
3. 解决办法
最简单的办法就是在命令执行的文件,这样可以绕过jb的runner,确保不会出现其他的问题,比如
python test_sanmu.py
还有一种方法就是修改 Run设置
你打开之后应该会看到pytest的图标,删掉,添加一个python的图标,最基本的方式执行这个文件
这样修改之后就可以【右键-Run】执行这个文件了
4. 多多交流
若有帮助 记得点击【采纳】
也可以关注我得公众号测试开发研习社,专注基于Python的开发及测试技术