学习pytest的第七天-----如何跳过执行测试用例

引入

在测试执行过程中, 我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了,这时我们就需要跳过这些用例。如果将用例删除或注释掉,也太low了点。开始我们的学习~

跳过测试用例

@pytest.mark.skip()

如果我们想要跳过某条用例,我们可以直接用@pytest.mark.skip()标签来装饰该用例。

吃个小荔枝:我们在要跳过的测试用例上加上@pytest.mark.skip()标签,可以选择传入一个非必须参数reason表示原因。需要说明的是我们在pytest.main()方法中新加了一个参数"-r",他可以显示出每个用例的简短的执行结果,关于参数可以查看学习pytest的第一天-----安装+用例设计规则+pytest命令

#文件名是test_firstFile.py
#coding=utf-8

import pytest

class Test_Pytest():

        @pytest.mark.skip(reason="就是不想执行而已")
        def test_one(self):
                print("test_one方法执行" )
                assert 1==1

        def test_two(self):
                print("test_two方法执行" )
                assert "o" in "love"

        def test_three(self):
                print("test_three方法执行" )
                assert 3-2==1

if __name__=="__main__":
    pytest.main(['-s','-r','test_Pytest.py','test_Pytest.py'])

运行结果如下图1:我们可以清楚的看到被标记的测试方法,被跳过去未被执行。
执行结果图1

@pytest.mark.skipif()

其实看到了标签我们就已经猜到了它是根据某个条件来判断是否跳过该用例,如果该条件的返回值是True便跳过。

吃个荔枝:我们在要判断是否要跳过的测试用例上添加@pytest.mark.skipif()标签;传入condition参数,也就是判断条件,该参数是必须参数;可以选择传入非必须参数reason:跳过的原因;如果多个标签一起使用,满足其中一个跳过条件则会跳过该用例

#文件名是test_firstFile.py
#coding=utf-8

import pytest

class Test_Pytest():

        @pytest.mark.skipif(condition=2>1,reason="因为2比1大")
        def test_one(self):
                print("test_one方法执行" )
                assert 1==1

        def test_two(self):
                print("test_two方法执行" )
                assert "o" in "love"

        def test_three(self):
                print("test_three方法执行" )
                assert 3-2==1

if __name__=="__main__":
    pytest.main(['-s','-r','test_Pytest.py','test_Pytest.py'])

执行结果和上图一样,这里便不展示了。

无论是@pytest.mark.skip()标签还是@pytest.mark.skipif()标签,如果你想在多个测试方法上装饰,依次写起来很麻烦的话,你可以选择定义个变量让它等于标签,然后在装饰的时候用该变量代替标签。这种方法,你还可以通过在其他模块中导入的变量的方式,在其他模块中共享标签;如果可以这样的话,我们为什么不新建一个模块用来存放标签呢?这样是不是又方便了许多

#test_Pytest.py文件
#coding=utf-8

import pytest

myskip=pytest.mark.skipif(condition=2>1,reason="就是不想执行")

class Test_Pytest():

        @myskip
        def test_one(self,):
                print("test_one方法执行" )
                assert 1==1

        def test_two(self):
                print("test_two方法执行" )
                assert "o" in "love"
        @myskip
        def test_three(self):
                print("test_three方法执行" )
                assert 3-2==1

if __name__=="__main__":
    pytest.main(['-s','-r','test_Pytest.py','test_Pytest.py'])
pytest.skip()

除了通过使用标签的方式,还可以在测试用例中调用pytest.skip()方法来实现跳过,可以选择传入msg参数来说明跳过原因;如果想要通过判断是否跳过,可以写在if判断里(_

荔枝:

#文件名是test_firstFile.py
#coding=utf-8

import pytest

class Test_Pytest():

        def test_one(self):
                pytest.skip(msg="就是不想执行")
                print("test_one方法执行" )
                assert 1==1

        def test_two(self):
                print("test_two方法执行" )
                assert "o" in "love"

        def test_three(self):
                print("test_three方法执行" )
                assert 3-2==1

if __name__=="__main__":
    pytest.main(['-s','-r','test_Pytest.py','test_Pytest.py'])

运行结果稍有不同:它显示出了跳过的位置。
执行结果图2

跳过测试类

跳过测试类其实和跳过测试方法一样,我们可以使用@pytest.mark.skip()和@pytest.mark.skipif()两个标签,用他们装饰测试类就好啦

这里就举一个简单的小荔枝:判断条件是当然Python版本低于3.6。

#test_Pytest.py文件
#coding=utf-8

import pytest
import sys

@pytest.mark.skipif(condition= sys.version < '3.6' ,reason='python版本低于3.6')
class Test_Pytest():

        def test_one(self,):
                print("test_one方法执行" )
                assert 1==1

        def test_two(self):
                print("test_two方法执行" )
                assert "o" in "love"

        def test_three(self):
                print("test_three方法执行" )
                assert 3-2==1

if __name__=="__main__":
    pytest.main(['-s','-r','test_Pytest.py','test_Pytest.py'])

运行结果如下图:运行的环境是3.5.2,所以测试类中的所有用例都跳过了。
执行结果3
强烈建议不要在使用继承的类上使用skipif。 pytest中的一个已知错误标记可能会导致超类中的意外行为(虽然现在还不知道这句话是啥意思,但是看到就先记录下来)。

跳过模块

我们跳过测试用例和测试类可以标签装饰他们,那我们要跳过模块要怎么装饰他们呢?我们使用pytestmark(不可更改变量名)变量,让他等于标签即可

荔枝:

#test_Pytest.py文件
#coding=utf-8

import pytest
import sys

pytestmark=pytest.mark.skipif(condition=sys.version_info<(3,6),reason='python版本低于3.6')

class Test_Pytest():

        def test_one(self,):
                print("test_one方法执行" )
                assert 1==1

        def test_two(self):
                print("test_two方法执行" )
                assert "o" in "love"

        def test_three(self):
                print("test_three方法执行" )
                assert 3-2==1

if __name__=="__main__":
    pytest.main(['-s','-r','test_Pytest.py','test_Pytest.py'])

运行结果如下图:
执行结果图4

再充一点:
在学习skip过程中,发现如果想要运行多个文件可以这么写:依次将要运行的文件名写在后面即可,用逗号隔开,无需链表元组等形式

pytest.main(['-s','test_Pytest.py','test_firstFile.py'])

参考:
https://www.cnblogs.com/yoyoketang/tag/pytest/

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pytest是一个非常成熟的全功能的Python测试框架。它具有以下几个主要特点: 1. 简单灵活,容易上手,拥有丰富的文档支持。 2. 支持参数化,可以细粒度地控制要测试的测试用例。 3. 能够支持简单的单元测试和复杂的功能测试,并且可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest requests)。 4. 提供了丰富的第三方插件,并且可以自定义扩展。一些比较好用的插件包括pytest-selenium(集成selenium)、pytest-html(生成完美的HTML测试报告)、pytest-rerunfailures(失败用例重复执行)和pytest-xdist(多CPU分发)等。 5. 支持测试用例的skip和xfail处理,可以很好地与Jenkins集成。 6. 提供了report框架allure的支持,可以生成漂亮的测试报告。 7. 安装方便简单。 总之,pytest是一个功能强大、易于学习和使用的Python测试框架,适用于各种类型的测试任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python测试框架之pytest详解](https://blog.csdn.net/lixiaomei0623/article/details/108874291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Pytest测试框架基本使用方法详解](https://download.csdn.net/download/weixin_38681318/14908223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值