unittest 测试

  • 单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。

    比如对函数abs(),我们可以编写出以下几个测试用例:

    1. 输入正数,比如11.20.99,期待返回值与输入相同;
    2. 输入负数,比如-1-1.2-0.99,期待返回值与输入相反;
    3. 输入0,期待返回0
    4. 输入非数值类型,比如None[]{},期待抛出TypeError

    把上面的测试用例放到一个测试模块里,就是一个完整的单元测试。

  • 好处

    确保一个程序模块的行为符合我们设计的测试用例。在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。

import unittestclass Dict(dict):def __init__(self, **kw):super().__init__(**kw)def __getattr__(self, key):try:return self[key]except KeyError:raise AttributeError(r"'Dict' object has no attribute '%s'" % key)def __setattr__(self, key, value):self[key] = value""" 单元测试类 测试Dict"""
class TestDict(unittest.TestCase):def test_init(self):d = Dict(a=1, b='test')self.assertEqual(d.a, 1)self.assertEqual(d.b, 'test')self.assertTrue(isinstance(d, dict))def test_key(self):d = Dict()d['key'] = 'value'self.assertEqual(d.key, 'value')def test_attr(self):d = Dict()d.key = 'value'self.assertTrue('key' in d)self.assertEqual(d['key'], 'value')def test_keyerror(self):d = Dict()with self.assertRaises(KeyError):value = d['empty']def test_attrerror(self):d = Dict()with self.assertRaises(AttributeError):value = d.emptyclass Student(object):def __init__(self, name, score):self.name = nameself.score = scoredef get_grade(self):if self.score < 0 or self.score > 100:raise ValueError("d你是沙巴")if self.score >= 80:return 'A'if self.score >= 60:return 'B'return 'C'""" 单元测试类 测试 Student 类"""
class TestStudent(unittest.TestCase):def test_80_to_100(self):s1 = Student('Bart', 80)s2 = Student('Lisa', 100)self.assertEqual(s1.get_grade(), 'A')self.assertEqual(s2.get_grade(), 'A')def test_60_to_80(self):s1 = Student('Bart', 60)s2 = Student('Lisa', 79)self.assertEqual(s1.get_grade(), 'B')self.assertEqual(s2.get_grade(), 'B')def test_0_to_60(self):s1 = Student('Bart', 0)s2 = Student('Lisa', 59)self.assertEqual(s1.get_grade(), 'C')self.assertEqual(s2.get_grade(), 'C')def test_invalid(self):s1 = Student('Bart', -1)s2 = Student('Lisa', 101)with self.assertRaises(ValueError):s1.get_grade()with self.assertRaises(ValueError):s2.get_grade()if __name__ == '__main__':unittest.main()

setUp与tearDown

可以在单元测试中编写两个特殊的setUp()tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。

setUp()tearDown()方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码:

class TestDict(unittest.TestCase):def setUp(self):""" 开始前提供测试数据 """print('setUp...')def tearDown(self):print('tearDown...')

各种断言方法

方法 用途
assertEqual(a, b) 核实a == b
assertNotEqual(a, b) 核实a != b
assertTrue(x) 核实x 为True
assertFalse(x) 核实x 为False
assertIn(item , list ) 核实 item 在 list 中
assertNotIn(item , list ) 核实 item 不在 list 中

转载于:https://www.cnblogs.com/zhang-zi-yi/p/10793311.html

unittest 测试相关推荐

  1. 基于Python的接口自动化unittest测试框架和ddt数据驱动详解

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  2. python的unittest测试类代码实例

    nittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者就 ...

  3. 自动化测试unittest测试框架实例

    本文采用unittest测试框架搭建一个简单的自动化测试实例,完成readmine网站的登录和新建项目用例,并生成测试报告. test_login文件 import unittest from sel ...

  4. UnitTest测试框架全栈详解

    金字塔模型 从软件架构的⻆度来说,测试最重要的步骤是在软件开发的时候界入比较好,所以在早期测试的界入,从软件经济学的⻆度上来说,发现的问题解决成本低,投入的资源比较少.因此,对一个测试的系统,开始最佳 ...

  5. 一、Pytest自动化测试框架 — Pytest和unittest测试框架原理

    目录 前言 ###文章内容有配套的学习视频和笔记都放在了文章末尾### 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5 ...

  6. unittest 测试框架

    文章目录 一.unittest测试框架 1.测试固件 1.1 setUp() 1.2 tearDown() 2.unittest 基本使用 3.测试套件(suit) 3.1 测试用例执行顺序 3.2 ...

  7. unittest测试框架_python接口自动化测试 - 4.unittest单元测试框架学习

    简介 unittest就是python的一个单元测试框架,unittest非常适合做自动化测试. 官方源码栗子: import unittestclass IntegerArithmeticTestC ...

  8. python+selenium+unittest测试框架1-unittest单元测试框架和断言

    unittest单元测试框架和断言 一.unittest单元测试框架简介 1.导入unittest模块 import unittest 2.定义测试类 class Login(unittest.Tes ...

  9. unittest测试框架详谈及实操(四)

    测试套件 应用unittest的Test Suite特性,可以将不同的测试组成一个逻辑组,然后设置统一的测试套来一起执行测试.通过TestSuite.TestLoader类来创建测试套件,最后用Tes ...

  10. po模型+unittest测试

    po模型 一.PO模型介绍 二.PO的核心 三.非op模型实现 四.op模型实现 1.包含内容 2.代码实现(多页面) 一.PO模型介绍 在自动化中,Selenium自动化测试中有一个名字经常被提及P ...

最新文章

  1. 网站推广——网站推广专员面对新站收录展开多角度思考
  2. android sdk投屏,海豚星空扫码投屏 Android 接收端 SDK 集成 六步骤
  3. CodeForces - 1208F Bits And Pieces(SOSdp+贪心)
  4. Linux 共享内存详解一
  5. [转]被当做狗和鸡来驱赶的百姓
  6. java.equal例子_Java中的== 和equals()方法详解与实例
  7. Python中的一些特殊函数
  8. Java中字符串中子串的查找共有四种方法(indexof())
  9. java静态变量初始化顺序,赶快收藏备战金九银十!
  10. 股票分析之主力资金排序分析
  11. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 04课
  12. 对variable-sized object may not be initialized的一点理解
  13. c语言排列10个数字的大小,[求助][C语言求助]输入10个数字,并将这些数字由大到小排列...
  14. 【图文教程】文件压缩和打包
  15. CentOS命令之一
  16. 【报告分享】2021中国消费者洞察-埃森哲(附下载)
  17. 基本DOS命令---3.修改文件夹和文件属性
  18. GPU与深度学习和药物开发
  19. 上海市2019年公务员录用考试第一轮首批面试名单(A类)
  20. Fzu 2255 过河【Dp】好题!

热门文章

  1. 对《构建之法——现代软件工程》13-17章的困惑与思考
  2. winform 报表的基本使用
  3. Nginx代理服务器使用
  4. 用微软的压力测试工具进行拒绝服务攻击
  5. 你能在windows上创建一个叫做AUX的文件夹吗?
  6. Oracle笔记(九) 表的创建及管理
  7. Spring mybatis thymeleaf 基础操作,实现数据展示,修改,删除,查询
  8. Java继承(extends)的实现和 instanceof 运算符的使用
  9. mysql5.7 主从数据库操作命令
  10. PhotoZoom放大图片,真的能无损吗?