设为首页 收藏本站
查看: 1175|回复: 0

[经验分享] Python单元测试框架之pytest

[复制链接]

尚未签到

发表于 2015-11-30 07:56:01 | 显示全部楼层 |阅读模式
  
    对于测试来讲,不管是功能测试,自动化测试,还是单元测试。一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。测试的成功与否就是拿实际的结果与预期的结果进行比较。这个比的过程实际就是断言(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,因此,用例执行失败。
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145090-1-1.html 上篇帖子: Python——signal 下篇帖子: Python将excel导入到mysql中
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表