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. laravel学习之路4artisan

    php artisan list php artisan help migrate Tinker 让你可以在命令行中与 Laravel 应用进行交互php artisan tinker 在routes ...

  2. LeakCanary Android 和 Java 内存泄露检测

    说起内存泄漏还是挺让人头疼的,而且不是每个手机都会发生的情况,往往又不易察觉,那么今天我们就来介绍下LeakCanary这个工具 githup:https://github.com/square/le ...

  3. Java多线程中的竞争条件、锁以及同步的概念

    竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生“竞争条件”的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作,此时对该数据的操作 ...

  4. DFS应用——查找强分支

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "DFS应用--查找强分支" 的idea 并用源代码加以实现 : [1]查找强分支 1 ...

  5. DFS应用——找出无向图的割点

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "DFS应用于找割点" 的idea 并用源代码加以实现: 0.2) 必须要事先 做个s ...

  6. InitialContext和lookup

    http://wxg6203.iteye.com/blog/680830 最近因为工作需要开始学习Ejb3,遇到了一个让我很郁闷的事情,做一下小小的总结——小心new InitialContext() ...

  7. C#:ref和out的联系及区别。

    总结以上四条得到ref和out使用时的区别是: ①:ref指定的参数在函数调用时候必须初始化,不能为空的引用.而out指定的参数在函数调用时候可以不初始化: ②:out指定的参数在进入函数时会清空自己 ...

  8. Linux - SVN的基本操作

    SVN的基本操作 本文地址: http://blog.csdn.net/caroline_wendy $ svn diff //显示改动 $ post-review --summary="b ...

  9. Zabbix 监控tomcat web

    个人博客:https://blog.sharedata.info/ 在zabbix监控web,web容器是tomcat 默认的端口是8080导致web监控失败!不能找到主机因此在修改tomcat 端口 ...

  10. gridControl使用集锦

    1.grid控件默认选择一行时,focused的cell并不是蓝色的,而是白色的 要想实现一次选择一行全都是蓝色的只要改一个属性就可以了 this.gridView1.OptionsSelection ...