pytest 执行同一个py文件时,有时候是找到0个用例或部分,有时候全部用例都搜索到了。两次运行,环境脚本并无任何改动。但是有时候就是找不到用例,有知道怎么解决的吗?

pytest 执行同一个py文件时,有时候是找到0个用例或部分,有时候全部用例都搜索到了。两次运行,环境脚本并无任何改动。但是有时候就是找不到用例,有知道怎么解决的吗?

问题描述:

img

img

上面是两次运行的结果。
下面是我的测试代码,还望了解的朋友帮忙解惑一下。不胜感激。


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

img

注意两张图片的细节,都不是执行你写代码的py文件,而是执行你文件中的用例
这就是为什么在步骤1中修改代码不报错的原因

3. 解决办法

最简单的办法就是在命令执行的文件,这样可以绕过jb的runner,确保不会出现其他的问题,比如

python  test_sanmu.py

还有一种方法就是修改 Run设置
你打开之后应该会看到pytest的图标,删掉,添加一个python的图标,最基本的方式执行这个文件
这样修改之后就可以【右键-Run】执行这个文件了

img

4. 多多交流

若有帮助 记得点击【采纳】
也可以关注我得公众号测试开发研习社,专注基于Python的开发及测试技术