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 测试框架 单元测试概述 什么 ...
随机推荐
- Android调用浏览器打开网址遇到的问题
我自己的手机(一加一代,升级了氢OS),然后在点击游戏内一个"隐私政策"-- 需要打开一个网页,然后就crash了.出错的信息如下: 完全是看不出来,然后我单独写了一个demo来测 ...
- tcpdump交叉编译及使用
第一步.下载 官方网站:http://www.tcpdump.org/ 需要下载libpcap包和tcpdump包 我下载的版本是:libpcap-1.4.0.tar.gz和tcpdump-4.4.0 ...
- Javascript 固定表格表头
遇到一个简单的需求: 客户有一个表格可能有很多内容,当内容很多的时候,表格就会出现滚动条 客户希望当表格内容很多时,只滚动表格而不滚动浏览器窗口 在网上找到很多相关的插件,要不就是太复杂,要不就是满足 ...
- Dell U2913WM使用感受
21:9比例,本来想代替双屏的,一周用下来还是不适应,如何能弯成曲面就爽了.感觉最舒服的还是以前19寸5:4双屏,点距大. 还尝试在旁边立个23寸,看了15分钟就受不了,头晕. 漏光,还行. 加了个A ...
- 如何评价微软Connect 2015?[转载]
全部的新闻和公告在这里:News and Announcements at Connect(); //2015微博话题:Sina Visitor System根据题主的理解大致地总结一下……1. Vi ...
- 用户管理 之 用户(User)和用户组(Group)配置文件详解
用户(User)和用户组(Group)的配置文件,是系统管理员最应该了解和掌握的系统基础文件之一,从另一方面来说,了解这些文件也是系统安全管理的重要组成部份:做为一个合格的系统管理员应该对用户和用户组 ...
- 【推荐】最新国外免费空间网站Hostinger
英国最大的免费网站托管服务提供商! http://api.hostinger.co.uk/redir/6703404 Hostinger免费版包括以下内容: - 2000 MB的磁盘空间 - 100 ...
- 很好的一篇讲LTP在编解码中的作用的文章
原文链接 LONG-TERM PREDICTION by: Adit Aviv Kfir Grichman introduction: The speech signal has been ...
- 使用PopupWindow实现Menu功能
参考:http://www.cnblogs.com/sw926/p/3230659.html 注意: PopupWindow会给PopupView设置Padding,会导致ContentView的左右 ...
- adb使用
一.使用adb删除系统应用,如Launcher.apk adb root 获取root权限 adb remount 挂载系统的读写权限 adb she ...