一、摘要

本章笔者将详细介绍组织测试代码的相关内容,所用的测试例子会是冒泡排序,笔者在从业这么久之后回想很多面试都要问冒泡排序,虽然不知道为什么要问这个,但还是希望大家掌握,它与自动化测试关系不大属于python的基础范畴

在上一篇内容中我们展示了一个小例子,在代码的前两行是如下内容

import unittest
class TestStringMethods(unittest.TestCase):

它的意义何在呢? import unittest 导入unittest模块,使得我们可以使用它,class TestStringMethods(unittest.TestCase): 新创建的测试类继承了unittest.TestCase,使得我们可以是使用TestCase里的特性

那么它有哪些主要特性呢?

1、测试用例,当我们的测试类继承了unittest.TestCase,若以“def test_xxx(self):”这样的命名方式(test开头)在测试类中定义函数时,它就会被unittest认为是一条测试方法;然而就像我们做手动测试用例的时候,总有一些原则在,那么在写自动化测试用例时有哪些主要的原则呢?

  • 每一个测试用例必须是完全独立的,从而能够单独执行,也可以组团执行
  • 每一个测试用例必须有断言,从而在测试失败的情况下断言异常和一条解释性的语句(AssertionError)将会抛出,此时unittest将会将这条用例标识为失败,其他的异常类型将会被认为是错误(error)
  • 在设计测试用例时要尽可能考虑后续维护的问题,我们要尽可能的减少修改测试代码,从而能够满足快速的迭代测试

2、setUp():这个函数也继承自unittest.TestCase,它的作用是用来完成每一个测试方法执行前的准备工作,如果setUp()方法执行的时候出现异常,那么unittest框架认为测试出现了错误,测试方法是不会被执行的

3、tearDown(): 同样继承自unittest.TestCase,它的作用是每一个测试方法执行完后的清理工作,如果setUp()执行成功,那么测试方法执行成功还是失败,tearDown()方法都会被执行

4、setUpClass(): 同样继承自unittest.TestCase,它的作用是完成在所有测试方法执行前(包括setUp()),单元测试的前期准备工作,必须用@classmethod修饰,整个测试类只执行一次

5、tearDownClass(): 同样继承自unittest.TestCase,它的作用是完成在所有测试方法执行后(包括tearDown()),单元测试的清理工作,必须用@classmethod修饰,整个测试类只执行一次

6、还有一种特例,最简单的测试用例只需要通过覆盖runTest()方法来执行自定义的测试代码,我们称之为静态方法,测试方法名不能重复,也意味着测试类中只能有一个runTest()方法,很显然这样的方式会导致很多冗余代码

7、使用了1到5测试特性构建测试用例的,我们称之为动态方法

二、实例代码

下边将用实例代码详细展示如上概念,待测代码如下

class BubbleSort(object):
def __init__(self, mylist):
self.myList = mylist
self.length = len(mylist) def ascending_order(self):
for i in range(self.length-1):
for j in range(self.length-1-i):
if self.myList[j] > self.myList[j + 1]:
self.myList[j], self.myList[j+1] = self.myList[j+1], self.myList[j]
return self.myList def descending_order(self):
for i in range(self.length-1):
for j in range(self.length-1-i):
if self.myList[j] < self.myList[j + 1]:
self.myList[j], self.myList[j+1] = self.myList[j+1], self.myList[j]
return self.myList

测试代码如下:

import unittest
from Util.BubbleSort import BubbleSort class TestBubbleSort(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("execute setUpClass\n") @classmethod
def tearDownClass(cls):
print("execute tearDownClass\n") def setUp(self):
self.list1 = [2, 10, 25, 30, 45, 100, 325]
self.list3 = [325, 10, 25, 45, 30, 100, 2]
self.list4 = [11, 3, 41, 101, 327, 26, 46]
self.list2 = [327, 101, 46, 41, 26, 11, 3] def tearDown(self):
print("execute tearDown\n") def test_descending_order(self):
bls = BubbleSort(self.list4)
self.list5 = bls.descending_order()
print(self.list5)
self.assertEqual(self.list5, self.list2) def test_ascending_order(self):
bls = BubbleSort(self.list3)
self.list6 = bls.ascending_order()
print(self.list6)
self.assertEqual(self.list6, self.list1) if __name__ == '__main__':
unittest.main()

执行结果应该是

..
execute setUpClass
---------------------------------------------------------------------- Ran tests in .001s [, , , , , , ]
OK
execute tearDown [, , , , , , ]
execute tearDown execute tearDownClass Process finished with exit code

三、代码解析

从测试用例的设计和运行结果结合看,一一印证了摘要当中提及的TestCase的特性

单元测试框架之unittest(二)的更多相关文章

  1. 单元测试框架之unittest(七)

    一.摘要 前篇文章已经详细介绍了unittest框架的特性,足以满足我们日常的测试工作,但那并不是unittest的全部,本片博文将介绍一些应该知道但未必能经常用到的内容 然而,想全部掌握unitte ...

  2. 单元测试框架之unittest(一)

    一.单元测试的含义 unittest单元测试框架的设计灵感来源于Junit(Java语言的单元测试框架),它与其他语言的单元测试框架风格相类似,支持自动化测试.为测试共享setUp和shutDown. ...

  3. Python单元测试框架:unittest(一)

    Python单元测试框架unittest使用方法讲解 主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测 ...

  4. unittest单元测试框架之unittest 框架的总结(七)

    1. Unittest 是 python 自带的单元测试框架,可以用其作为自动化框架来组织测试用例(测 试用例的执行顺序)的执行. 2. Unittest 框架的流程: 写好 TestCase 通过 ...

  5. Python单元测试框架:unittest(二)

    一.直接使用TestCase 注意所有测试方法都需要以test开头.代码如下: import unittest class Test1(unittest.TestCase): @classmethod ...

  6. unittest单元测试框架之unittest案例(二)

    1.待测方法: # 加法,返回 a+b 的值 def add(a,b): return a+b # 减法,返回 a-b 的值 def minus(a,b): return a-b # 乘法,返回 a* ...

  7. 单元测试框架之unittest(六)

    一.摘要 本片博文将介绍unittest框架的一些轻便有效的特性,在我们的测试中经常可以用到 如果有一些测试方法不想执行,如果有些测试方法在某些条件下不执行 该当如何? 如果有些方法未在unittes ...

  8. unittest单元测试框架之unittest 框架的总结2(八)

    unittest 下的属性 1.Unittest.TestCase:所有测试用例类继承的基本类 2.Unittest.main():将一个单元测试模块变为可直接运行的测试脚本 If __name__ ...

  9. 单元测试框架之unittest(五)

    一.摘要 单元测试里很重要的一个部分就是断言,unittest为我们提供了很多断言方法,断言方法分为三类,一种是用来断言被测试的方法的,另一种是测试是否抛正确异常的,第三种是用来断言日志是否包含应有信 ...

随机推荐

  1. .Net中委托的协变和逆变详解

    关于协变和逆变要从面向对象继承说起.继承关系是指子类和父类之间的关系:子类从父类继承所以子类的实例也就是父类的实例.比如说Animal是父类,Dog是从Animal继承的子类:如果一个对象的类型是Do ...

  2. Python函数或者类的时间参数的默认值设为datetime.date.today()引起的问题

    定义了函数def main(start_date=datetime.date.today(), end_date=datetime.date.today()): pass 函数在项目启动后, end_ ...

  3. [转帖]1A2C多口充 紫米USB充电器65W桌面快充版评测

    1A2C多口充 紫米USB充电器65W桌面快充版评测 2019年10月04日 07:48 1786 次阅读 稿源:充电头网 1 条评论 https://www.cnbeta.com/articles/ ...

  4. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  5. db2 数据库配置HADR+TSA添加集群节点

    Db2配置HADR高可用+TSA添加集群节点 一.服务器资源 Master IP:10.78.10.1 数据库:dbclassSlave IP:10.78.10.2 数据库:dbclassVIP:10 ...

  6. 解决 windows oracle ORA-01113和ORA-01110错误

    windows2008上的数据库版本为11.2.0.4.0,数据库打开为mount状态.报错如下: SQL> startup ORACLE instance started. Total Sys ...

  7. python2.7 编码问题

    python 2.7编码问题,着实令人头疼不已,这两天抽闲想真正弄明白.需要弄清楚这个问题,首先需要明白ASCII,Unicode 和 UTF-8之间的关系. 进行对上述几种概念进行描述之前,先进行简 ...

  8. adb 安装 app/apk链接不上设备和安装出现failed_install_user_restricted的解决方法

    1.手机链接电脑,保持网段一致,通过ping 看是否可以ping通 2.如果可以ping通,查看telnet ip 5555 看是否可以连接 3.如果无法连接查看手机是否开启开发者模式中的debug模 ...

  9. (六)Hibernate的增删改查操作(3)

    一.在Hibernate中使用原生SQL语句 sql语句面向的是数据库,所以sql语句中对应的不再是bean了,比如sql="select * from user"   在hql中 ...

  10. 生成 excel 插件 Epplus

    最近做 .net core 项目 发现一个新的 生成excel 的插件 . 以前值用 aspose 或者 npio. 简介:Epplus是一个使用Open Office XML(Xlsx)文件格式,能 ...