首页 > 其他分享 > 软件测试|教你用skip灵活跳过用例

软件测试|教你用skip灵活跳过用例

时间:2023-02-10 11:04:37浏览次数:55  
标签:__ skip 教你用 py pytest test 跳过 软件测试

前言

日常工作中,我们难免会遇到本次执行不需要所有用例都跑一遍的情况,或者说,我们就是希望某些用例不执行,来看看报错。

那除了我们手动去注释掉部分用例,还有没有其他的办法自动地跳过部分用例呢?

Pytest很懂我们,真的很懂我们,给我们提供了skip方法,可以帮助我们实现需求。

skip用法介绍

  • pytest.main(['-vs','​​test01.py​​']) 用-vs执行,跳过原因才会显示SKIPPED [1] ​​test01.py:415​​: 跳过Test类,会跳过类中所有方法
  • skip跳过,无条件和原因@pytest.mark.skipif()
  • skip跳过,无需满足条件true、有跳过原因@pytest.mark.skipif(reason='无条件,只有跳过原因')
  • skip跳过,需满足条件true、且有跳过原因@pytest.mark.skipif(条件1==1,reason='跳过原因')
  • skip赋值变量,多处调用myskip=pytest.mark.skipif(1==1,reason='skip赋值给变量,可多处调用')
    然后@myskip使用

跳过测试类

@pytest.mark.skip()和@pytest.mark.skipif()两个标签,用他们装饰测试类

  1. @pytest.mark.skip()被标记的类中所有方法测试用例都会被跳过
import pytest


@pytest.mark.skip(reason='跳过TestSkip类中的所有方法')
class TestSkip(object):
def test01(self):
print('test01')
assert 1 == 1

def test02(self):
print('test02')
assert 1 == 1


if __name__ == '__main__':
pytest.main(['-vs', 'test_skip.py'])

-----------------------
test_skip.py::TestSkip::test01 SKIPPED (跳过TestSkip类中的所有方法)
Skipped: 跳过TestSkip类中的所有方法

test_skip.py::TestSkip::test02 SKIPPED (跳过TestSkip类中的所有方法)
Skipped: 跳过TestSkip类中的所有方法


============================= 2 skipped in 0.04s ==============================
  1. 被标记的类,当条件为ture时,会被跳过,否则不跳过
    被标记的类,当条件成立时,会跳过类中的所有方法
import pytest

@pytest.mark.skipif(1 == 1, reason='当条件成立,跳过类中的所有方法')
class TestSkipif(object):
def test03(self):
print('test03')
assert 3 == 3

def test04(self):
print('test04')
assert 4 == 4

if __name__ == '__main__':
pytest.main(['-vs', 'test_skip.py'])

--------------------------
test_skip.py::TestSkipif::test03 SKIPPED (当条件成立,跳过类中的所有方法)
Skipped: 当条件成立,跳过类中的所有方法

test_skip.py::TestSkipif::test04 SKIPPED (当条件成立,跳过类中的所有方法)
Skipped: 当条件成立,跳过类中的所有方法

============================= 2 skipped in 0.04s ==============================

被标记的类,当条件不成立时,不会跳过类中的所有方法

import pytest

@pytest.mark.skipif(1 == 3, reason='当条件不成立,不跳过类中的所有方法')
class TestSkipif(object):
def test03(self):
print('test03')
assert 3 == 3

def test04(self):
print('test04')
assert 4 == 4

if __name__ == '__main__':
pytest.main(['-vs', 'test_skip.py'])
-----------------------

test_skip.py::TestSkipif::test03 test03
PASSED
test_skip.py::TestSkipif::test04 test04
PASSED

============================== 2 passed in 0.04s ==============================

跳过方法或测试用例

我们想要某个方法或跳过某条用例,在方法上加以下3种都可以

  • 跳过方法或用例,未备注原因 @pytest.mark.skip()
  • 跳过方法或用例,备注原因 @pytest.mark.skip(reason='跳过一个方法或一个测试用例')
  • 当条件满足,跳过方法或用例,备注原因 @pytest.mark.skipif(1==1,reason='跳过一个方法或一个测试用例')
import pytest

class TestClass(object):
# 跳过方法,未备注原因
@pytest.mark.skip()
def test_one(self):
print('test_one')

# 跳过方法,并备注原因
@pytest.mark.skip(reason='跳过有原因')
def test_two(self):
print('test_two')

# 当条件满足时,跳过方法,并备注原因
@pytest.mark.skipif(1 == 1, reason='条件成立,跳过有原因')
def test_three(self):
print('test_three')


if __name__ == '__main__':
pytest.main(['-vs', 'test_skip.py'])
----------------------------------------

test_skip.py::TestClass::test_one SKIPPED (unconditional skip)
Skipped: unconditional skip

test_skip.py::TestClass::test_two SKIPPED (跳过有原因)
Skipped: 跳过有原因

test_skip.py::TestClass::test_three SKIPPED (条件成立,跳过有原因)
Skipped: 条件成立,跳过有原因


============================= 3 skipped in 0.04s ==============================

多个skip时,满足1个条件即跳过

  1. 如果类中的条件满足,无论方法中的条件是否满足,均跳过该类下的所有方法,如下所示:
import pytest
@pytest.mark.skipif(1 == 1, reason='当类中条件满足,会跳过类中的所有方法')
class TestClass(object):
@pytest.mark.skip(reason='跳过不执行')
def test1(self):
print('test1')

# 类中条件不满足,方法中条件满足,跳过不执行
@pytest.mark.skipif(1 == 1, reason='条件满足,跳过不执行')
def test2(self):
print('test2')

# 类中条件不满足,方法中条件也不满足,不跳过继续执行
@pytest.mark.skipif(1 == 2, reason='条件不满足,不跳过,继续执行')
def test3(self):
print('test3')

if __name__ == '__main__':
pytest.main(['-vs', 'test_demo.py'])

------------------------------------------
============================= test session starts =============================
collecting ... collected 3 items

test_demo.py::TestClass::test1 SKIPPED (当类中条件满足,会跳过类中的所有方法) [ 33%]
Skipped: 当类中条件满足,会跳过类中的所有方法

test_demo.py::TestClass::test2 SKIPPED (条件满足,跳过不执行) [ 66%]
Skipped: 条件满足,跳过不执行

test_demo.py::TestClass::test3 SKIPPED (当类中条件满足,会跳过类中的所有方法) [100%]
Skipped: 当类中条件满足,会跳过类中的所有方法


============================= 3 skipped in 0.02s ==============================
  1. 如果类中不满足条件,方法中满足条件,跳过方法;如果类中不满足条件,方法中也不满足条件,继续执行方法中的代码;如下所示:
import pytest

@pytest.mark.skipif(1 == 2, reason='条件不满足,不跳过') # 类中不满足条件
class TestClass(object):
@pytest.mark.skip(reason='跳过不执行')
def test1(self):
print('test1')

# 类中条件不满足,方法中条件满足,跳过不执行
@pytest.mark.skipif(1 == 1, reason='条件满足,跳过不执行')
def test2(self):
print('test2')

# 类中条件不满足,方法中条件也不满足,不跳过继续执行
@pytest.mark.skipif(1 == 2, reason='条件不满足,不跳过,继续执行')
def test3(self):
print('test3')


if __name__ == '__main__':
pytest.main(['-vs', 'test_demo.py'])

------------------------------------

============================= test session starts =============================
collecting ... collected 3 items

test_demo.py::TestClass::test1 SKIPPED (跳过不执行) [ 33%]
Skipped: 跳过不执行

test_demo.py::TestClass::test2 SKIPPED (条件满足,跳过不执行) [ 66%]
Skipped: 条件满足,跳过不执行

test_demo.py::TestClass::test3 PASSED [100%]test3


======================== 1 passed, 2 skipped in 0.02s =========================

pytest.skip()方法内跳过

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

import pytest

class TestClass(object):

def test001(self):
if 'h' in 'hell':
pytest.skip(reason='跳过,不执行') # 不执行后面的代码
print('test001')

def test002(self):
print('test002')


if __name__ == '__main__':
pytest.main(['-vs', 'test_demo.py'])

============================= test session starts =============================
collecting ... collected 2 items

test_demo.py::TestClass::test001 SKIPPED (跳过,不执行) [ 50%]
Skipped: 跳过,不执行

test_demo.py::TestClass::test002 PASSED [100%]test002


======================== 1 passed, 1 skipped in 0.02s =========================

总结

关于pytest跳过用例执行的介绍就到这里,我们可以灵活使用skip的特性,提升我们的工作效率!


标签:__,skip,教你用,py,pytest,test,跳过,软件测试
From: https://blog.51cto.com/u_15640304/6048864

相关文章

  • 软件测试|Pytest必会技巧(四)使用autouse实现自动传参
    Pytestfixture之autouse使用写自动化用例会写一些前置的fixture操作,用例需要用到就直接传该函数的参数名称就行了。当用例很多的时候,每次都传这个参数,会比较麻烦。fixture......
  • 软件测试|Python操作Excel制作报表,不要太方便
    前言今天我们介绍的是Python操作Excel制作报表,我们需要用到的库是openpyxl,我们主要使用的功能有下列几个功能插入与查询数据分类数据统计数据可视化字体颜色修改基本操作表......
  • 软件测试|必须遵循的UI自动化设计军规
    总体规则所有模块设计均遵循pageobject结构用例层:测试人员编写测试用例代码的地方,可以调用page层和封装层。page层:一个页面一个类,包含该页面的业务逻辑封装以及部分控......
  • 软件测试工程师如何提高工作效率
    1.明确需求范围和重点在开需求会的时候,明确本次需求作用的是哪个模块,可能会影响到哪些模块。之前有没有类似的需求,测试的重点是什么,需求模块之间的优先级是什么。......
  • 软件测试和游戏测试到底有什么区别?
    有很多同学进入测试行业之后,一直从事的是软件测试的工作,然后跳槽时遇到一些游戏的公司的面试,就会有点慌,我做的都是软件测试,能胜任游戏测试么?所以,今天我们需要先来了解......
  • 如何选择一家靠谱的软件测试公司?这些坑你一定要避开!
    随着软件开发产品的火热,软件测试外包公司也应运而生。但因为市场的良莠不齐,我们在进行选择时会眼花缭乱,有软件测试需求的企业很容易“踩坑”。万一选择了一家不好的软件......
  • 软件测试之测试数据
    测试数据的准备是软件测试过程中非常重要的一个环节,功能测试、自动化测试、性能测试都避不开测试数据的准备工作。想要成长为一名优秀的测试工程师,非常有必要深入......
  • 第三方软件测试机构进行性能测试有哪些流程?
    软件性能是衡量一款软件产品质量的重要指标之一,检测软件产品的性能可以通过性能测试来进行。性能测试在软件的质量保证中起着十分重要的作用,它包括的测试内容也丰富多样......
  • 软件测试|手把手教你用Python来模拟绘制自由落体运动过程中的抛物线
    学过高中物理的我们都知道,当我们在一定高度上以一定速度水平抛出一个物体时,物体的运动轨迹实际上就是一条抛物线,那么,我们如何用Python将这个抛物线绘制出来呢。思路其实解决......
  • 软件测试|Python实用炫酷技能——推导式
    Python推导式判断一个程序员水平的高低,不能光看他的发量,也不能光看他的代码量,还要看他代码蕴含的思想,代码的质量。代码蕴含的思想主要体现在各种设计模式的运用上,而代码的质......