查看原文
其他

python unittest之异常测试

苦叶子 开源优测 2022-11-13

 

前言

在python unittest测试框架中,提供了一系列的方法用于验证程序的异常。

下面和我一起看看在unittest中,如何使用异常验证来进行断言,完成对应的测试工作

assertRaises(exception, callable, *args, **kwds)

参数说明:

assertRaises( exception,  # 待验证异常类型
callable,  # 待验证方法
*
args,  # 待验证方法参数
*
*kwds # 待验证方法参数(dict类型))

功能说明:

验证异常测试,验证异常(第一个参数)是当调用待测试函数时,在传入相应的测试数据后,如果测试通过,则表明待测试函数抛出了预期的异常,否则测试失败。

下面我们通过一个示例来进行演示,如果验证做除法时抛出除数不能为0的异常ZeroDivisionError。

# _*_ coding:utf-8 _*_

__author__ = '苦叶子'

import unittest
import sys reload(sys) sys.setdefaultencoding("utf-8")

# 除法函数

def div(a, b):    return a/b  
 # 测试用例

class demoRaiseTest(unittest.TestCase):    def test_raise(self):        self.assertRaises(ZeroDivisionError, div, 1, 0)    
     # 主函数

if __name__ == '__main__':    unittest.main()

test_raise方法使用了assertRaises方法来断言验证div方法除数为零时抛出的异常。

运行python raise_demo.py结果如下

. -------------------------------------Ran 1 test in 0.000s OK

你还可以尝试调整下数据,如下:

def test_raise(self):        self.assertRaises(ZeroDivisionError, div, 1,1)

执行结果如下:

F =====================================
FAIL: test_raise (__main__.demoRaiseTest) -----------------------------------------

Traceback (most recent call last):  File "raise_demo.py", line 18,
 in test_raise
   self.assertRaises(ZeroDivisionError,
   div, 1,1)
AssertionError: ZeroDivisionError not raised
---------------------------------- Ran 1 test in 0.000s

assertRaisesRegexp(exception, regexp, callable, *args, **kwds)

这里就不对参数进行说明了,该方法使用正则表达式方式来匹配异常断言,能更加灵活,实用更多的场景。

通常regexp参数是一个正常表达式,或包含正则表达式的字符串(使用re.search()函数)

下面跟我一下看下assertRaisesRegexp的实际应用示例

# _*_ coding:utf-8 _*_

__author__ = '苦叶子'
import
unittest
import re
import
sys reload(sys) sys.setdefaultencoding("utf-8")

# 除法函数
def div(a, b):    return a/b

# 测试用例
class demoRaiseTest(unittest.TestCase):    def test_raise_regexp(self):        self.assertRaisesRegexp(        ZeroDivisionError, "integer division or modulo by zero", div, 2, 0)
       # 主函数

if __name__ == '__main__':    unittest.main()

运行python test_raise_regexp.py上述示例,结果如下:

. -----------------------------------Ran 1 test in 0.001s OK

我们修改下除数,把

self.assertRaisesRegexp(        ZeroDivisionError, "integer division or modulo by zero", div, 2, 0)

改为:

self.assertRaisesRegexp(        ZeroDivisionError, "integer division or modulo by zero", div, 2, 2)

则执行失败,因为匹配失败了。

F ===================================
FAIL: test_raise_regexp (__main__.demoRaiseTest) ------------------------------------

Traceback (most recent call last):  File "test_raise_regexp.py", line 19,
 in test_raise_regexp
   
   ZeroDivisionError, "integer division or modulo by zero",

AssertionError: ZeroDivisionError not raised
------------------------------------ Ran 1 test in 0.001s FAILED (failures=1)

总结

今天我们就如何对被测对象的抛出的异常进行断言验证,做了基本的说明和示例,大家可以基于上述示例进行修改理解。深入掌握异常断言原理和方法。



更多精彩:

  1. webdriver介绍&与Selenium RC的比较

  2. Python Selenium Webdriver安装手册

  3. 创建你的第一个webdriver python代码

  4. 基于Excel参数化你的Selenium2测试

  5. Python Selenium设计模式-POM

  6. Python多线程Selenium跨浏览器测试

  7. python selenium2示例 - 生成 HTMLTestRunner 测试报告

  8. python selenium2示例 - email发送

  9. python selenium2示例 - SSL处理

  10. python selenium2示例 - 同步机制

  11. python selenium2示例 - 日志管理

  12. python selenium2源码分析概要

Hello,伙伴们长按二维码关注我们吧!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存