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模块,用它来做单元测试,它里面封装好了一些校验返回 ...
随机推荐
- js 判断 IE 浏览器
遇到一些IE兼容问题,可以考虑在该浏览器环境下,用js控制样式,以下是判断IE版本的js代码 var browser=navigator.appName var b_version=navigator ...
- laravel学习之路3 数据库相关
读写分离之多个读? 有 'host' => $readHosts[array_rand($readHosts)], 上面的好像有缓存问题php artisan config:cache ] ); ...
- 搜索maven的库中某个支持库的的最新版本
首先放网址(建议挂个vpn): maven库中心:http://search.maven.org/ jcenter库中心:https://bintray.com/bintray/jcenter 接下来 ...
- 【转】python测试开发面试题
出处:http://my.oschina.net/u/1433482/blog/467954?fromerr=WrfxL2Kw 试卷时间 60分钟,请不要在试卷上作答,用A4纸做答题纸作答. 一,中文 ...
- linux用一键安装包 禅道
----------------1.重启apache 和 mysql /opt/zbox/zbox restart -----------------2.问题1:发现端口被占用 apache启动报错( ...
- 3s 简介
"3S"技术是英文遥感技术(Remote Sensing RS).地理信息系统(Geographical information System GIS).全球定位系统(Global ...
- C语言基础知识【简介】
C 简介1.关于 CC 语言是为了编写 UNIX 操作系统而被发明的.C 语言是以 B 语言为基础的,B 语言大概是在 1970 年被引进的.C 语言标准是于 1988 年由美国国家标准协会(ANSI ...
- python 基础 9.10 删除数据
#/usr/bin/python #-*- coding:utf-8 -*- #@Time :2017/11/24 4:40 #@Auther :liuzhenchuan #@File : ...
- 1. lvs+keepalived 高可用群集
一. keepalived 工具介绍 1.专为lvs 和HA 设计的一款健康检查工具 2.支持故障自动切换 3.支持节点健康状态检查 二. keepalived 实现原理剖析 keepalived ...
- j2EE的web.xml详解
https://blog.csdn.net/changqing5818/article/details/49928231 https://www.cnblogs.com/ClassNotFoundEx ...