单元测试框架之unittest(四)
一、摘要
假设我们有一组测试方法差别非常小,比如仅仅是所需要的参数有少许变化时,我们的自动化测试如何进行?unittest框架为这种场景提供了一种方式,它允许我们用subTest()上下文管理器在一个测试方法内识别这种细小的不同,这么说可能有点晕
实际上我觉得还不如直接看代码更能清晰的表达它为我们的测试带来了什么
二、代码实例
# coding:utf-8
import unittest class NumbersTest(unittest.TestCase): def test_even(self):
"""
使用subTest上下文管理器,区分细小的变化
取模运算,返回除法的余数,但是参数是0到5的整数,没必要单独写方法
"""
for i in range(0, 6):
with self.subTest(i=i):
self.assertEqual(i % 2, 0) if __name__ == '__main__':
unittest.main()
执行这段代码的结果会是:
SubTest failure: Traceback (most recent call last):
File "C:\Python37\lib\unittest\case.py", line , in testPartExecutor
yield
File "C:\Python37\lib\unittest\case.py", line , in subTest
yield
File "D:\Programs\Python\Demo\unittest4\subtestDemo.py", line , in test_even
self.assertEqual(i % , )
File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.1\helpers\pycharm\teamcity\diff_tools.py", line , in _patched_equals
raise native_error
File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.1\helpers\pycharm\teamcity\diff_tools.py", line , in _patched_equals
old(self, first, second, msg)
File "C:\Python37\lib\unittest\case.py", line , in assertEqual
assertion_func(first, second, msg=msg)
File "C:\Python37\lib\unittest\case.py", line , in _baseAssertEqual
raise self.failureException(msg)
AssertionError: != SubTest failure: Traceback (most recent call last):
File "C:\Python37\lib\unittest\case.py", line , in testPartExecutor
yield
File "C:\Python37\lib\unittest\case.py", line , in subTest
yield
File "D:\Programs\Python\Demo\unittest4\subtestDemo.py", line , in test_even
self.assertEqual(i % , )
File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.1\helpers\pycharm\teamcity\diff_tools.py", line , in _patched_equals
raise native_error
File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.1\helpers\pycharm\teamcity\diff_tools.py", line , in _patched_equals
old(self, first, second, msg)
File "C:\Python37\lib\unittest\case.py", line , in assertEqual
assertion_func(first, second, msg=msg)
File "C:\Python37\lib\unittest\case.py", line , in _baseAssertEqual
raise self.failureException(msg)
AssertionError: != SubTest failure: Traceback (most recent call last):
File "C:\Python37\lib\unittest\case.py", line , in testPartExecutor
yield
File "C:\Python37\lib\unittest\case.py", line , in subTest
yield
File "D:\Programs\Python\Demo\unittest4\subtestDemo.py", line , in test_even
self.assertEqual(i % , )
File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.1\helpers\pycharm\teamcity\diff_tools.py", line , in _patched_equals
raise native_error
File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.1\helpers\pycharm\teamcity\diff_tools.py", line , in _patched_equals
old(self, first, second, msg)
File "C:\Python37\lib\unittest\case.py", line , in assertEqual
assertion_func(first, second, msg=msg)
File "C:\Python37\lib\unittest\case.py", line , in _baseAssertEqual
raise self.failureException(msg)
AssertionError: != One or more subtests failed
Failed subtests list: (i=), (i=), (i=) Ran test in .020s FAILED (failures=) Process finished with exit code
而如果我们不使用subTest(), 只是写个简单的循环去断言,当程序执行到第一个断言失败时就会终止了,后边可能还有断言能够成功的也就不会被执行了
# coding:utf-8
import unittest class NumbersTest(unittest.TestCase): def test_even(self):
for i in range(0, 6):
# with self.subTest(i=i):
print("当前参数是:%d" % i)
self.assertEqual(i % 2, 0) if __name__ == '__main__':
unittest.main()
执行结果会是:
当前参数是:
当前参数是: Ran test in .010s FAILED (failures=) != Expected :
Actual :
<Click to see difference> Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.3.1\helpers\pycharm\teamcity\diff_tools.py", line , in _patched_equals
old(self, first, second, msg)
File "C:\Python37\lib\unittest\case.py", line , in assertEqual
assertion_func(first, second, msg=msg)
File "C:\Python37\lib\unittest\case.py", line , in _baseAssertEqual
raise self.failureException(msg)
AssertionError: != During handling of the above exception, another exception occurred: Traceback (most recent call last):
File "C:\Python37\lib\unittest\case.py", line , in testPartExecutor
yield
File "C:\Python37\lib\unittest\case.py", line , in run
testMethod()
File "D:\Programs\Python\Demo\unittest4\subtestDemo.py", line , in test_even
self.assertEqual(i % , ) Process finished with exit code
单元测试框架之unittest(四)的更多相关文章
- 单元测试框架之unittest(七)
一.摘要 前篇文章已经详细介绍了unittest框架的特性,足以满足我们日常的测试工作,但那并不是unittest的全部,本片博文将介绍一些应该知道但未必能经常用到的内容 然而,想全部掌握unitte ...
- Python单元测试框架:unittest(一)
Python单元测试框架unittest使用方法讲解 主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测 ...
- unittest单元测试框架之unittest 框架的总结(七)
1. Unittest 是 python 自带的单元测试框架,可以用其作为自动化框架来组织测试用例(测 试用例的执行顺序)的执行. 2. Unittest 框架的流程: 写好 TestCase 通过 ...
- 单元测试框架之unittest(一)
一.单元测试的含义 unittest单元测试框架的设计灵感来源于Junit(Java语言的单元测试框架),它与其他语言的单元测试框架风格相类似,支持自动化测试.为测试共享setUp和shutDown. ...
- unittest单元测试框架之unittest 框架的总结2(八)
unittest 下的属性 1.Unittest.TestCase:所有测试用例类继承的基本类 2.Unittest.main():将一个单元测试模块变为可直接运行的测试脚本 If __name__ ...
- 单元测试框架之unittest(六)
一.摘要 本片博文将介绍unittest框架的一些轻便有效的特性,在我们的测试中经常可以用到 如果有一些测试方法不想执行,如果有些测试方法在某些条件下不执行 该当如何? 如果有些方法未在unittes ...
- 单元测试框架之unittest(二)
一.摘要 本章笔者将详细介绍组织测试代码的相关内容,所用的测试例子会是冒泡排序,笔者在从业这么久之后回想很多面试都要问冒泡排序,虽然不知道为什么要问这个,但还是希望大家掌握,它与自动化测试关系不大属于 ...
- 单元测试框架之unittest(五)
一.摘要 单元测试里很重要的一个部分就是断言,unittest为我们提供了很多断言方法,断言方法分为三类,一种是用来断言被测试的方法的,另一种是测试是否抛正确异常的,第三种是用来断言日志是否包含应有信 ...
- 单元测试框架之unittest(三)
一.摘要 前边的文章我们看到执行测试用例的是通过调用unittest.mian()函数,它会将模块的测试用例收集起来并执行,然而当我们的测试用例增多了以后,这样的执行非常不灵活而且没有效率,我们更愿意 ...
随机推荐
- 基于springJDBC手写ORM框架
一.添加MySQLjar包依赖 二.结构 三.文件内容 (一).bean包 1.ColumnInfo.java 2.javaFiledInfo.java 3.TableInfo.java 4.Conf ...
- 封装Json+日志
/** * 输出json * @param $msg * @param int $errno */ public function printOutError($msg = '操作失败', $errn ...
- Java面试题代码篇
1.统计字符串中的各种字符的个数并对其排序 package JavaMianSiTest; public class TongJIZiFu { public static void main(Stri ...
- (四)Resquest 知识点总结 (来自那些年的笔记)
目录 URL和URI的区别 获取URL.URI 什么是HttpServletResquest 获取请求头中字段的内容 获取请求信息的数据 将客户机的请求变为一个流返回 常用的方法 request乱码问 ...
- gdb 常用命令总结(精优)
格式说明: [xxx]:可选参数,即可以指定可以不指定,实际输入的内容是 xxx <xxx>:占位参数,即必须指定的参数,实际输入的内容是 xxx gdb 常用命令: gdb [file] ...
- 使用不同代理IP刷票的脚本---requests
投票功能限制刷票是通过限制单个IP的投票次数实现的,所以写了个脚本用于测试此功能. #-*- coding=utf-8 -*- ''' 功能:此脚本用于用不同的IP刷票 作者:Elle 最后修改日期: ...
- 20191011-构建我们公司自己的自动化接口测试框架-ProVar模块
ProVar模块主要定义测试数据所在目录,以及定义变量和测试数据excel里面的column对应这样后续在进行excel操作的时候直接使用变量即可进行操作,后期excel的column有增删的时候,修 ...
- 使用Python比较MySQL数据库中两个数据库的表结构--转载
https://blog.csdn.net/tenaguan4461/article/details/82286781 https://www.jianshu.com/p/b3dac5a3479a
- double check
http://www.cnblogs.com/limingluzhu/p/5156659.html http://blog.csdn.net/chenchaofuck1/article/details ...
- (二)XML基础(2)
三.解析 服务端解析 JDK: DOM SAX JAXB java and xml Binding 开源(一般都是用开源的) ...