Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,概念见下:

  • TestCase 也就是测试用例
  • TestSuite 多个测试用例集合在一起,就是TestSuite
  • TestLoader是用来加载TestCase到TestSuite中的
  • TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等
import unittest
class MyTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('什么时候运行我呢,我是setUpClass')
#这个类下面所有用例运行之前先运行的 @classmethod
def tearDownClass(cls):
print('什么时候运行我呢,我是tearDownClass')
#这个类下面所有用例运行完之后运行的 def setUp(self):
print('每个用例运行之前都会先运行我')
def tearDown(self):
print('每个用例运行之后都会再运行我')
def test_ggy(self):
self.assertEqual(1,1)
print('第一条')
def test_zyl(self):
print('第二条用例')
self.assertEqual(1,2)
if __name__=='__main__':
unittest.main() #运行所有测试用例

运行结果

二,一些常用的断言

        assertEqual(a, b)     a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b

三,生成html格式报告,需要安装另一个模块:pip install HTMLTestRunner

import unittest
import HTMLTestRunner
class My(unittest.TestCase):#继承unittest.TestCase
def testa(self):
'''测试哈哈'''
self.assertEqual(1,1) def test_gy(self):
self.assertEqual('a','a') if __name__=='__main__':
suite=unittest.TestSuite()#创建一个空的测试集合
suite.addTest(My('testa'))#添加某个测试用例到集合中
suite.addTest(My('test_gy'))
fw=open('test_new.html','wb')#打开一个保存结果的html文件
runner=HTMLTestRunner.HTMLTestRunner(stream=fw,title='niuniuTEST',description='这里是描述信息')#生成执行用例的对象
runner.run(suite)#运行测试套件

四,生成xml格式报告,实际工作中会跟jenkins做持续集成,需要生成xml格式报告,才能在jenkins中查看,又需要安装另一个新的模块了:pip install xmlrunner

import unittest
import xmlrunner
class My(unittest.TestCase):
def testa(self):
'''测试哈哈'''
self.assertEqual(1,1)
def test_gy(self):
self.assertEqual('a','a') class My2(unittest.TestCase):
def testb(self):
self.assertEqual(1,1)
def test2(self):
'''TEST测试未通过'''
self.assertEqual(1,2)
if __name__=='__main__':
suite=unittest.TestSuite()
suite.addTest(unittest.makeSuite(My))#使用makeSuite方法添加所有的测试用例到套件中
suite.addTest(unittest.makeSuite(My2))
runner2=xmlrunner.XMLTestRunner(output='report')#指定报告存放的目录为report
runner2.run(suite)

生成测试报告存在在report下,每一个类,生成一个报告,并且自动加上了时间戳

五,实际工作中,会有多个模块,为了分类测试每个模块,会写多个python文件,每个文件中包含多个测试用例,那么怎么把这个目录下所有用例都执行了呢,找到目录下所有python文件,然后再找里面的测试case,逐一执行

import HTMLTestRunner
import unittest suite=unittest.TestSuite()#定义测试集合
all_case=unittest.defaultTestLoader.discover(
r'D:\niuniu2018_coding\day11\AUTO\case','p*.py')#找到case下所有.py文件
for case in all_case:
print('case...',case)
suite.addTest(case)
fw=open('report.html','wb')
runner=HTMLTestRunner.HTMLTestRunner(stream=fw,title='多个文件运行')
runner.run(suite)

Python-单元测试unittest的更多相关文章

  1. python单元测试unittest

    单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和 调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而 ...

  2. [转]python单元测试unittest

    单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而单 ...

  3. Python单元测试unittest - 单元测试框架

    一.unittest简介 unitest单元测试框架最初是有JUnit的启发,它支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中,以及测试与报告框架的独立性. 二.unittest相关概念 ...

  4. python单元测试unittest实例详解

    转自:http://blog.csdn.net/five3/article/details/7104466 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也 ...

  5. python单元测试unittest、setUp、tearDown()

    单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的. 下面我编写一个Dict来,这个类的行 ...

  6. Python单元测试unittest【转自https://www.cnblogs.com/feng0815/p/8045850.html】

    [转自https://www.cnblogs.com/feng0815/p/8045850.html] Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一 ...

  7. Python单元测试--unittest(一)

    unittest模块是Python中自带的一个单元测试模块,我们可以用来做代码级的单元测试. 在unittest模块中,我们主要用到的有四个子模块,他们分别是: 1)TestCase:用来写编写逐条的 ...

  8. selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出

    部分内容来自:https://www.cnblogs.com/klb561/p/8858122.html 一.基础介绍 核心概念:test case, testsuite, TestLoder,Tex ...

  9. python单元测试-unittest

    python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...

  10. Python单元测试unittest测试框架

    本文的主题是自动化测试框架的实现,在实现之前,先了解一下关于unittest模块的相关知识: Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回 ...

随机推荐

  1. MySQL视图概述

    1.介绍 在传统关系型数据库里,视图有时也被称作虚表,是基于特定SQL结果集的虚拟数据表.在有些场合会变得很方便,例如:原有系统重构,旧的数据表A和B已经被拆分和合并到数据表C.D.F里面,为了实现平 ...

  2. Java线程—-Runnable和Callable的区别和联系

    Java 提供了三种创建线程的方法 1.继承Thread接口 public class Thread2Thread { public static void main(String[] args) { ...

  3. java实体类如果不重写toString方法,会如何?

    先认识一下Object Object 类的 toString 方法 返回一个字符串,该字符串由类名(对象是该类的一个实例).at 标记符“@”和此对象哈希码的无符号十六进制表示组成.换句话说,该方法返 ...

  4. python tensorflow 学习

    Tensorflow系列——Saver的用法:http://blog.csdn.net/u011500062/article/details/51728830 Tensorflow学习系列(二): t ...

  5. 【BZOJ4769】超级贞鱼 归并排序求逆序对

    [BZOJ4769]超级贞鱼 Description 马达加斯加贞鱼是一种神奇的双脚贞鱼,它们把自己的智慧写在脚上——每只贞鱼的左脚和右脚上各有一个数.有一天,K只贞鱼兴致来潮,排成一列,从左到右第i ...

  6. HTML 与 SGML关系

    HTML :超文本标记语言,“超文本”就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素 SGML:标准通用标记语言 HTML 是SGML下的一个应用

  7. 【python】-- MySQL简介、安装、操作

    MySQL简介.安装.操作 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储 ...

  8. STL中vector怎么实现邻接表

    最近,同期的一位大佬给我出了一道题目,改编自 洛谷 P2783 有机化学之神偶尔会做作弊 这道题好坑啊,普通链表过不了,只能用vector来存边.可能更快一些吧? 所以,我想记录并分享一下vector ...

  9. Java语言实现简单FTP软件------>辅助功能模块FTP站点管理的实现(十二)

    1.FTP站点管理 点击"FTP站点管理"按钮,弹出对话框"FTP站点管理",如下图 1) 连接站点 在FTP站点管理面板上选好要连接的站点,点击"连 ...

  10. Broadcast Intent & Broadcast Receiver

    当Android系统发生某种状况,必须通知所有程序进行处理时,例如电量不足等,可利用Broadcast Intent对象的功能来进行信息广播. 运行机制包括两部:送出Intent对象的程序:监听广播信 ...