Python单元测试框架之pytest -- 断言
对于测试来讲,不管是功能测试,自动化测试,还是单元测试。一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。测试的成功与否就是拿实际的结果与预期的结果进行比较。这个比的过程实际就是断言(assert)。
在unittest单元测试框架中提供了丰富的断言方法,例如assertEqual()、assertIn()、assertTrue()、assertIs()等,而pytest单元测试框架中并没提供特殊的断言方法,而是直接使用python的assert进行断言。
下面我们就来介绍assert 的使用。
比较大小与是否相等
test_assert.py
#coding=utf-8
import pytest # 功能
def add(a,b):
return a + b # 测试相等
def test_add():
assert add(3,4) == 7 # 测试不相等
def test_add2():
assert add(17,22) != 50 # 测试大于
def test_add3():
assert add(17,22) <= 50 # 测试小于
def test_add4():
assert add(17,22) >= 50 if __name__ == '__main__':
pytest.main("test_assert.py")
定义一个add()函数,用于计算两个入参相加,并将相加的结果返回。
而assert可以使用直接使用“==”、“!=”、“<”、“>”、“>=”、"<=" 等符号来比较相等、不相等、小于、大于、大于等于和小于等于。
运行结果:
============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile:
plugins: html
collected 4 items test_assert.py ...F ================================== FAILURES ===================================
__________________________________ test_add4 __________________________________ def test_add4():
> assert add(17,22) >= 50
E assert 39 >= 50
E + where 39 = add(17, 22) test_assert.py:22: AssertionError
===================== 1 failed, 3 passed in 0.02 seconds ======================
显然,17加22的结果并不大于50,所有最后一条用例失败。
测试包含或不包含
test_assert2.py
#coding=utf-8
import pytest # 测试相等
def test_in():
a = "hello"
b = "he"
assert b in a # 测试不相等
def test_not_in():
a = "hello"
b = "hi"
assert b not in a if __name__ == '__main__':
pytest.main("test_assert2.py")
通过定义a和b 字符串变量来比较包含的关系。
assert 可以直接使用 in 和not in 来比较包含与不包含。
运行结果:
============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile:
plugins: html
collected 2 items test_assert2.py F. ================================== FAILURES ===================================
___________________________________ test_in ___________________________________ def test_in():
a = "hello"
b = "hi"
> assert b in a
E assert 'hi' in 'hello' test_assert2.py:9: AssertionError
===================== 1 failed, 1 passed in 0.01 seconds ======================
显然“hello”并不包含“hi”,所以第一条测试用例运行失败。
测试true或false
test_assert3.py
#coding=utf-8
import pytest #用于判断素数
def is_prime(n):
if n <= 1:
return False
for i in range(2, n):
if n % i == 0:
return False
return True # 判断是否为素数
def test_true():
assert is_prime(13) # 判断是否不为素数
def test_true():
assert not is_prime(7) if __name__ == '__main__':
pytest.main("test_assert3.py")
通过is_prime()函数来判断n 是否为素数(只能被1和它本身整除的数)。返回值为ture或false。
通过assert不需要任何辅助符号,直接判断对象是否为ture,而assert not 用于判断是否为false。
运行结果:
============================= test session starts =============================
platform win32 -- Python 2.7.10 -- py-1.4.30 -- pytest-2.7.2
rootdir: D:\pyse\pytest\test_case, inifile:
plugins: html
collected 1 items test_assert3.py F ================================== FAILURES ===================================
__________________________________ test_true __________________________________ def test_true():
> assert not is_prime(7)
E assert not True
E + where True = is_prime(7) test_assert3.py:22: AssertionError
========================== 1 failed in 0.01 seconds ===========================
显示,对于第二条测试用例来讲,7是素数,所以,is_prime()函数的返回结果是Ture,而assert not 需要的正确结果是False,因此,用例执行失败。
Python单元测试框架之pytest -- 断言的更多相关文章
- Python单元测试框架之pytest 4 -- 断言
From: https://www.cnblogs.com/fnng/p/4774676.html Python单元测试框架之pytest -- 断言 2015-08-31 23:57 by 虫师, ...
- Python单元测试框架之pytest 3 -- fixtures
From: https://www.cnblogs.com/fnng/p/4769020.html Python单元测试框架之pytest -- fixtures 2015-08-29 13:05 b ...
- Python单元测试框架之pytest 2 -- 生成测试报告
From: https://www.cnblogs.com/fnng/p/4768239.html Python单元测试框架之pytest -- 生成测试报告 2015-08-29 00:40 by ...
- Python单元测试框架:pytest
(一)介绍 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手: 2.支持参数化: 3.能够支持简单的单元测试和复杂的功能测试,还可以用来做sele ...
- Python单元测试框架之pytest -- 生成测试报告
继续pytest单元测试框架的学习,pytest可以生成多种类型的测试报告.这一节就来学习pytest如何生成测试报告. 创建test_calss.py 测试用例文件,这里以测试该文件为例. #cod ...
- Python单元测试框架之pytest 1 ---如何执行测试用例
From: https://www.cnblogs.com/fnng/p/4765112.html 介绍 pytest是一个成熟的全功能的Python测试工具,可以帮助你写出更好的程序. 适合从简 ...
- Python单元测试框架之pytest -- fixtures
fixtures不太好翻译,可看作是夹心饼干最外层的两片饼干.通常用setup/teardown来表示.它主要用来包裹测试用例,为什么需要这样的饼干呢?我们以web自动化测试为例,例如,要测试的某系统 ...
- Python单元测试框架unittest之断言(assert)
unittest中断言主要有三种类型: 1.基本的布尔断言,即:要么正确,要么错误的验证 2.比较断言,如比较两个变量的值(跟上面的布尔断言区别不大,主要是通过比较两个变量的值得出布尔值) 3.复杂断 ...
- python单元测试框架笔记
目录 单元测试概述 什么是单元测试 单元测试什么进行? 单元测试由谁负责? 单元测试需要注意 单元测试覆盖类型 python 单元测试框架 unittest pytest 测试框架 单元测试概述 什么 ...
随机推荐
- Libjingle库简介
原文链接 国内现在很多语音聊天工具都是基于TURN方式实现的,包括YY.AK等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的语音质量也会受到很大影响.而基 ...
- 《软件性能测试与LoadRunner实战教程》新书上市
作者前三本书<软件性能测试与LoadRunner实战>.<精通软件性能测试与LoadRunner实战>和<精通软件性能测试与LoadRunner最佳实战>面市后,受 ...
- VS2015 Apache Cordova第一个Android和IOS应用
前言 本人个人博客原文链接地址为http://aehyok.com/Blog/Detail/75.html. 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehy ...
- JavaScript中如何中断forEach循环
先来看下forEach的实现 // Production steps of ECMA-262, Edition 5, 15.4.4.18// Reference: http://es5.github. ...
- centos7防火墙那些事
转发设置 firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --perma ...
- Bag标签之中的一个行代码实行中文分词实例2
例1: 分词(返回以逗号隔开每一个词带上引號的词组.gap=",",quotes="'"或quotes='"') 单引號 <bag id=pPa ...
- [GraphQL] Use GraphQLNonNull for Required Fields
While certain fields in a GraphQL Schema can be optional, there are some fields or arguments that ar ...
- 单击HighCharts柱形体弹框显示详细信息
上篇博客介绍了如何在HighCharts统计图表下生成表格,二者相互结合,可以对数据进行更好的统计分析.在统计的同时,如果需要想要及时查看详细信息的话,就得再加一个功能,就是单击柱形体,显示该项下的详 ...
- Solr 5.x集成中文分词word,mmseg4j
使用标准分词器,如图: 使用word分词器 下载word-1.3.jar,注意solr的版本和word分词的版本 将文件word-1.3.jar拷贝至文件夹C:\workspace\Tomcat7.0 ...
- Java数组,去掉重复值、增加、删除数组元素
import java.util.List; import java.util.ArrayList; import java.util.Set; import java.util.HashSet; p ...