unittest单元测试框架

先贴一下unittest官网地址。unittest文档开头介绍了四个重要的概念:test fixture,test case, test suite, test runner。

test fixture

test fixture表示执行一个或多个测试所需的准备。怎么去理解这句话呢?比如我们执行一条创建文章的测试用例,但是如果我们调用创建文章的接口,需要我们进行登录。那么我们可以把登录作为一个test fixture。

test case

测试用例,这个不必多说,没有测试用例就不能叫做接口测试了。

test suite

我们在做接口测试的时候,一般都是执行多条测试用例。这就有了test suite概念,简单来说,就是把想要执行的测试用例进行组装然后进行测试。

test  runner

执行测试用例。

为了方便大家的理解,会用一个实例对上面四个概念进行解释。请看如下代码:

import unittest

class AddTest(unittest.TestCase):
def setUp(self):
print("在每个用例执行之前") def tearDown(self):
print("在每个用例执行之后") @classmethod
def setUpClass(cls):
print("在用例执行之前,只执行一次,优先于setUp") @classmethod
def tearDownClass(cls):
print("所有用例运行之后只执行一次") def add(self, a, b):
if type(a) == int and type(b) == int:
return a + b
else:
return "请输入数字" def test_add1(self):
self.assertEqual(self.add(2, 3), 5, "验证加法") def test_add2(self):
self.assertEqual(self.add(2, 4), 6, "验证加法") if __name__ == '__main__':
# unittest.main()
# test suite(构造测试集)
suite = unittest.TestSuite()
suite.addTest(AddTest("test_add1"))
suite.addTest(AddTest("test_add2"))
# test runner (执行测试)
runner = unittest.TextTestRunner()
runner.run(suite)

上面代码输出如下内容:

在用例执行之前,只执行一次,优先于setUp

在每个用例执行之前

在每个用例执行之后

在每个用例执行之前

在每个用例执行之后

所有用例运行之后只执行一次

我们来根据代码拆解一下,看哪部分对应test fixture,test case, test suite, test runner。首先,在使用unittest单元测试框架之前,我们需要导包,我们先import unittest,然后创建一个AddTest类,这个类继承unittest.TestCase。然后我们创建一个add方法(注意:一般类中的函数我们称作为方法),然后创建了2条测试用例test_add1,test_add2,注意!测试用例必须以test开头!然后使用test fixture中setUp、tearDown、setUpClass 、tearDownClass。然后使用test suite把2条测试用例加进去,当然需要注意一点,用例执行是有顺序的(按照 ASCII 码的从小到大的顺序),比如test_add1和test_add2,前面都是一样的,但是最后1位1排在2前面,所以先执行1,最后使用test runner执行测试用例。到这里想必大家都已经明白。最后画一张思维导图,更方便大家的理解。

细心的人可以看到,测试用例中有一个assertEqual,这就是我们说比assert更好用的断言,那么这些断言有哪些呢?请看下面表格:

Method Checks that
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)

小结:本章内容只是简单介绍了一下unittest的使用方法以及相关概念,unittest框架使用起来很简单也很方便,建议大家多去官网学习,当然不管是UI自动化也好,还是接口自动化也好,如果使用Python实现,一般都不会绕过Unittest这个概念,希望大家可以熟练掌握。

欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560

27. Unittest单元测试框架的介绍与使用的更多相关文章

  1. Python+selenium之简单介绍unittest单元测试框架

    Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...

  2. Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

  3. unittest单元测试框架

    unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...

  4. Selenium(十七):unittest单元测试框架(三) 脚本分析、编写Web用例

    1. 带unittest的脚本分析 也许你现在心里还有疑问,unittest框架与我们前面所编写的Web自动化测试之间有什么必然联系吗?当然有,既然unittest可以组织.运行测试用例,那么为什么不 ...

  5. Selenium(十六):unittest单元测试框架(二) 初识unittest(续)

    1. 认识unittest(续) 关于unittest单元测试框架,还有一些问题值得进一步探讨.你可能在前一章的学习过程中产生了一些疑问,也许你会在本节中找到答案. 1.1 用例执行的顺序 用例的执行 ...

  6. Selenium(十五):unittest单元测试框架(一) 初识unittest

    1. 认识unittest 什么是单元测试?单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误.在python语言下 ...

  7. unittest单元测试框架前言

    一.在我们没有学习过python语言的时候领导让我们做接口测试 我们都使用工具来做测试,一般常用的如jemeter,postman这些个工具,我来推荐使用postman 这个工具来进行接口测试,有的小 ...

  8. unittest单元测试框架总结

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

  9. unittest单元测试框架详解

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

随机推荐

  1. Java学习之多线程(定义)

    进程:正在运行中的程序线程:负责执行程序的控制单元(执行路径)一个进程中可以有多个执行路径,称之为多线程一个进程中至少要有一个线程 创建新执行线程有两种方式 一.继承Thread类步骤:1.定义一个类 ...

  2. 关系型数据库MySQL(二)_索引

    优点 大大加快数据的查询速度 创建唯一性索引,保证数据库表中每一行数据的唯一性 在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间 缺点 索引需要占物理空间 当对表中的数据进行增删 ...

  3. 整理eclipse,升级jdk环境小记录

    这2天在整理项目: 需要把eclipse 32位,jdk1.6 32位的更改为eclipse 64位,jdk1.8 64位版本的,于是我就在一台window7的电脑上直接操作,遇到了一下几点问题,记录 ...

  4. Scala中下划线的总结

    1. 方法转化为函数 2. 集合中的每一个元素 3. 获取元组Tuple中的元素 4. 模式匹配 5. 队列 6. 导包引入的时候 7. 初始化变量 引用自:https://blog.csdn.net ...

  5. Logback配置,error和普通日志分离

    <?xml version="1.0" encoding="utf-8"?> <configuration> <springPro ...

  6. send csv to es with filebeat

    ## filebeat *.csv 2019-11-30 23:27:50,111111,222222,VIEW,333333333333 filebeat filebeat.inputs:- pat ...

  7. IE历史纪录

    signed int __cdecl sub_475790(_BYTE *a1) { signed int result; // eax DWORD v2; // [esp+10h] [ebp-10h ...

  8. 使用IntelliJ IDEA 15和Maven创建Java Web项目(转)

    转自:https://blog.csdn.net/myarrow/article/details/50824793 1. Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和 ...

  9. 力扣 —— Two Sum ( 两数之和) python实现

    题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...

  10. 从零开始做一个Android自动化

    移动端自动化简单说就是,写好操作app的程序,运行起来,自动执行程序和测试用例,输出执行结果,结果正确,测试通过. 自动化可以方便地完成安装/卸载.启动/运行.UI适配等环节,节省时间: 同一测试脚本 ...