0
点赞
收藏
分享

微信扫一扫

软件测试学习笔记丨Pytest 学习指南

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32336

软件测试学习笔记丨Pytest 学习指南_用例

基本介绍

pytest框架是一个成熟,全面的测试框架,具有非常丰富的第三方插件,并且可以自定义扩展

比如:pytest-selenium , pytest-html , pytest-rerunfailures(失败case重复执行)pytest-xdist(多cpu分发)

pytest还以其简单灵活,上手简单著称,能够支持简单的单元测试和复杂的功能测试,支持参数化操作。

安装指南

pip install pytest

验证安装:

pytest --version # 会展示当前已安装版本

文件基本命名格式

默认满足以下条件:

测试文件满足:test_xxx.pyxxx_test.py格式,即以test_为前缀或_test为后缀

测试类满足:以Test开头,且不能含有init方法(定义class时,要以T开头,不然pytest框架不会识别该类,自然就不会进入该类内部进行搜索)

因为测试类里进行前后置操作不能通过init等魔法函数,而是通过特定的函数setup_classteardown_class前面半段指定了是前置操作还是后置操作,后半段则是指定了该操作的重复级别:

class:类重复级别:该类中只执行一次

method:测试方法重复级别:该类中每个测试用例(方法)执行一次

执行:在命令行执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。

模板

import pytest  #导入pytest模块


def test_beifan():  #测试用例
    pass
    
class TestBaili:  #测试套件
    def test_a(self): #测试用例,第一个测试方法
        pass
        
    def test_b(self):  #测试用例,第二个测试方法
        pass

pytest框架断言

常用断言:

  • assert xx:判断 xx 为真
  • assert not xx:判断 xx 不为真
  • assert a in b:判断 b 包含 a
  • assert a == b:判断 a 等于 b
  • assert a !=b:判断 a 不等于 b

pytest命令行执行

指定文件:
pytest ./xxx.py
指定方法
pytest ./xxx.py::类名::方法名
pytest ./xxx.py::TestData::test_demo1

### 常用命令参数
-v 输出用例更加详细的执行信息,比如用例所在文件和用例名称
-k 执行用例中包含'关键字'的用例
-s 输出用例中的调试信息,比如print打印消息,不加参数则不输出待执行的用例
-m 执行标记的内容,执行特定的测试用例,执行有相同标记的测试用例
-x 执行失败则停止执行,后面的用例不会被执行
--maxfail=n 执行失败n次后停止执行,n为最大程度接收失败的次数
--count=n 执行用例n次,n=2则执行两次
--lf (last failed) 重新执行上传失败的用例,若没有失败,则会全部跑
--ff (failed first) 重新运行所有用例,但是首先运行上传失败的用例

### 测试结果的标志
. 代表一个测试用例通过,..代表两个测试用例通过
s 代表skip,即用例跳过执行
F 即failure一般是断言发生错误
E error,一般是用例执行过程中报错

pytest 标记测试用例以及测试用例的指向执行

pytest的标记机制与用例执行的方法

pytest标记是需要通过pytest.mark来标记使用的,pytest为了应对各种测试场景也内置了许多标记。

1、参数化标记:pytest.mark.parametrize通过parametrize可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例

2、

@pytest.mark.parametrize('item',[11,22,33,44,55,66])
def test_demo(item)
    assert item >50
用法:
格式:pytest.mark.parametrize('每个用例包含的变量列表,以引号括住,变量间以,号隔开',实参列表,当每组变量数量只有一个时,使用一维数组即可,无特殊包裹要求,以逗号隔开,若存在多个变量则输入二维数组即可。)

3、跳过用例执行:pytest.mark.skip通过skip装饰的用例,在执行时会无条件跳过。可选参数reason:跳过测试函数的原因

4、

@pytest.mark.skip
def test_demo():
    assert item>50
@pytest.mark.skip(reason='不需要执行')
def test_demo1():
    assert item>50

5、根据条件跳过用例:pytest.mark.skipifskipif可以根据条件来决定是否跳过用例的执行,如果条件为True则跳过测试函数执行。 参数:condition:跳过条件,reason:跳过的原因

6、

a =10
@pytest.mark.skipif(a>20,reason='条件不成立,不执行')
def test_demo():
    assert item >50

7、标记预期失败的用例:pytest.mark.xfailxfail可以将测试用例标记为预期执行失败的用例.

  • 参数
  • condition:将测试函数标记为xfail的条件(True/False)
  • reason:测试函数被标记为xfail的原因
  • raises:预期失败的异常类型
  • run:是否应该实际执行函数,如果False,该函数将始终xfail并且不会被执行
  • strict:严格模式(True或False)

8、

a=10
@pytest.mark.xfail(a>20,reason='条件不成立,不执行',raises = AssertionError)
def test_demo():
    assert item>50

举报

相关推荐

0 条评论