Python unittest框架操作实例解析

操作步骤

  • 导入框架,import unitest
  • 测试类必须继承类:.class 类名(unittest.TestCase):
  • 在类中所有定义testXXX(区分大小写)开头的函数都是可执行的测试用例
  • 钩子方法setUp(每个测试用例前执行)、tearDown(每个测试用例后执行)
  • 执行用例unitest.main()
  • 断言

常用断言

方法 等价于 描述
assertEqual(a,b) a==b 值是否相等
aassertNotEqual(a,b) a!=b 值是否不相等
aasserIs(a,b) a is b 值是否相同
aassertIsNot(a,b) a is not b 值是否不同
assertIn(a,b) a in b a是否包含b
assertNotIn(a,b) a not in b a是否不包含b
ssertTrue(a) bool(a) is true 是否为真
assertFalse(a) bool(a)is false 是否为假
assertIsNone(a) a is None 是否为空
assertIsNotNone(a) a is None 是否不为空
assertIsInstance(a,b) Instance(a,b) a与b的数据类型一样
assertNotIsInstance(a) not Instance(a,b) a与b的数据类型不一样

举例说明

#!/usr/bin/python3
# encoding:utf-8
'''
Created on 2019-10-12
@author: EDZ
'''
#!/usr/bin/python3
# encoding:utf-8
import unittest

#继承unittest基类
class un_test(unittest.TestCase):
  def setUp(self):
    print("钩子方法,每个用例执行前执行")
  def tearDown(self):
    print("钩子方法,每个用例执行后执行")
  #必须testXXX命名函数才会被执行
  def test_Equal(self):
    print('1.assertEqual值相同')
    a='中国'
    b='中国'
    self.assertEqual(a,b)
  def test_Is(self):
    a='中国'
    b='中国'
    print('2.assertIs值相同')
    self.assertIs(a,b)
  def test_Instance(self):
    a = 'aaa'
    b = [1,2,3,4]
    print(type(a),type(b),"3.数据类型不相等")
    self.assertNotIsInstance(type(a),type(b))
  def cf(self,a,b):
    return a/b
  def test_rasi(self):
    print('4.1/0抛出异常')
    self.assertRaises(ZeroDivisionError,self.cf,1,0)

if __name__=="__main__":
  #unittest执行本类全部testXXX命名的测试用例
  unittest.main()
  #-----------下面为特殊加载方式-------------------
  '''
  #通过文件模块加载(loadTestsFromModule)
  suite = unittest.TestSuite()
  loader = unittest.TestLoader()#用例加载器
  #文件模块名,例如有文件moku.py 第一步:import moku loader.loadTestsFromModule(文件名)
  suite.addTest(loader.loadTestsFromModule(moku))

  #通过测试类来加载(loadTestsFromTestCase)
  suite = unittest.TestSuite()
  loader = unittest.TestLoader()#用例加载器
  #例如有文件moku.py 其中有类名classT 第一步导入类:from moku import classT (loader.loadTestsFromTestCase(classT))#类名
  suite.addTest(loader.loadTestsFromTestCase(un_test))#如果类在本文件模块内直接加载。

  #一个一个添加
  suite = unittest.TestSuite()
  suite.addTest(un_test('test_Equal'))#(类名('函数'))

  #测试用例数较多时,采用defaultTestLoader.discover()方式
  suite = unittest.defaultTestLoader.discover('./',pattern='y*.py', top_level_dir=None)
  #1、因为unittest中规定,测试用例必须test开头,所以discover中的pattern格式才是test*.py
  #2、start_dir是存放测试用例的目录
  #pattern='test*.py':表示用例文件名的匹配原则。此处匹配以“test”开头的.py 类型的文件,* 表示任意多个字符
  #top_level_dir= None 测试模块的顶层目录,如果没有顶层目录,默认为None

  runner = unittest.TextTestRunner(verbosity=2)
  runner.run(suite)

      这里的verbosity是一个选项,表示测试结果的信息复杂度,有三个值
      0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
      1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
      2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
      并且 你在命令行里加入不同的参数可以起到一样的效果
      加入 --quiet 参数 等效于 verbosity=0
      加入--verbose参数等效于 verbosity=2
      什么都不加就是 verbosity=1</pre>
  '''

运行结果

钩子方法,每个用例执行前执行
1.assertEqual值相同
钩子方法,每个用例执行后执行
钩子方法,每个用例执行前执行
<class 'str'> <class 'list'> 3.数据类型不相等
钩子方法,每个用例执行后执行
钩子方法,每个用例执行前执行
2.assertIs值相同
钩子方法,每个用例执行后执行
钩子方法,每个用例执行前执行
4.1/0抛出异常
钩子方法,每个用例执行后执行
Ran 4 tests in 0.001s
OK
说明:钩子方法每个用例都执行,Ran 4 表示成功执行4个testXXX的测试用例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python Unittest自动化单元测试框架详解

    本文实例为大家分享了Python Unittest自动化单元测试框架的具体代码,供大家参考,具体内容如下 1.python 测试框架(本文只涉及 PyUnit) 参考地址 2.环境准备 首先确定已经安装有Python,之后通过安装PyUnit,Python版本比较新的已经集成有PyUnit(PyUnit 提供了一个图形测试界面UnittestGUI.py) 参考:查看地址 3.代码实例 使用的IDE为 PyCharm,DEMO结构如图 1.简单地一个实例 # Test002_Fail.py #

  • Python+request+unittest实现接口测试框架集成实例

    1.为什么要写代码实现接口自动化 大家知道很多接口测试工具可以实现对接口的测试,如postman.jmeter.fiddler等等,而且使用方便,那么为什么还要写代码实现接口自动化呢?工具虽然方便,但也不足之处: 测试数据不可控制 接口测试本质是对数据的测试,调用接口,输入一些数据,随后,接口返回一些数据.验证接口返回数据的正确性.在用工具运行测试用例之前不得不手动向数据库中插入测试数据.这样我们的接口测试是不是就没有那么"自动化了". 无法测试加密接口 这是接口测试工具的一大硬伤,如

  • Python unittest单元测试框架的使用

    一.测试模型 下面这部分来自于某书籍资料,拿过来,按需参考一下: 测试模型 (1)线性测试 1.概念: 通过录制或编写对应应用程序的操作步骤产生的线性脚本.单纯的来模拟用户完整的操作场景.(操作,重复操作,数据)都混合在一起. 2.优点:每个脚本相对独立,且不产生其他依赖和调用.任何一个测试用例脚本拿出来都可以单独执行. 3.缺点:开发成本高,用例之间存在重复的操作.比如重复的用户登录和退出. 维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改. 4.线性测试实例:用户

  • Python中Unittest框架的具体使用

    Unittest 1.环境 Unittest为Python内嵌的测试框架,不需要特殊配置,仅需要在File---settings---Tools----Python Intergrated Tools下配置框架为Unittest 2.编写规范 需要导入 import unittest 测试类必须继承unittest.TestCase 测试方法以 test_开头 模块和类名没有要求 3.Unittest介绍 import unittest def add(x, y): return x + y d

  • Python单元测试框架unittest使用方法讲解

    概述 1.测试脚手架(test fixture) 测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown(). 2.测试案例(test case) 最小的测试单元. 3.测试套件(test suite) 测试案例的集合. 4.测试运行器(test runner) 测试执行的组件. 命令行接口 可以用命令行运行测试模块,测试类以及测试方法. 复制代码 代码如下: python -m unittest test_module1 test_module2 python -m

  • Python unittest单元测试框架总结

    什么是单元测试 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对于函数abs(),我们可以编写的测试用例为: (1)输入正数,比如1.1.2.0.99,期待返回值与输入相同 (2)输入复数,比如-1.-1.2.-0.99,期待返回值与输入相反 (3)输入0,期待返回0 (4)输入非数值类型,比如None.[].{}.期待抛出TypeError 把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试  unittest工作原理 unittest中最核心的四部分

  • 详解python单元测试框架unittest

    一:unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的. 基本用法如下: 1.用import unittest导入unittest模块 2.定义一个继承自unittest.TestCase的测试用例类,如 class abcd(unittest.TestCase): 3.定义setUp和tearDown,这两个方法与junit相同,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法. 4.定义测试用例,

  • Python单元测试框架unittest简明使用实例

    测试步骤 1. 导入unittest模块 import unittest 2. 编写测试的类继承unittest.TestCase class Tester(unittest.TestCase) 3. 编写测试的方法必须以test开头 def test_add(self) def test_sub(self) 4.使用TestCase class提供的方法测试功能点 5.调用unittest.main()方法运行所有以test开头的方法 复制代码 代码如下: if __name__ == '__

  • Python unittest框架操作实例解析

    操作步骤 导入框架,import unitest 测试类必须继承类:.class 类名(unittest.TestCase): 在类中所有定义testXXX(区分大小写)开头的函数都是可执行的测试用例 钩子方法setUp(每个测试用例前执行).tearDown(每个测试用例后执行) 执行用例unitest.main() 断言 常用断言 方法 等价于 描述 assertEqual(a,b) a==b 值是否相等 aassertNotEqual(a,b) a!=b 值是否不相等 aasserIs(a

  • Python单元测试及unittest框架用法实例解析

    例题取用登录模块:代码如下 def login_check(username,password): ''' 登录校验的函数 :param username:账号 :param password: 密码 :return: ''' if 6<=len(password)<=18: if username=='admin' and password=='123456': return {'code':0,'msg':'登录成功'} else: return {'code':1,'msg':'账号密码

  • python删除过期log文件操作实例解析

    本文研究的主要是python删除过期log文件的相关内容,具体介绍如下. 1. 用Python遍历目录 os.walk方法可以很方便的得到目录下的所有文件,会返回一个三元的tupple(dirpath, dirnames, filenames),其中,dirpath是代表目录的路径,dirnames是一个list,包含了dirpath下的所有子目录的名字,filenames是一个list,包含了非目录的文件,如果需要得到全路径,需要使用os.path.join(dirpath,name).例如t

  • Python列表切片常用操作实例解析

    这篇文章主要介绍了Python列表切片常用操作实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近在爬一个网站的文档的时候,老师要求把一段文字切割开来,根据中间的文本分成两段 故学习了一段时间的切片操作,现把学习成果po上来与大家分享 1.何为切片? 列表的切片就是处理列表中的部分元素,是把整个列表切开的方法. 切片可以说是整个列表中的重点内容,相信你在以后的Python项目中会经常使用到. 它的语法是: 2.简单介绍切片的几个常见操作

  • Python元字符的用法实例解析

    反斜杠的作用: 要想将一个元字符^当一个普通字符处理,加反斜杠 例如: >>>import re >>>r=r'\^abc' >>>re.findall(r,'^abc ^abc ^abc') ['^abc','^abc','^abc'] \d匹配任何十进制数,它相当于类[0-9]. \D匹配任何非数字字符,它相当于类[^0-9] \s匹配任何空白字符,他相当于类[\t\n\r\f\v] \S匹配任何非空白字符,它相当于类[^\t\n\r\f\v] \

  • Python中property属性实例解析

    本文主要讲述的是对Python中property属性(特性)的理解,具体如下. 定义及作用: 在property类中,有三个成员方法和三个装饰器函数. 三个成员方法分别是:fget.fset.fdel,它们分别用来管理属性访问: 三个装饰器函数分别是:getter.setter.deleter,它们分别用来把三个同名的类方法装饰成property. fget方法用来管理类实例属性的获取,fset方法用来管理类实例属性的赋值,fdel方法用来管理类实例属性的删除: getter装饰器把一个自定义类

  • Hibernate单表操作实例解析

    单一主键 assigned:由Java应用程序负责生成(即手工的赋值) native:由底层的数据库自动的生成标示符,如果是MySQL就是auto_increment,如果是Oracle就是sequence,等等 操作的时候还是需要结合hibernate.cfg.xml文件的,因为数据库中的hbm2ddl.auto属性如果是update的时候,设置为主键自增是可以的:但是如果是create的时候,第二次如果不手工的改变,恐怕就要出BUG了. 基本类型 一般来说,按照Java的数据类型进行操作就可

  • Python生成器以及应用实例解析

    本文研究的主要是Python生成器及其应用,具体如下. 一.定义 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象 二.生成器的两种形式(Python有两种不同的方式提供生成器) 1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行 yield的功能: 把函数的结果做生迭代器(以一

  • Python Django框架url反向解析实现动态生成对应的url链接示例

    本文实例讲述了Python Django框架url反向解析实现动态生成对应的url链接.分享给大家供大家参考,具体如下: url反向解析:根据url路由规则,动态生成对应的url链接 (防止硬编码). url反向解析应用在两个地方:模板中的超链接,视图中的重定向. 项目名/urls.py(项目的url路由配置,url反向解析,取namespace名字): from django.conf.urls import include, url from django.contrib import ad

  • hibernate通过session实现增删改查操作实例解析

    今天学习了一下如何通过hibernate来实现对数据库的增删改查,下面来简单介绍一下: 首先创建个Student类: package com.hibernate.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.T

随机推荐