前言:断言是自动化最终的目的,一个用例没有断言,就失去了自动化测试的意义了。

  断言用到的是 assert关键字。之前的介绍,有的测试方法中其实用到了assert断言。简单的来说,就是预期的结果去和实际结果做对比,符合预期结果就是pass,不符合就fail。

比如以下的一段代码:

def add(a,b):
return a+b def test_assert():
assert 6 == add(3,4) 结果:可以看出,判断的结果是6,和方法返回的结果不一致,所以导致失败。从黄色部分的报错信息可以看出,结果不一致。

test_assert.py F
test_assert.py:11 (test_assert)
7 != 6

Expected :6
Actual :7
<Click to see difference>

def test_assert():
> assert 6 == add(3,4)
E assert 6 == 7
E + where 7 = add(3, 4)

test_assert.py:13: AssertionError
[100%]

=================================== FAILURES ===================================
_________________________________ test_assert __________________________________

def test_assert():
> assert 6 == add(3,4)
E assert 6 == 7
E + where 7 = add(3, 4)

test_assert.py:13: AssertionError

异常信息提示:如果想在异常的时候输出一些提示信息,这样报错后就方便查看是什么原因了。

def add(a,b):
return a+b def test_assert():
assert 6 == add(3,4),"方法返回的值不等于6,而是等于{0}".format(add(3,4)) 结果:可以看出黄色部分,这样会写清楚失败的原因,当有多个判断时,可以容易定位问题。

test_assert.py F
test_assert.py:12 (test_assert)
def test_assert():

> assert 6 == add(3,4),"方法返回的值不等于6,而是等于{0}".format(add(3,4))
E AssertionError: 方法返回的值不等于6,而是等于7
E assert 6 == 7
E + where 7 = add(3, 4)

test_assert.py:15: AssertionError
[100%]

=================================== FAILURES ===================================
_________________________________ test_assert __________________________________

def test_assert():

> assert 6 == add(3,4),"方法返回的值不等于6,而是等于{0}".format(add(3,4))
E AssertionError: 方法返回的值不等于6,而是等于7
E assert 6 == 7
E + where 7 = add(3, 4)

test_assert.py:15: AssertionError

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

import pytest

def test_zero_division():
with pytest.raises(ZeroDivisionError):
1/0 结果:可以看出并没有报错,正常情况下,不加异常是会报错的。

============================= test session starts ==============================
platform darwin -- Python 2.7.10, pytest-3.6.3, py-1.5.2, pluggy-0.6.0
rootdir: /Users/newcomer/PycharmProjects/error/wuya/pytestDemo, inifile:
plugins: metadata-1.7.0, html-1.19.0, D3-2.0.13, cov-2.5.1, catchlog-1.2.2, allure-adaptor-1.7.10, georaven-17.1.0.170collected 1 item

test_assert.py . [100%]

-- Docs: http://doc.pytest.org/en/latest/warnings.html
===================== 1 passed, 1 warnings in 0.01 seconds =====================

以上,我们要断言它抛的异常是不是预期的,比如执行:1/0,预期结果是抛异常:ZeroDivisionError: division by zero,那我们要断言这个异常。通常是断言异常的type和value的值。这里1/0的异常类型是ZeroDivisionError,异常的value值是"integer division or modulo by zero",于是以下是代码的设计用例:

import pytest

def test_zero_division():
with pytest.raises(ZeroDivisionError,message="Exceptions ZeroDivisionError") as exinfo:
1/0 assert exinfo.type == ZeroDivisionError
assert str(exinfo.value) == "integer division or modulo by zero","{0}".format(exinfo.value) 结果:可以看出来,通过了一个测试用例,但是需要注意,需要把value的值转换成str类型的才可以比较,而且值是要加引号的。断言type的时候,不需要给异常类型添加引号。
raises里面的message关键字参数消息指定自定义失败消息。

============================= test session starts ==============================
platform darwin -- Python 2.7.10, pytest-3.6.3, py-1.5.2, pluggy-0.6.0
rootdir: /Users/newcomer/PycharmProjects/error/wuya/pytestDemo, inifile:
plugins: metadata-1.7.0, html-1.19.0, D3-2.0.13, cov-2.5.1, catchlog-1.2.2, allure-adaptor-1.7.10, georaven-17.1.0.170collected 1 item

test_assert.py .exinfo.type: <type 'exceptions.ZeroDivisionError'>
exinfo.value: integer division or modulo by zero
[100%]

===================== 1 passed, 1 warnings in 0.01 seconds =====================

import pytest

def test_exception():
with pytest.raises(ZeroDivisionError,message="Exception ZeroDivisionError") as exinfo:
pass 结果:可以看出来,结果中的异常是message自己定义的信息

=================================== FAILURES ===================================
________________________________ test_exception ________________________________


def test_exception():
with pytest.raises(ZeroDivisionError,message="Exception ZeroDivisionError") as exinfo:
> pass
E Failed: Exception ZeroDivisionError


test_assert.py:28: Failed

================ 1 failed, 1 warnings in 0.08 seconds ================

 

常用断言: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

def is_true(num):
if num>0:
return True
else:
return False def test_01():
"""判断是不是为真"""
a = 5
b = -1
assert is_true(a)
assert not is_true(b) def test_02():
"""判断b包含a"""
a = "hello"
b = "hello world"
assert a in b def test_03():
"""判断是否相等"""
a = "hello"
b = "hello"
c = "hello world"
assert a == b
assert a != c 结果:由此可以看出来,三个用例都执行成功。

============================= test session starts ==============================
platform darwin -- Python 2.7.10, pytest-3.6.3, py-1.5.2, pluggy-0.6.0
rootdir: /Users/newcomer/PycharmProjects/error/wuya/pytestDemo, inifile:
plugins: metadata-1.7.0, html-1.19.0, D3-2.0.13, cov-2.5.1, catchlog-1.2.2, allure-adaptor-1.7.10, georaven-17.1.0.170collected 3 items

test_assert.py ... [100%]

=============================== warnings summary ===============================
<undetermined location>
pytest-catchlog plugin has been merged into the core, please remove it from your requirements.

-- Docs: http://doc.pytest.org/en/latest/warnings.html
===================== 3 passed, 1 warnings in 0.02 seconds =====================

pytest 7 assert断言的更多相关文章

  1. pytest之assert断言

    assert pytest允许您使用标准Python断言来验证Python测试中的期望和值.例如,你可以写下 # content of test_assert1.py def f(): return ...

  2. pytest自动化7:assert断言

    前言:assert断言就是将实际结果和期望结果做对比,符合预期结果就测试pass,不符合预期就测试failed. 实例1:简单断言 实例1优化版--增加异常信息文字描述 异常断言 excinfo 是一 ...

  3. pytest七:assert断言

    断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试 pass,不符合预期那就测试 failed py ...

  4. iOS自动化探索(五)自动化测试框架pytest - Assert断言的使用

    使用assert语句进行断言 pytest允许使用标准的python assert语法,用来校验expectation and value是否一致 代码演示: def func(): def test ...

  5. Pytest系列(2) - assert断言详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 与unittest不同,py ...

  6. Pytest(10)assert断言

    前言 断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试 failed ...

  7. 【pytest系列】- assert断言的使用

    unittest断言方式是用过框架自己实现的,即self.assertEqual()等,当我们使用pytest框架后,这种断言方式是不可用的,因为测试类不会再继承unittest.TestCase类, ...

  8. Spring Assert 断言

    Assert(断言)的初步理解构思 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查, ...

  9. C++ ASSERT() 断言机制

    C++ ASSERT() 断言机制 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继 ...

随机推荐

  1. mysql数据库的备份和还原的总结

    mysql数据库的备份和还原的总结 (来自一运维同事的总结) 1. 备份方式: 热备:数据库在线进行备份,不影响读和写的在线备份方式! 温备:数据库在线进行备份,对表备份时先锁定写操作,仅可以执行读操 ...

  2. mybatis generator的maven插件,找不到properties的配置文件错误的解决

    第一次运行的时候,maven插件是正确运行了的 但后面对 maven 的 build节点做了一点修改,就开始报错,找不到 properties标签指定的的数据库连接配置文件了 修改部分如下: 这个操作 ...

  3. java_manual的一点体会

    最近看了一下Alibaba的java_manual1.4,看了感觉有很多好的标准,这里摘录一些,也帮助自己的代码更加规范化 先放一些MySQL的规范: 这里附上MySQL官网给的参考手册上的 关键字和 ...

  4. WhiteHat Contest 11 : re1-100

    ELF文件,运行一下是要求输密码 die查了一下无壳 直接拖入ida 可以发现 这是它的判断函数 也就是说输入的总长度是42位第一个字符是123也就是0x7b 也就是'{'然后10位是"53 ...

  5. cuda编程-矩阵乘法(2)

    采用shared memory加速 代码 #include <stdio.h> #include <stdlib.h> #include <math.h> #inc ...

  6. Asp.Net Core 输出 Word

    In one of the ASP.NET Core projects we did in the last year, we created an OutputFormatter to provid ...

  7. 一般服务器端口号的反斜杠表示访问webapp下的资源

  8. Android系统启动概要

    注:Java系统服务与本地系统服务标注反了 1.Linux内核 Android系统启动时,首先通过BootLoader(系统加载器)加载Linux内核,在Linux加载启动时,首先初始化内核,再调用i ...

  9. Codeforces Round #440 Div. 1

    A:显然应该尽量拆成4.如果是奇数,先拆一个9出来即可. #include<iostream> #include<cstdio> #include<cmath> # ...

  10. 云服务器ECS

    云服务器Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务.使用云服务器ECS就像使用水.电.煤气等资源一样便捷.高效.您无需提前采购硬件设备,而是根据业务需要, ...