pytest 7 assert断言
前言:断言是自动化最终的目的,一个用例没有断言,就失去了自动化测试的意义了。
断言用到的是 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断言的更多相关文章
- pytest之assert断言
assert pytest允许您使用标准Python断言来验证Python测试中的期望和值.例如,你可以写下 # content of test_assert1.py def f(): return ...
- pytest自动化7:assert断言
前言:assert断言就是将实际结果和期望结果做对比,符合预期结果就测试pass,不符合预期就测试failed. 实例1:简单断言 实例1优化版--增加异常信息文字描述 异常断言 excinfo 是一 ...
- pytest七:assert断言
断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试 pass,不符合预期那就测试 failed py ...
- iOS自动化探索(五)自动化测试框架pytest - Assert断言的使用
使用assert语句进行断言 pytest允许使用标准的python assert语法,用来校验expectation and value是否一致 代码演示: def func(): def test ...
- Pytest系列(2) - assert断言详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 与unittest不同,py ...
- Pytest(10)assert断言
前言 断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试 failed ...
- 【pytest系列】- assert断言的使用
unittest断言方式是用过框架自己实现的,即self.assertEqual()等,当我们使用pytest框架后,这种断言方式是不可用的,因为测试类不会再继承unittest.TestCase类, ...
- Spring Assert 断言
Assert(断言)的初步理解构思 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查, ...
- C++ ASSERT() 断言机制
C++ ASSERT() 断言机制 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继 ...
随机推荐
- table index & delete array item
table index & delete array item https://www.iviewui.com/components/table#ZDYLMB 编辑 row = { " ...
- dreamweavercs 和dreamweaver cc的區別
https://zhidao.baidu.com/question/1541178469432885667.html
- Java使用RabbitMQ之订阅分发(Topic)
使用RabbitMQ进行消息发布和订阅,生产者将消息发送给转发器(exchange),转发器根据路由键匹配已绑定的消息队列并转发消息,主题模式支持路由键的通配. 生产者代码: package org. ...
- layui弹窗 之 iframe关闭
1)关闭特定iframe //当在iframe页面关闭自身时,在iframe页执行以下js脚本 var index = parent.layer.getFrameIndex(window.name); ...
- sql行转列实例
select gh ,xm , max(A.bz) as bz , max(A.jcz) as jcz , max(A.dl) as dl , max(A.czzx) as czzx , max(A. ...
- linux硬件数据
Linux 文件详解 lrwxrwxrwx root root 8月 bin -> usr/bin //二进制目录 存放了许多GNU用户极工具 dr-xr-xr-x. root root 8月 ...
- BZOJ2554 color 【概率DP】【期望DP】
题目分析: 好题. 一开始看错题了,以为是随机选两个球,编号在前的染编号在后的. 但这样仍然能获得一些启发,不难想到可以确定一个颜色,剩下的颜色是什么就无关了. 那么答案就是每种颜色的概率乘以期望.概 ...
- qml(Qt Quick)做界面
qml(Qt Quick)做界面 来源 https://www.zhihu.com/question/24880681/answer/29324824 本人是Qt初学者,正在写一个会计小软件(Lin ...
- Hdoj 1203.I NEED A OFFER! 题解
Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用 ...
- 25 Zabbix系统数据表结构介绍
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 25 Zabbix系统数据表结构介绍 自学Zabbix之路15.1 Zabbix数据库表结构简单解 ...