Python-单元测试unittest
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的更多相关文章
- python单元测试unittest
单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和 调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而 ...
- [转]python单元测试unittest
单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而单 ...
- Python单元测试unittest - 单元测试框架
一.unittest简介 unitest单元测试框架最初是有JUnit的启发,它支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中,以及测试与报告框架的独立性. 二.unittest相关概念 ...
- python单元测试unittest实例详解
转自:http://blog.csdn.net/five3/article/details/7104466 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也 ...
- python单元测试unittest、setUp、tearDown()
单元测试反应的是一种以测试为驱动的开发模式,最大的好处就是保证一个程序模块的行为符合我们设计的测试用例,在将来修改的时候,可以极大程度保证该模块行为仍然是正确的. 下面我编写一个Dict来,这个类的行 ...
- Python单元测试unittest【转自https://www.cnblogs.com/feng0815/p/8045850.html】
[转自https://www.cnblogs.com/feng0815/p/8045850.html] Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一 ...
- Python单元测试--unittest(一)
unittest模块是Python中自带的一个单元测试模块,我们可以用来做代码级的单元测试. 在unittest模块中,我们主要用到的有四个子模块,他们分别是: 1)TestCase:用来写编写逐条的 ...
- selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出
部分内容来自:https://www.cnblogs.com/klb561/p/8858122.html 一.基础介绍 核心概念:test case, testsuite, TestLoder,Tex ...
- python单元测试-unittest
python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...
- Python单元测试unittest测试框架
本文的主题是自动化测试框架的实现,在实现之前,先了解一下关于unittest模块的相关知识: Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回 ...
随机推荐
- (2) yum源配置-163
1.获取yum源文件 登录http://mirrors.163.com/.help/centos.html,查看CentOS6的链接地址(右键点击“CentOS6”,选择复制链接地址),链接地址为:h ...
- win10正式版开始菜单无法打开,右边的网络连接、操作中心也打不开
问题描述: 开机后电脑键盘的win键无响应,鼠标点击菜单栏中的这几个按键也都无响应,但是点击自己固定的应用程序却没有问题,在网上查找尝试了许多资料,终于找到了一个合适的解决方案.现记录如下 解决方案: ...
- Java研发工程师面试题
基础题 一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1. String是字符串常量,StringBuffer和StringBu ...
- ubuntu 1204 安装mysql
检測本机是否有安装mysql sudo netstat -tap | grep mysql 运行上面的命令之后.看到 mysq 的socket 处于监听状态,说明有成功安装. 安装mysql sudo ...
- 再理解 as3.0接口
As3.0 接口的理解与运用 1.把接口当作"类"来理解.你easy接受她. 我们看她的标准结构: package 包路径{ public interface 接口名称{ func ...
- 创建有提示的ui组件
using UnityEditor; using UnityEngine; using System.Collections; using Edelweiss.CloudSystem; namespa ...
- Linux - SVN的基本操作
SVN的基本操作 本文地址: http://blog.csdn.net/caroline_wendy $ svn diff //显示改动 $ post-review --summary="b ...
- leetCode 57.Insert Interval (插入区间) 解题思路和方法
Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ...
- 九度OJ 1335:闯迷宫 (BFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1782 解决:483 题目描述: sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫. sun的室友在帮电脑节设计 ...
- 洛谷 P2051 [AHOI2009]中国象棋
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...