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

在说unittest之前,先说几个概念:

TestCase 也就是测试用例

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

TestLoader是用来加载TestCase到TestSuite中的

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

1.单元测试:

  开发自己测自己写的代码;

2.导入模块unittest:

  import unittest  #导入unittest模块

  import HTMLTestRunner #导入HTMLTestRunner 报告模板模块

  from BeautifulReport import BeautifulReport  #导入BeautifulReport 报告模板模块

3.运行一个简单的unittest:

import unittest   #单元测试模块

class TestCalc(unittest.TestCase):
def test1(self): #函数名要以test开头,否则不会被执行
self.assertEqual(1,1) def test2(self):
self.assertEqual(1,2) unittest.main() #会运行当前python文件里面的所有测试用例

4.unittest单元测试的基本流程:

  用例集/测试套件:存放测试用例的

  ①.先把所有的测试用例都放到用例集

  ②.运行这些测试用例

  ③.产生报告

代码:

一.生成报告模板HTMLTestRunner模块(比较丑且相对不好用)

注:1.安装并导入HTMLTestRunner 模块,该模块是可以生成报告的模块。

  2.运行代码时,要以Run xx.py方式运行,不能以unittest方式运行,否则不会生成报告。

import unittest   #单元测试模块
import HTMLTestRunner #用来生成报告的模块 class TestCalc(unittest.TestCase):
def testcc(self): #函数名要以test开头,否则不会被执行
'''这是第一个测试用例''' #用例描述,在函数下,用三个单引号里面写用例描述
self.assertEqual(1,1)
print('第一个用例') def testaa(self):
'''这个是第二个测试用例'''
self.assertEqual(1,2)
print('第二个用例') def testdd(self):
'''用例描述3'''
print('第三个用例') def testbb(self):
'''用例描述4'''
print('第四个用例') suite = unittest.TestSuite() #定义一个测试集合
suite.addTest(unittest.makeSuite(TestCalc)) #把写的用例加进来(将TestCalc类)加进来
f = open('test.html','wb') #以二进制模式打开一个文件
runner = HTMLTestRunner.HTMLTestRunner(f,title='unittest用例标题',description='这是用例描述')
runner.run(suite) #运行用例(用例集合)

在浏览器打开生成的test.html文件,HTMLTestRunner报告如图:

5.setup()/teardown()与setUpClass/tearDownClass。如图:

import unittest   #单元测试模块
import HTMLTestRunner #用来生成报告的模块 class TestCalc(unittest.TestCase):
def setUp(self): #每个用例运行之前运行的
print('setup是啥时候运行的') def tearDown(self): #每个用例运行之后运行的
print('teardown是啥时候运行的') @classmethod
def setUpClass(cls): #在所有用例执行之前运行的
print('我是setUpclass,我位于所有用例的开始') @classmethod
def tearDownClass(cls): #在所有用例都执行完之后运行的
print('我是tearDownClass,我位于多有用例运行的结束') def testcc(self): #函数名要以test开头,否则不会被执行
'''这是第一个测试用例''' #用例描述,在函数下,用三个单引号里面写用例描述
self.assertEqual(1,1)
print('第一个用例') def testaa(self):
'''这个是第二个测试用例'''
self.assertEqual(1,1)
print('第二个用例') def testdd(self):
'''用例描述3'''
print('第三个用例') def testbb(self):
'''用例描述4'''
print('第四个用例') unittest.main() #会运行当前python文件里面的所有测试用例

运行结果:

二.报告模板BeautifulReport(模板相对好用)

代码:

import unittest   #单元测试模块
from BeautifulReport import BeautifulReport as bf #导入BeautifulReport模块,这个模块也是生成报告的模块,但是比HTMLTestRunner模板好看 class TestCalc(unittest.TestCase):
def setUp(self): #每个用例运行之前运行的
print('setup是啥时候运行的') def tearDown(self): #每个用例运行之后运行的
print('teardown是啥时候运行的') @classmethod
def setUpClass(cls): #在所有用例执行之前运行的
print('我是setUpclass,我位于所有用例的开始') @classmethod
def tearDownClass(cls): #在所有用例都执行完之后运行的
print('我是tearDownClass,我位于多有用例运行的结束') def testcc(self): #函数名要以test开头,否则不会被执行
'''这是第一个测试用例''' #用例描述,在函数下,用三个单引号里面写用例描述
self.assertEqual(1,1)
print('第一个用例') def testaa(self):
'''这个是第二个测试用例'''
self.assertEqual(1,1)
print('第二个用例') def testdd(self):
'''用例描述3'''
print('第三个用例') def testbb(self):
'''用例描述4'''
print('第四个用例') suite = unittest.TestSuite() #定义一个测试集合
suite.addTest(unittest.makeSuite(TestCalc)) #把写的用例加进来(将TestCalc类)加进来
run = bf(suite) #实例化BeautifulReport模块
run.report(filename='test',description='这个描述参数是必填的')

浏览器查看生成的报告页面:

单元测试unittest及报告生成(两种报告模板)的更多相关文章

  1. Java使用poi生成Excel,生成两种表格下拉框

    想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...

  2. maven执行单元测试失败后,继续生成Jacoco&Sonar报告

    为保证生成单元测试覆盖 sonarqube或者jacoco与maven集成时,如果pom文件配置了sonarqube或者Jacoco的相关配置, 那么在pom文件所在目录执行mvn clean ins ...

  3. jemter转换报告生成html格式报告

    前言: 结合上篇,因为使用Jenkins做集成,jmeter的结果肯定需要生产一个报告,如果按原本的jmt格式生成,肯定是不行的,现在就需要对报告格式进行转换 使用工具: ant:jmeter可以通过 ...

  4. Python 爬取 热词并进行分类数据分析-[热词关系图+报告生成]

    日期:2020.02.05 博客期:144 星期三 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[拓扑 ...

  5. SpringBoot单元测试的两种形式

    @ 目录 前言 demo环境 springbootTest Junit 总结 前言 最近公司要求2021年所有的项目代码单元测试覆盖率要达到90%,作为刚毕业的小白来说这简直就是噩梦啊,springb ...

  6. unittest测试框架生成可视化测试报告-BeautifulReport

    生成报告的样式: 在说unittest之前,先说几个概念: TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoader是用来加载Test ...

  7. android 发送短信的两种方式,以及接收报告和发送报告

               android发送短信,以及接收报告和发送报告          android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下:    一.调起系统发短信功能    ...

  8. unittest框架之 BeautifulReport 模板报告生成的正确姿势

    使用unittest框架的自动化测试,报告一定很重要,目前介绍一个比较高大上的报告模板 BeautifulReport.如果首次使用的话需要安装 pip install beautifulreport ...

  9. PyCharm上unittest 测试用例两种执行方式

    每次讲到unittest测试框架的时候,经常有同学在群里反映,为啥我的运行不是按照我往suite里添加的用例顺序执行的,为什么别人的能跑出来报告,我的就不行... 当然,首先确认代码是OK的,如果代码 ...

随机推荐

  1. Tensorflow目录

    0.Tensorflow安装 1.创建会话,启动会话 2.变量 3.Fech_feed 4.线性回归 5.非线性回归 6.MNIST数据集简单分类 7.交叉熵 8.Dropout 9.正则化 10.优 ...

  2. 解决Python中出现的问题: “You are using pip version 9.0.1, however version 19.2.3 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.”

    1. 一开始我在使用Pycharm时,导入numpy库,发现导入错误: Non-zero exit code (1) 2. 于是我通过更新的方法来解决,哪知道在更新的时候也出现了错误,错误如下图: 这 ...

  3. 关于网站子目录绑定二级域名的方法(php网站手机端)

    最近帮客户做zencart网站手机模板用到了二级域名,通过判断手机访问来调用二级目录程序,http://afish.cnblogs.com/ 怎么说都比 http://www.cnblogs.com/ ...

  4. appium+python 【Mac】UI自动化测试封装框架介绍 <二>---脚本编写(单设备)

    1.单设备的执行很简单,平时可多见的是直接在config中进行配置并进行运行即可.如下: # coding=UTF- ''' Created on // @author: SYW ''' from T ...

  5. Mysql中查询索引和创建索引

    查询索引   show index from table_name 1.添加PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( ` ...

  6. 洛谷P1363 幻想迷宫【dfs】

    题目:https://www.luogu.org/problemnew/show/P1363 题意: 有一个地图,起点是S,障碍物用#表示.可以将这个地图不断的在四周重复,问从起点开始是否可以走到无限 ...

  7. MyBatis注解Annotation介绍及Demo(转)

    MyBatis可以利用SQL映射文件来配置,也可以利用Annotation来设置.MyBatis提供的一些基本注解如下表所示. 注解 目标 相应的XML 描述 @CacheNamespace 类 &l ...

  8. 类数组对象HTMLCollenction

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. MFC、API、C++三者的区别

    MFC(Microsoft Foundation Class)是微软的基础类库,只能用于Windows系统. API(Application Programming Interface)是应用程序编程 ...

  10. 【CUDA 基础】5.6 线程束洗牌指令

    title: [CUDA 基础]5.6 线程束洗牌指令 categories: - CUDA - Freshman tags: - 线程束洗牌指令 toc: true date: 2018-06-06 ...