首页 > 其他分享 >unittest框架

unittest框架

时间:2024-08-15 10:37:50浏览次数:14  
标签:None 框架 unittest 用例 print self def

unittest框架

1、unittest 是方便规范编写测试用例和后期维护;

2、unittest 是python中自带的库

3、unittest框架的结构:

import  unittest
class  Kj(unittest.TestCase):
     @classmethod
     def setUpClass(cls) -> None:
         print("类的开始")
     @classmethod
     def  tearDownClass(cls) -> None:
         print("类的结束")
     def  setUp(self) -> None:
         print("方法的开始")
     def  tearDown(self) -> None:
         print("方法的结束")
     def test1dl(self):
         print("11")
     def test3dl(self):
         print("333")
     def test2dl(self):
         print("222")
     def testadl(self):
         print("aaa")
     def testAdl(self):
         print("AAA")
     def  dy(self):     #独有的方法
         print("独有")
if __name__ == '__main__':
    unittest.main()

备注:

1、运行的用例要是test开头(不是test开头的就无法识别)

2、运行规则0-9,A-Z,a-z 是按ASCLLMA顺序执行

3、类的开始和类结束就执行一次

4、方法的开始方法结束,每条用例都执行

unittest 的讲解

第一种调用所有的用例:

import  unittest
class  Kj(unittest.TestCase):
     @classmethod
     def setUpClass(cls) -> None:
         print("类的开始")
     @classmethod
     def  tearDownClass(cls) -> None:
         print("类的结束")
     def  setUp(self) -> None:
         print("方法的开始")
     def  tearDown(self) -> None:
         print("方法的结束")
     def test1dl(self):
         print("11")
     def test3dl(self):
         print("333")
     def test2dl(self):
         print("222")
     def testadl(self):
         print("aaa")
     def testAdl(self):
         print("AAA")
     def  dy(self):     #独有的方法,不是test开头就无法运行
         print("独有")
if __name__ == '__main__':
    unittest.main()

第二种调用部分的用例或单个用例:

import  unittest
class  Kj(unittest.TestCase):
     @classmethod
     def setUpClass(cls) -> None:
         print("类的开始")
     @classmethod
     def  tearDownClass(cls) -> None:
         print("类的结束")
     def  setUp(self) -> None:
         print("方法的开始")
     def  tearDown(self) -> None:
         print("方法的结束")
     def test1dl(self):
         print("11")
     def test3dl(self):
         print("333")
     def test2dl(self):
         print("222")
     def testadl(self):
         print("aaa")
     def testAdl(self):
         print("AAA")
     def  dy(self):     #独有的方法
         print("独有")
if __name__ == '__main__':
    # unittest.main()  #执行所有的用例
    tj=unittest.TestSuite()  #创建一个TestSuite的对象
    tj.addTest(Kj("test3dl"))
    unittest.TextTestRunner().run(tj) # 运行用例

注意运行的过程种还是运行5条:是因为解释器

解决方法:

1、复制文档当前路径:C:\Users
Administrator.USER-20231114RR\PycharmProjects\untitled8\bao\kj.py

2、在编辑器种编辑

3、在python种添加模块的路径

4、运行指定用例

b、运行2条或2条以上的用例

import  unittest
class  Kj(unittest.TestCase):
     @classmethod
     def setUpClass(cls) -> None:
         print("类的开始")
     @classmethod
     def  tearDownClass(cls) -> None:
         print("类的结束")
     def  setUp(self) -> None:
         print("方法的开始")
     def  tearDown(self) -> None:
         print("方法的结束")
     def test1dl(self):
         print("11")
     def test3dl(self):
         print("333")
     def test2dl(self):
         print("222")
     def testadl(self):
         print("aaa")
     def testAdl(self):
         print("AAA")
     def  dy(self):     #独有的方法
         print("独有")
if __name__ == '__main__':
    # unittest.main()  #执行所有的用例
    tj=unittest.TestSuite()  #创建一个TestSuite的对象
    tj.addTests([Kj("test3dl"),Kj("test2dl")])
    unittest.TextTestRunner().run(tj) # 运行用例

第三种调用一个路径的用例:

import  unittest
class  Kj(unittest.TestCase):
     @classmethod
     def setUpClass(cls) -> None:
         print("类的开始")
     @classmethod
     def  tearDownClass(cls) -> None:
         print("类的结束")
     def  setUp(self) -> None:
         print("方法的开始")
     def  tearDown(self) -> None:
         print("方法的结束")
     def test1dl(self):
         print("11")
     def test3dl(self):
         print("333")
     def test2dl(self):
         print("222")
     def testadl(self):
         print("aaa")
     def testAdl(self):
         print("AAA")
     def  dy(self):     #独有的方法
         print("独有")
if __name__ == '__main__':
    # unittest.main()  #执行所有的用例
    # tj=unittest.TestSuite()  #创建一个TestSuite的对象
    # tj.addTests([Kj("test3dl"),Kj("test2dl")])
    # unittest.TextTestRunner().run(tj) # 运行让用例
    lj=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled8\bao"
    d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*.py")
    unittest.TextTestRunner().run(d)

第四种调用一个路径的用例并生成测试报告:

1、下载好报告模板,将模板放在包下

2、

import  unittest
import time
from   bao.HTMLTestRunnerNew import HTMLTestRunner
class  Kj(unittest.TestCase):
     @classmethod
     def setUpClass(cls) -> None:
         print("类的开始")
     @classmethod
     def  tearDownClass(cls) -> None:
         print("类的结束")
     def  setUp(self) -> None:
         print("方法的开始")
     def  tearDown(self) -> None:
         print("方法的结束")
     def test1dl(self):
         print("11")
     def test3dl(self):
         print("333")
     def test2dl(self):
         print("222")
     def testadl(self):
         print("aaa")
     def testAdl(self):
         print("AAA")
     def  dy(self):     #独有的方法
         print("独有")
if __name__ == '__main__':
    # unittest.main()  #执行所有的用例
    # tj=unittest.TestSuite()  #创建一个TestSuite的对象
    # tj.addTests([Kj("test3dl"),Kj("test2dl")])
    # unittest.TextTestRunner().run(tj) # 运行让用例
    # lj=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled8\bao"
    # d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*.py")
    # unittest.TextTestRunner().run(d)
    bglj=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled8\bao"
    lj=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled8\bao"
    d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*.py")
    new=time.strftime("%y-%m-%d %H-%M-%S") #时间戳
    file=bglj+"/"+str(new)+"_ui.html" #生成报告的路径+报告的命名+报告的后缀
    f=open(file,"bw") #打开文件,以二进制的方法写入
    r=HTMLTestRunner(
        stream=f,title="ui自动化测试报给" ,description="用例执行情况",tester="dcs"
    )
    r.run(d)

讲解:

只讲解结构

要引用一个python自带的unittest代码包,然后开始定义测试类,给一个unittest.TestCase的参数,

方法里必须要有setUp,和tearDown方法作为测试开始的前置条件和结尾,也可以有setupclass和

teardownclass作为类的开始和结尾,然后写出要测试的方法.

使用:1.用main()直接全部调用

2.用unittest里一个叫做TestSuite()的方法创建容器,然后用addTest在容器里加入要执行的方法

然后用TextTestRunner创建执行对象,然后用run()方法执行

3.用路径执行,用testloader().discover()定位

4.使用路径执行并输出测试报告,要用到测试报告的模板通过路径执行将结果按照模板生成报告

结合案例讲解

Unittest框架介绍

Unittest属于python标准库里的一个模块,主要包括test case。

TestCase ------------------ 测试用例

TestSuite ---------------套件,可以把用例封装在一起的一个容器

TestLoader -------------创建文件,用来搜索所有以test开头的测试用例文件

TextTestRunner-----------------执行用例,里面包括run()方法

TestResult--------------储存执行用例结果的

Unittest框架结构分为三部分:

(1)首先是setup部分用于设计初始化环境的,该类中方法执行的时候都会先执行setup中的代码。

(2)运行部分:这里是编写测试用例的地方所有的用例命名都需要用test开头

(3)最后是teatdown部分:这里是用例执行完后还原测试环境的。

Unittest流程:

以保险流程为例,首先导入unitttest模块,selenium.webdriver模块,time模块,然后创建一个类class继承unittest.testcase,以setup开头,setup初始化测试环境是每个用例执行之前调用,所以我们在setup函数里,可以将我们初始化网页的方法写进去,之后我们写第一条用例,每条用例必须以test开头来命名,这里我写了一个changewindow函数用来切换网页,然后依次执行用例,teardown函数是每次执行完用例调用的还原测试环境的函数。

然后调用主函数main作为unittest的入口,我们用搜索路径的方法执行自动化,调用unittest.testloader.discover方法执行用例;或者直接调用所有的用例方法unittest.main();

再生成一个测试报告:

首先以相对路径的方式定义生成测试报告的位置和文件名(可以用time模块中的strtime()方法,为文件加时间格式),再用open(路径,“wb”)方法创建并打开文件,我们这里需要先导入HTMLTestRunner3_New中的HTMLTestRunner类,用来生成测试报告的(From hz6(包名).HTMLTestRunner3_New import HTMLTestRunner) ,再用里面的run()函数来执行用例

框架总结:

结构:

Import unittest #导入模块

class XX(unittest.TestCase): #定义类

@classmethod

def setUpClass(cls) -> None:

print("类的开始")

@classmethod

def tearDownClass(cls) -> None:

print("类的结束")

def setUp(self) -> None: #方法的开始(初始化测试)

.....

def tearDown(self) -> None: #方法的结束(还原测试环境)

.....

def test001(self): #定义测试用例

测试用例1

def test002(self):

测试用例2

......

if name == 'main':

调用方法:

(1)运行所有用例:

unittest.main()

(2)以下方法是添加用例到一个套间中,再执行用例:

suit=unittest.TestSuite() #创建一个套件(容器)

suit.addTest(XX("test_a")) #添加单个用例选择

suit.addTests([XX("test_a"),XX("test_1")]) #添加多个用例选择

run=unittest.TextTestRunner() #创建一个执行对象

run.run(suit) #通过对象调用run方法来运行选择的用例

(3)根据路径自动搜索用例执行:

Path=r’相对路径’

a=unittest.TestLoader().discover(start_dir=path,pattern=‘a*.py’)

Runner=unittest.TextTestRunner() #创建一个执行对象

Runner.run(a) #通过对象调用run方法来运行搜索到的用例

(4)自动搜索+生成测试报告:

(From hz6(包名).HTMLTestRunner3_New import HTMLTestRunner) #导入HTMLTestRunner类,用来生成测试报告的

(from time import *) #导入time模块

Path=r’相对路径’

a=unittest.TestLoader().discover(start_dir=path,pattern=’a*.py’)

now=strtime("%Y-%m-%d-%H-%M-%S") #输出报告文本时间格式

bg=r’相对路径’+’/’+str(now)+’_ui.html’ #测试报告文本的格式化

filename=open(bg,"wb") #写入文件内容

runner=HTMLTestRunner(stream=filename,title="ui自动化测试报告",

description="用例执行情况",tester="px")

runner.run(d) #运行

unittest单元测试框架的总结:

1.只会运行以test开头的用例

2.test后面的运行顺序以ASCII码为准 0-9 A-Z a-z

3.类开始和类结束只会运行一次

TestCase:

一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown(字面意思,测试用例。为一个或多个方法提供测试方法。一般是一个test)

TestSuite:

对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中(测试集合,即一组测试。一个test suite是把多个相关测试归入一组的快捷方式)

TextTestRunner:

是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中(测试运行器。执行test suite的程序)

TestFixture:

测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现(就是运行被测软件所需要的一切东西,这个“东西”不单只是数据,同时还包括对被测软件的准备,例如实例化某个被测方法所在的类,准备数据库的ConnectionString等)

TestLoader:

是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中

三、注意点:

1、单词的解释

TextTestRunner:执行用例,里面包括run()方法,

TestLoader:测试路径

TestSuite:套件,可以把用例封装到一起

TestCase:一个测试用例

addtest:添加用例

标签:None,框架,unittest,用例,print,self,def
From: https://www.cnblogs.com/fujintao/p/18360412

相关文章

  • PHP转Go系列 | ThinkPHP与Gin框架之打造基于WebSocket技术的消息推送中心
    大家好,我是码农先森。在早些年前客户端想要实时获取到最新消息,都是使用定时长轮询的方式,不断的从服务器上获取数据,这种粗暴的骚操作实属不雅。不过现如今我也还见有人还在一些场景下使用,比如在PC端扫描二维码,然后使用长轮询的方式从服务端获取最新的扫码信息,来判断用户是否已经......
  • [开题报告]FLASK框架网上拍卖系统8y66t(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为全球经济增长的重要驱动力。其中,网上拍卖作为一种独特的交易模式,凭借其透明度高、互动性强、价格......
  • [开题报告]FLASK框架小说阅读网站j2sia(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着校园文化的日益丰富和学生消费观念的转变,二手货物的交易在校园内逐渐兴起。学生们在追求新鲜感的同时,也更加注重经济实用与环保理念。......
  • [开题报告]FLASK框架校师生闲置物品共享系统f53dy(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在倡导绿色生活、循环经济的今天,校园内师生间的闲置物品处理成为了一个亟待解决的问题。大量尚具使用价值的书籍、学习资料、生活用品等因......
  • [开题报告]FLASK框架实验室数据集管理系统3g944(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在科研领域,实验室数据是推动科学进步与创新的重要基石。随着实验技术的不断进步和科研项目的日益增多,实验室产生的数据量呈爆炸式增长。然......
  • [开题报告]FLASK框架网站价值评估的网页设计953d3(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的蓬勃发展,网站已成为企业展示品牌形象、推广产品和服务的重要窗口。然而,随着网站数量的激增,如何准确评估一个网站的价值成......
  • [开题报告]FLASK框架文件加密系统的设计与实现tp835(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,文件作为信息交换的重要载体,在日常生活和工作中扮演着不可或缺的角色。然而,这些文件往往包含大量的敏感信息,如个人......
  • [开题报告]FLASK框架校园二手货物交易平台m1a2o(源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着校园文化的日益丰富和学生消费观念的转变,二手货物的交易在校园内逐渐兴起。学生们在追求新鲜感的同时,也更加注重经济实用与环保理念。......
  • Linux 中断机制(二)之中断子系统框架
    目录一、概述二、中断控制器GIC1、Distributor接口2、Redistributor接口3、CPU接口三、中断类型四、中断号五、中断申请函数1、request_irq函数2、request_threaded_irq()函数3、gpio_to_irq函数4、free_irq函数六、中断服务函数一、概述一个完整的中断子......
  • 腾讯微服务框架(TSF)-令牌桶限流的实现方式
    1为什么需要限流限流,也称流量控制。是指系统在面临高并发,或者大流量请求的情况下,限制新的请求对系统的访问,从而保证系统的稳定性。限流会导致部分用户请求处理不及时或者被拒,这就影响了用户体验。所以一般需要在系统稳定和用户体验之间平衡一下。举个生活的例子:比如我们的交......