pytest学习11-assert断言

前言:

  断言是写自动化测试脚本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。 什么是断言呢?

简单来讲就是实际结果和期望结果去对比,符合预期那就是测试pass,不符合预期那就测试failed

-assert

pytest允许你使用标准python断言来验证Python测试中的期望和实际计算值。例如你可以写下:

def f():
    return 3


def test_function():
    assert f() == 4

  断言f() 函数的返回值,接下来会看到断言失败,因为返回的值是3,判断等于4,所以失败了;从报错信息看,断言失败的原因:3!=4。

pytest学习11-assert断言

 

 

 

异常信息:

接下来再看一个案例,如果想要在异常的时候,输出一些提示信息,这样报错后,就方便查看是什么原因了,assert后面跟上提示信息。

def f():
    return 3


def test_function():
    a = f()
    assert a % 2 == 0, "判断a为偶数,当前a的值为:%s"%a

  运行结果:------这样当断言失败的时候,会给写出  自己写上的失败的原因:判断a为偶数,当前a的值为:3

pytest学习11-assert断言

 

 

 异常断言:

在测试过程中,对于某些方法进行测试时,预测输入某些特定的数据,会抛出特定的异常,若出现特定的异常,则用例执行通过

为了写关于引发异常的断言,可以使用pytest.raises 作为上下文管理器,如下:

def test_zero_division():
    with pytest.raises(ZeroDivisionError):
        1/0

  运行结果:

pytest学习11-assert断言

 

如果我们要断言它抛出的异常是不是预期的,比如执行:1/0,预期结果是抛异常: ZeroDivisionError:division by 0,那我们要断言这个异常,通常是断言异常的type和value值了

这里1/0的异常类型是ZeroDivisionError,异常的value值是division by zero,用例可以如下设计:

def test_zero_division():
    with pytest.raises(ZeroDivisionError) as excinfo:
        1/0

    assert excinfo.type == ZeroDivisionError
    assert "division by zero" in str(excinfo.value)

  

常用断言:

pytest里面断言实际上就是python里面的assert断言方法,常用的有以下几种:

-assert xx 判断xx为真

-assert not xx 判断xx不为真

-assert a in b 判断b包含a

-assert a == b 判断a等于b

-assert a!=b 判断a 不等于b

# !/usr/bin/env python
# -*-coding:utf-8 -*-
"""
# File       : test_assert.py
# Time       :2021/11/21 14:30
# Author     :author Kong_hua_sheng_25304
# version    :python 3.8
# Description:
"""
import pytest


def f():
    return 3


def test_function():
    a = f()
    assert a % 2 == 0, "判断a为偶数,当前a的值为:%s"%a


def test_zero_division():
    with pytest.raises(ZeroDivisionError) as excinfo:
        1/0

    assert excinfo.type == ZeroDivisionError
    assert "division by zero" in str(excinfo.value)


def is_true(a):
    if a>0:
        return True
    else:
        return False

def test_01():
    """
    断言 xx为真
    :return:
    """
    a =5
    b = -1
    assert is_true(a)
    assert not is_true(b)

def test_02():
    """
    断言b包含a
    :return:
    """
    a = "hello"
    b= "hellqo world"
    assert a in b,"判断b是否包含a,a= %s b = %s "

def test_03():
    """
    断言相等
    :return:
    """
    a = "yoyo"
    b = "yoyo"
    assert a ==b
def test_04():
    """
    断言不相等
    :return:
    """
    a = 5
    b = 6

    assert a!=b

  

上一篇:郑乐意


下一篇:什么是 DNS?