python学习笔记:unittest单元测试

时间:2021-04-26 12:28:33

单元测试:开发自测时写的代码

unittest基本原理:

  ♦整个平台的搭建使用的是python的unittest测试框架,这里简单介绍下unittest模块的简单应用。

  ♦unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。

  几个概念:

  TestCase 也就是测试用例

  TestSuite 多个测试用例集合在一起

  TestLoader是用来加载TestCase到TestSuite中的

  TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

 

unitest的目录结构一般如下:重要

python学习笔记:unittest单元测试

 unittest 测试

def cal(a,b):
return a+b
#
# res = cal(1,9)
# if res == 3:
# print('成功')
# else:
# raise Exception('测试失败') # unittest python中的单元测试框架
import unittest class MyTest(unittest.TestCase): #继承TestCase
def test_a(self): #函数的名字必须以test开头
res = cal(1,2)
self.assertEqual(3,res,msg='预期结果和实际结果不一致') def test_b(self):
res = cal(9,3)
self.assertEqual(3,res,msg='预期结果和实际结果不一致') unittest.main() #运行测试用例

unittest常用的断言
断言语法                          解释
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 测试产生报告

两种生成测试报告的方式:

1、安装BeautifulReport模块

2、把HTMLTestRunner.py 放到pyCharm的External Libraries中

import unittest
import HTMLTestRunner
import BeautifulReport class MyTest(unittest.TestCase):
def test_reg(self):
'''注册''' #加这一行会在报告中显示用例描述
print('reg')
self.assertEqual(1,1) def test_log(self):
'''登录'''
print('log')
self.assertEqual(1,1) def test_buy(self):
self.assertEqual(1,2,msg='购买失败') def test_z(self):
self.assertIn(1,[1,2,3]) def test_assert(self):
res = False
self.assertFalse(res,) #下面这一坨是用HTMLTestRunner,产生不好看的测试报告
f = open('report.html','wb')
runner = HTMLTestRunner.HTMLTestRunner(f,title='lhtest',description='XX接口测试') #实例化一个runner,帮你跑测试用例
suit = unittest.makeSuite(MyTest) #MyTest类变成测试集合
runner.run(suit) #下面这一坨是用BeautifulReport,产生不好看的测试报告
suite = unittest.makeSuite(MyTest) #变成测试集合
report = BeautifulReport.BeautifulReport(suite)
report.report(filename='bfreport.html',description='接口测试报告') # 测试集合:testsuite 多个用例放在一起
# unittest 1、函数名必须是test开头,unittest才会帮你执行
# 2、用例运行的顺序是按照函数的首字母排序的,a-z
# testrunner 运行测试用例的
# testloader 查找测试用例的

如果我们有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,逐个执行,代码如下:

import unittest,HTMLTestRunner
suite = unittest.TestSuite()#创建测试套件
all_cases = unittest.defaultTestLoader.discover('.','test_*.py')
#找到某个目录下所有的以test开头的Python文件里面的测试用例
for case in all_cases:
suite.addTests(case)#把所有的测试用例添加进来
fp = open('res.html','wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')
runner.run(suite)
#运行测试

参数化

安装nose-parameterized模块

import unittest
from parameterized import parameterized def login(username,password):
print(username,password)
print('=============')
return 1 class MyTest(unittest.TestCase):
@parameterized.expand(
[
['xiaodong','','success'],
['yangfan','','fail'],
['hailong','','success'],
['liurongxin','','success'],
]
)
def test_login(self,username,passwd,check):
'正常登陆'
res = login(username,passwd)
self.assertEqual(check,res) unittest.main()

 setUp、tearDown、setUpClass、tearDownClass

① setup():每个用例执行前运行
② teardown():每个用例执行后运行

③ setUpClass():必须使用@classmethod 装饰器,所有用例执行前运行一次

④ tearDownClass():必须使用@classmethod装饰器,所有用例执行后运行一次

import unittest

class MyTest(unittest.TestCase):
def setUp(self):#每条用例执行之前会执行setup
print('这是setup')
def tearDown(self):#每条用例执行之后都会执行teardown
print('这是teardown')
@classmethod
def setUpClass(cls):#这个类里面的所有用例执行之前,最先执行它,最前面
print('这是setupclass')
@classmethod
def tearDownClass(cls):#这个类里面所有的用例执行完之后执行它,最后面
print('tearDownClass') def test_reg(self):
print('============我是用例1================') def test_login(self):
print('============我是用例2================') if __name__ == '__main__':
unittest.main()

运行结果:

..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK 这是setupclass
这是setup
============我是用例1================
这是teardown
这是setup
============我是用例2================
这是teardown
tearDownClass

python学习笔记:unittest单元测试的更多相关文章

  1. UI自动化学习笔记- UnitTest单元测试框架详解

    一.UnitTest基本使用 1. UnitTest框架 1.1 什么是框架 说明: 框架英文单词frame 为解决一类事情的功能集合 1.2什么是UnitTest框架 概念:UnitTest是pyt ...

  2. Python学习笔记(十三)

    Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...

  3. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  4. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  5. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  6. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  7. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  8. python学习笔记--Django入门0 安装dangjo

    经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...

  9. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  10. Pythoner | 你像从前一样的Python学习笔记

    Pythoner | 你像从前一样的Python学习笔记 Pythoner

随机推荐

  1. jquery基本操作笔记

    来源于:http://www.cnblogs.com/webcome/p/5484005.html jq和js 可以共存,不能混用: 1 2 3 4 5 6 $('.box').css('backgr ...

  2. 为什么匿名内部类只能访问final变量【转】

    是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final.因为虽然匿名内部类在方法的内部,但实际编译的时候, ...

  3. JavaWeb基础: XML基础知识

    简介 XML:可扩展标记语言,W3C指定的用于描述结构化数据的语言,XML在实际开发中,经常用作软件的配置文件,以描述程序模块之间的依赖和组合关系. XML约束:XML常常用于软件配置管理,对于软件框 ...

  4. Java再学习——Executor,ExecutorService,ScheduledExecutorService与Executors

    1,Executor.ExecutorService和ScheduledExecutorService,它们都是接口,它们的关系是ScheduledExecutorService继承ExecutorS ...

  5. Linux(CentOS)同步时间

    可参考:http://www.ntp.org.cn/ http://www.cnblogs.com/pipelone/archive/2009/06/17/1505002.html 当前已提供的各国N ...

  6. 为数据元素DATA Element分配搜索帮助

    搜索帮助可以分配给数据元素,程序中可以直接参照该数据元素具体如下: 1. 2. 程序中使用. PARAMETERS:p_vbeln TYPE ZVBELN_01. 3. 效果:

  7. TabHost用法

    tabhost用两种方法 方法一:Activity继承TabActivity后用getTabHost()方法来获取tabhost(前提:Activity的setContentView要删除,这样布局才 ...

  8. 20 ViewPager Demo4自动轮播

    MainActivity.java 思想:才用非常大的数 让其看起来可以循环轮播图片并且用户可以从尽头滑到首图的特点 . package com.qf.day20_viewpager_demo4; i ...

  9. appium+python搭建自动化测试框架_TestAPP框架(三)

    Pycharm 创建 Project,搭建 APPTEST框架如下图:   1.框架功能 业务功能的封装 测试用例封装 测试包管理 截图处理 断言处理 日志获取 测试报告生成 数据驱动 数据配置 2. ...

  10. SQL server 一些小结

    数据库表常用术语 关系 关系即二维表,每一个关系都有一个关系名,就是表名记录 表中的行字段 表中的列 也称属性域 取值范围关联 不同数据库表之间的数据联系关键字 属性或属性的组合,可以用于唯一标识一条 ...