生成报告的样式:

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

TestCase 也就是测试用例

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

TestLoader是用来加载TestCase到TestSuite中的

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

 

1.单元测试:

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

2.导入模块unittest:

  import unittest  #导入unittest模块

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

3.运行一个简单的unittest:

主要是体会一下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单元测试的基本流程:

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

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

  ②.运行这些测试用例

  ③.产生报告

suite方式组织测试用例1:

 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='这个描述参数是必填的')

使用discover方式组织测试用例:

使用场景:

运行指定目录下的全部测试用例

 import unittest
from BeautifulReport import BeautifulReport #导入BeautifulReport if __name__ == '__main__':
suite_tests = unittest.defaultTestLoader.discover(".",pattern="*tests.py",top_level_dir=None) #"."表示当前目录,"*tests.py"匹配当前目录下所有tests.py结尾的用例
BeautifulReport(suite_tests).report(filename='百度测试报告', description='搜索测试', log_path='.') #log_path='.'把report放到当前目录下

运行指定测试类中的case,suite方式组织测试用例: 

使用场景:

假如有测试类AB,类中各有测试方法1,2,3

假如想仅运行测试类A中方法1,测试类B中的方法3,可以使用这种方式组织测试用例

主要是为了在case量很大时,很方便的调试

 import unittest
import os
from BeautifulReport import BeautifulReport as bf
from case.subway.test_subway import Subway #仅运行指定的case Subway是类名,test_subway_001是类中的测试方法名
caseList=[Subway("test_subway_001")]
#使用suite组织测试用例
suite = unittest.TestSuite()
suite.addTests(caseList)
#运行并生成测试报告 
run = bf(suite)
run.report(filename="test", description="测试报告")

目录结构:

一个文件夹下有若干测试类,每个测试类正可能又会有若干个测试用例

代码结构:

谢谢二位大神:

Python Selenium 之生成BeautifulReport可视化报告

单元测试unittest及报告生成(两种报告模板)

unittest测试框架生成可视化测试报告-BeautifulReport的更多相关文章

  1. 基于Python的接口自动化-unittest测试框架和ddt数据驱动

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  2. Python 下的unittest测试框架

    unittest测试框架,直接上图吧: data:数据:主要格式为CSV:读取方式:csv.reade: public:封装的模块:通用的模块单独封装,所需参数设置为变量: testcase:测试用例 ...

  3. Python接口测试实战3(下)- unittest测试框架

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  4. python利用unittest测试框架组织测试用例的5种方法

    利用unittest测试框架可以编写测试用例,执行方式分两大类:利用main方法和利用testsuite,其中利用测试套件来组织测试用例可以有4种写法. 在此之前,先了解几个概念 TestCase:所 ...

  5. <day002>Selenium基本操作+unittest测试框架

    任务1:Selenium基本操作 from selenium import webdriver # 通用选择 from selenium.webdriver.common.by import By # ...

  6. Appium基于python unittest自动化测试并生成html测试报告

    本文基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(uni ...

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

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

  8. Selenium(十八):unittest单元测试框架(四) HTML测试报告

    1. HTML测试报告 对测试人员来而言,测试的产出很难衡量.换句话说,测试人员的价值比较难以量化和评估,相信这一点对软件测试人员来说深有体会.我们花费了很多时间与精力所做的自动化测试也是如此.所以, ...

  9. unittest测试框架详解

    单元测试的定义 1. 什么是单元测试? ​ 单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类,一般是开发来做的,按照测试 ...

随机推荐

  1. Node.js实战11:fs模块初探。

    fs模块封装了对文件操作的各种方法,比如同步和异步读写.批量操作.流.监听. 我们还是通常例程学习, 获取目录下的文件清单: var fs =require("fs"); fs.r ...

  2. Intersection of Two Linked Lists(两个链表的第一个公共节点)

    来源:https://leetcode.com/problems/intersection-of-two-linked-lists Write a program to find the node a ...

  3. MD5加密 和 自定义加密解密

    public class EncryptString { /// <summary> /// MD5加密 /// </summary> /// <param name=& ...

  4. es6基本介绍及使用

    1.什么是es6 ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.它的目标,是使得JavaScript语言可以用来编写复杂的大型应 ...

  5. 如何在nuxt中添加proxyTable代理

    背景 在本地开发vue项目的时候,当你习惯了proxyTable解决本地跨域的问题,切换到nuxt的时候,你会发现,添加了proxyTable设置并没有什么作用,那是因为你是用的vue脚手架生成的vu ...

  6. linux下docker启动nginx无法访问80端口

    问题: Linux安装了docker,docker启动了一个nginx容器,通过 80 端口无法正常访问 故障排查: 1.检查 nginx 容器启动的命令或者yaml文件,查看是否有跟本机端口进行绑定 ...

  7. 搜索(DFS)---查找最大连通面积

    查找最大的连通面积 695. Max Area of Island (Medium) [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0] ...

  8. apache2.4 只允许合法域名访问网站 禁止使用ip、非法域名访问

    1.ip访问禁用ip访问 只能对应端口有效<VirtualHost *:80> ServerName xx.xx.xx.xx ServerAlias * <Location /> ...

  9. 利用JFreeChart生成简单柱状图(Java)

    package barchartdemo1; import <a href="http://lib.csdn.net/base/javaee" class='replace_ ...

  10. python基础--文件的操作

    #r w a 文件读取操作 默认打开为读操作 #f=open('coldplay.txt','r',encoding="utf-8")#open函数默认已系统编码方式打开windo ...