从0到1精通自动化测试,pytest自动化测试框架,assert断言(七)

目录

一、前言

二、assert

三、异常信息

四、异常断言

五、常用断言


一、前言

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

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

二、assert

pytest允许您使用标准Python断言来验证Python测试中的期望和值

例如,可以写下

# content of test_assert1.py
def f():return 3
def test_function():assert f() == 4

断言f()函数的返回值,接下来会看到断言失败,因为返回的值是3,判断等于4,所以失败了

$ pytest test_assert1.py
=========================== test session starts ============================
platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR, inifile:
collected 1 item
test_assert1.py F [100%]
================================= FAILURES =================================
______________________________ test_function _______________________________
def test_function():
> assert f() == 4
E assert 3 == 4
E + where 3 = f()
test_assert1.py:5: AssertionError
========================= 1 failed in 0.12 seconds =========================

从报错信息可以看到断言失败原因:E assert 3 == 4

三、异常信息

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

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

运行结果

================================== FAILURES ===================================
________________________________ test_function ________________________________def test_function():a = f()
>       assert a % 2 == 0, "判断a为偶数,当前a的值为:%s"%a
E       AssertionError: 判断a为偶数,当前a的值为:3
E       assert (3 % 2) == 0test_03.py:9: AssertionError
========================== 1 failed in 0.18 seconds ===========================

这样当断言失败的时候,会给出自己写的失败原因了E AssertionError: 判断a为偶数,当前a的值为:3

四、异常断言

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

# content of test_assert1.pyimport pytest
def test_zero_division():with pytest.raises(ZeroDivisionError):1 / 0

运行结果

============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: D:\MOMO\canshuhua, inifile:
plugins: metadata-1.7.0, html-1.19.0
collected 1 itemtest_assert1.py.========================== 1 passed in 0.31 seconds ===========================

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

这里1/0的异常类型是ZeroDivisionError,异常的value值是division by zero

于是用例可以这样设计

# content of test_assert1.py''' 程序员曦曦'''import pytest
def test_zero_division():'''断言异常'''with pytest.raises(ZeroDivisionError) as excinfo:1 / 0# 断言异常类型typeassert excinfo.type == ZeroDivisionError# 断言异常value值assert "division by zero" in str(excinfo.value)

excinfo 是一个异常信息实例,它是围绕实际引发的异常的包装器,主要属性是 .type、 .value 和 .traceback

注意:断言type的时候,异常类型是不需要加引号的,断言value值的时候需转str

在上下文管理器窗体中,可以使用关键字参数消息指定自定义失败消息:

with pytest.raises(ZeroDivisionError, message="Expecting ZeroDivisionError"):pass结果:Failed: Expecting ZeroDivisionError

五、常用断言

pytest里面断言实际上就是python里面的assert断言方法

常用的有以下几种
1.assert xx 判断xx为真

2.assert not xx 判断xx不为真

3.assert a in b 判断b包含a

4.assert a == b 判断a等于b

5.assert a != b 判断a不等于b

# content of test_01.py
import pytest''' 程序员曦曦'''def is_true(a):if a > 0:return Trueelse:return Falsedef test_01():'''断言xx为真'''a = 5b = -1assert is_true(a)assert not is_true(b)  # 一个用例可以支持多个断言def test_02():'''断言b 包含 a'''a = "hello"b = "hello world"assert a in bdef test_03():'''断言相等'''a = "momo"b = "momo"assert a == bdef test_04():'''断言不等于'''a = 5b = 6assert a != bif __name__ == "__main__":pytest.main(["-s", "test_01.py"])

          【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通


二、接口自动化项目实战  

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具


八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

资料获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群领取。

【软件测试技术交流(资料分享)】:320231853(备注C)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DfJ5iMmE6qcng0v5s1WXgj4DhaAf8sI-&authKey=d%2BwKSoybPl4%2FxIo%2FpO8fWRIemdwJgd%2BgTFtuKXRz9K0V8PujihfuvNEhwTtOlSxS&noverify=0&group_code=320231853

本文链接:https://my.lmcjl.com/post/9752.html

展开阅读全文

4 评论

留下您的评论.