Python单元测试框架之pytest 4 -- 断言

本文深入探讨了pytest单元测试框架中的断言使用方法,包括比较大小、判断相等性、检查元素包含关系及验证布尔值,通过实例展示了如何利用Python的assert关键字进行有效测试。

From: https://www.cnblogs.com/fnng/p/4774676.html

Python单元测试框架之pytest -- 断言

2015-08-31 23:57 by 虫师, 7377 阅读, 0 评论, 收藏, 编辑

 

  对于测试来讲,不管是功能测试,自动化测试,还是单元测试。一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。测试的成功与否就是拿实际的结果与预期的结果进行比较。这个比的过程实际就是断言(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,因此,用例执行失败。

转载于:https://www.cnblogs.com/Raul2018/p/9760050.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值