ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ui自动化__unittest单元测试框架

2021-09-14 20:31:51  阅读:210  来源: 互联网

标签:__ unittest 单元测试 test print self def


unittest单元测试框架(python中自带单元框架)

一、unittst框架的作用
当我们写的用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护,而unittest正是这样一款工具
二、unittest是Python自带的标准库中的模块,其中包括:
1、TestCase类   (测试用例)
2、TestSuite类  (测试套件)
3、TestLoader类(搜索测试路径)
4、TextTestRunner类(run(test))
5、TextTestResult类(测试结果)
6、TestFixture类(setup  和 tear down)
解释下:
TestCase:
一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown
TestSuite:
对一个功能的测试往往需要多个测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
TextTestRunner:
是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。

TextTestResult:

测试的结果会保存在TextTestResult实例中
TestFixture:
测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。
TestLoader:
是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中
图形化解释:如下图


三、框架的组成
在写测试类以及测试用例时要规定一个命名习惯,一般测试类可以以Test开头,也可以以Test结尾。测试用例一般是以test开头。
eg:结构如下:
import unittest #导入unittest包
#创建测试类:从unittest.TestCase继承
classRomanNumeralConverterTest(unittest.TestCase):
def setUp(self): #初始化测试环境
def tearDown(self): #还原测试环境
def test_case(self):测试用例

====================================================

四、

讲解内容

(1)unittest作用?

  unittest  单元测试框架  是用来管理和组织测试用例,方便后期维护

(2)市场常见的测试单元测试框架?

unittest  (自带标准库) 、pytest (第三库)

(3)unitttest 单元测试框架结构

案例1:框架第一种方法:

import   unittest  #导入 unittest框架

class  hz10(unittest.TestCase):#定义 一个类,继承unittest 的用例
    @classmethod   #类的开始       只执行一次,如果不需要类就可以省略
    def  setUpClass(cls) -> None:
        print("类的开始")
    @classmethod
    def  tearDownClass(cls) -> None:
        print("类的结束")
    def  setUp(self) -> None: 方法开始 ,
        print("方法开始")
    def  tearDown(self):  #方法结束   ,结束用例,释放资源
        print("方法结束")
    def test001(self):    #每一个自动化用例都是test开头 ,顺序1-9,A-Z,a-z
        print(1111)
    def   test_a(self):
        print("a")
    def test_002(self):
        print(2222)
    def test_003(self):
        print(3333)
    def test_A(self):
        print("A")
    def  hz(self):
        print("hz")
if __name__ == '__main__':
    unittest.main( )# 第一种方法:调用所有的用例

结果:

类的开始
.....
方法开始
----------------------------------------------------------------------
1111
Ran 5 tests in 0.000s

方法结束
OK
方法开始
2222
方法结束
方法开始
3333
方法结束
方法开始
A
方法结束
方法开始
a
方法结束
类的结束

备注:1、unittest 运行的顺序:1-9,大写字母,小写字母

2、运行用例必须是test开头

3、每一次用例执行,放的开始和结束都会执行一次

4、类的开始和类的结束只执行一次

============================================

案例2: 执行部分用例(指定的用例)

import   unittest  #导入 unittest框架

class  hz10(unittest.TestCase):#
    @classmethod   #类的开始
    def  setUpClass(cls) -> None:
        print("类的开始")
    @classmethod
    def  tearDownClass(cls) -> None:
        print("类的结束")
    def  setUp(self) -> None:
        print("方法开始")
    def  tearDown(self):
        print("方法结束")
    def test001(self):
        print(1111)
    def   test_a(self):
        print("a")
    def test_002(self):
        print(2222)
    def test_003(self):
        print(3333)
    def test_A(self):
        print("A")
    def  hz(self):
        print("hz")
if __name__ == '__main__':
    #unittest.main( )# 第一种方法:调用所有的用例
    suit=unittest.TestSuite()  #创建一个套件
    suit.addTest(hz10("test001"))
    # suit.addTests([hz10("test001"),hz10("test002")])
    run=unittest.TextTestRunner()  #创建一个执行对象
    run.run(suit)

案例3:执行一个路径下所有所有用例

import   unittest  #导入 unittest框架

class  hz10(unittest.TestCase):#
    @classmethod   #类的开始
    def  setUpClass(cls) -> None:
        print("类的开始")
    @classmethod
    def  tearDownClass(cls) -> None:
        print("类的结束")
    def  setUp(self) -> None:
        print("方法开始")
    def  tearDown(self):
        print("方法结束")
    def test001(self):
        print(1111)
    def   test_a(self):
        print("a")
    def test_002(self):
        print(2222)
    def test_003(self):
        print(3333)
    def test_A(self):
        print("A")
    def  hz(self):
        print("hz")
if __name__ == '__main__':
    path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua"
    a=unittest.TestLoader().discover(start_dir=path,pattern="ui_框架*.py")
    run=unittest.TextTestRunner()
    run.run(a)

案例4:使用报告模板生成测试报告

import   unittest  #导入 unittest框架
from  time  import  *
from hz_ui_zidognhua.HTMLTestRunner3_New import HTMLTestRunner
class  hz10(unittest.TestCase):#
    @classmethod   #类的开始
    def  setUpClass(cls) -> None:
        print("类的开始")
    @classmethod
    def  tearDownClass(cls) -> None:
        print("类的结束")
    def  setUp(self) -> None:
        print("方法开始")
    def  tearDown(self):
        print("方法结束")
    def test001(self):
        print(1111)
    def   test_a(self):
        print("a")
    def test_002(self):
        print(2222)
    def test_003(self):
        print(3333)
    def test_A(self):
        print("A")
    def  hz(self):
        print("hz")
if __name__ == '__main__':
    path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua"
    a=unittest.TestLoader().discover(start_dir=path,pattern="ui_框架*.py")
    bg_path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua"
    new=strftime("%y-%m-%d %H-%M-%S")
    filename=bg_path+"/"+str(new)+"_uizdf.html"
    f=open(filename,"bw")
    run=HTMLTestRunner(stream=f,title="xx自动化测试报告" ,description="用例执行情况如下:")
    run.run(a)
    f.close()

案例5:结合实际案例编写UI自动化单元测试框架

import  unittest
from   selenium import  webdriver
from  time import   *
from  hz_ui_zidognhua.HTMLTestRunner3_New import HTMLTestRunner
class  Test_baidu(unittest.TestCase):
       def  setUp(self) -> None:
           self.driver=webdriver.Chrome()
           self.driver.maximize_window()
           self.driver.get("https://www.baidu.com/")
           self.driver.implicitly_wait(5)
       def  tearDown(self) -> None:
           sleep(5)
           self.driver.close()
       def test001(self):
           self.driver.find_element_by_id("kw").send_keys("python")
       def  test002(self):
           self.driver.find_element_by_id("kw").send_keys("html")
       def  testa(self):
           self.driver.find_element_by_id("kw").send_keys("a")
       def  test003(self):
           self.driver.find_element_by_id("kw").send_keys("mysql")
       def  testA(self):
           self.driver.find_element_by_id("kw").send_keys("A")
       def abc(self):
           self.driver.find_element_by_id("kw").send_keys("abc")
if __name__ == '__main__':
    # unittest.main()  #第一种方法
    tj=unittest.TestSuite()#第二种方法
    # tj.addTest(Test_baidu("testa"))
    # tj.addTests([Test_baidu("testa"),Test_baidu("test001")])
    # run=unittest.TextTestRunner()
    # run.run(tj)
    #第三种
    # path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua"
    # lj=unittest.TestLoader().discover(start_dir=path,pattern="ui_框架*")
    # run=unittest.TextTestRunner()
    # run.run(lj)
    path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua"
    lj = unittest.TestLoader().discover(start_dir=path, pattern="ui_框架*")
    bglj=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua"
    new=strftime("%y-%m-%d  %H-%M-%S")
    filename=bglj+'/'+str(new)+ '_ui.html'
    f=open(filename,"bw")
    run=HTMLTestRunner(stream=f,title="百度ui自动化测试报告",description="用例执行情况如下:")
    run.run(lj)

标签:__,unittest,单元测试,test,print,self,def
来源: https://blog.csdn.net/YANGJUNMINGYEN/article/details/120295889

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有