UI自動化(web端)之工具篇


大家好。我是小蔡:

  這是Web自動的第二章。上一張主要介紹selenium框架。這一章我介紹其他框架和工具

  今天分享的內容有幾個方面:

    1.Unitest測試框架

    2.Log模塊以及底層

    3.PO模式

    4.數據驅動

    5.HTML自動生成報告(GIT引入的一個包,哈哈)

  1.Unitest測試框架:

    引入Unitest的目的:1)解決一類多用的問題。2)需要斷言

    核心組件: 

      TestCase[用例組件]

      TestSuite

      TestRunner(套件)

      TestLoader(套件)

      Fixture(工程裝置)

    TestCase:

      操作:

        1.導包 import unittest

        2.新建類,並繼承unittest.TestCase

        3.測試方法必須使用Test開頭

      代碼:

        import unittest

        class Test(unittest.TestCase)

    TestRunner(套件)/TestSuite:

      多個TestCase組成TeSuite套件

      使用:

        實例化

          suite = unittest.TestSuite

        添加用例:#添加

          suite.addTest(Test01("test_add"))

      執行套件:

        實例化

        runner = unittest_textTestRunner

        添加/執行套件

        runner.run(suite)

      擴展添加:         

        搜索指定classname 內中以test開頭方法並執行套件

        my_name_si_shili=unittest.Testsuite()

        my_name_si_shili.addtest(unittest.makesuite(Test02))

        .....

    TestLoader方法類:

      解決批量導入的問題:將Testcase添加入套件,滿足條件就添加  

      my_name_si_shili=unittest.TestLoader().discover(測試目錄.查找py文件格式)

      不使用實例化

      unittest.defaultTestLoader.discover(../cases)

    區別(TestLoader與TestSuite)

      兩者都是套件,前置是按指定目錄,指定py文件。后者是按類和方法

    Fixture裝置(前置通知/后置通知)

      #初始化函數 def setup()

      #結束函數    def setdown()

      級別:函數/類/模塊

      類

      @classmethon 對類級別進行修飾

      def set/downclass()

      模塊

      def set/downmodule()     

    斷言UnitTest

      常用斷言:

        asserture()

        asserfalse()

        assertEqual(參數1,參數2)

        assernotEqual(參數1,參數2)

        assertIn("XXX","XXX") #后面串包含前面的串

      擴展:

        python自帶斷言機制

        assert str1=str2

        assert str1 in str2  "錯誤信息"

        assert Ture/false

    Unittest跳過

      對一些為滿足的測試用例進行跳過

         Unittest.Skip(‘代碼未完成’)

        #可用於修飾測試函數跳過

      滿足特定條件提過

        Unittest.SkipIf(跳過條件,原因)

    2.生成HTML測試報告

      因為Unittest沒有自帶HTML版的報告

      操作

      復制HTMLTestRunner.py文件到指定目錄(git下載)

      導包操作 import HTMLTestRunner

      直接打開文件,並調用run方法

      實戰操作:

                      

 

 

       擴展:

        open與with open 區別

        相同點:均是打開文件

        異同點:with open 等於打開關閉文件

        一般打開文件都怎么寫:

          try:

            f=open("../目錄”,“r”,enconding="utf-8")

            print(f.read())

          except:

            pass

          finally:

            f.close()

  3.PO模式:

    PO模式主要思想

      1.不采用任何方法

      2.采用測試框架

      3.將業務代碼和頁面對象進行(分離)

      4.實際編寫 Po編寫

    所以我們Web自動化架構分成:三層即page類,case類,base類

      page:一個頁面一個對象

      case:集成base類+調用page頁面

      base:抽取公共的方法

    

 

 

   4.數據驅動

    前置知識:

      Unittest框架時沒有參數化插件的。需要建築parameterized插件實現參數化

      parameterized使用步驟:

        導入parameterized框架包

        需要在參數化的測試函數上@parameterized.expand(列表)

        列表的值:單(列表)多(值為列表嵌套元組)【(1,2,3),(1,2,3,)】

      用法:

        class def_01(unittest.TestClass):

          #單個參數使用法:

          @parameterized.expand(["1,2,3"]):

          def test_add_one(sefl,num):

            pringt(num)

    思想:

      將數據放置到文件中,實現數據驅動

      是一種設計思想

      數據驅動技術是以講關注點放到測試數據的構建上,可以將不同數據,執行相同用例上

      依賴於我們的前置參數化

    傳入方式/載體:

      直接定義在腳本中

      從文件中讀取:json,excel,xml,txt

      從數據庫中獲取

      直接從接口獲取數據

      本地封裝

    總結:

    數據驅動=數據存儲+讀取數據工具(自己寫的)+參數化技術

    Json:

    問題:

      需要數據格式【(),()】,【(),()】

      解決:

      新建列表

      讀取值,轉化json

    arrys=[]

    for date in read_json(“login_json").values():

      arrys.append((date.get("username"))

    json基本情況介紹

      1.基於文本輕量級交換

      2.具有良好的結構

    【key,value】

    xml格式:

    <?xml version=8 encoding=utf-8"?>

    <person>

    ....

    </person>

    擴展:

    json與字典之間轉化:

      轉化代碼:

      python--->json

        import json

        date= {"name":“名字”,“年齡”:“18” }

        date=json.dumps(date)

      json-->python

        import json

        json= {"name":“名字”,“年齡”:“18” }

        date2=json.loads(json)

      讀取json:

        with open ('文件名',‘r’,enconding='utf-8') as f :

          date=json.load(f)

      寫入json:

        json_01={'name':'tom','age':‘18’}

         with open('data.json','w',encoding='utf-8') as f:

          json.dump(json_01,f,ensure_ascill=False)

    編寫數據數據讀取工具類:(動態獲取)

      def read_json(filename):

        filename="../date/"+filename

        #調用讀取方法

        with open(filename,"r",enconding=utf-8) as f :

          return json.load(f)    

  5.日記模塊:

    作用

      運行調試錯誤

      便於觀察

    級別

      Debug調試級別

      Info信息級別

      WARINO警告

      Error出現不能用

      Crttal嚴重錯誤

    如何使用

      Logging模塊

      logging{級別}

      #如何設置日記級別:

      logging,basicConfig(level=looging.DEBUG)   

      #如何設置日志格式:

      f=指定格式

      logging.basicConfig(level=looging.DEBUG,format=f,filename"路徑格式")

    基本用法:

      def get_logging():

        f=指定格式

        logging.basicConfig(level=looging.DEBUG,format=f,filename"路徑格式")

        return logging

      #在每個需要操作的步驟上方或者下方標注即可

      標注方式:logging.info

    高級用法:涉及logging類的底層,這個部分可看也可以不看

      日記的四大組件

        日記類:Logger   提供入口

        處理類:Handler  將logging日記發送到合適的目的輸出

        格式器:Forratter   決定日志的輸出格式

        過濾器:Fitter   提供了更細的粒度控制日志記錄

      組件關系

        logger 需要多個Hanlder 將日志輸出到A,B

        Hanlder需要設置 formatter 將日志輸出到AB

        formatter設置,實現過濾

      獲取Looger對象:

        logger =logger.getLogger()

        logger=logger.getLoggger("指定名稱”)

      Logger常用對象:

        Logger.五個等級()

        Logger.setLevel()//設置日志將會處理等級

        Logger.addHandler()//為該logger對象添加handler

        Looger.addFilter()//為該logger對象添加一個filter對象

      Handler類

        #將消息分配到指定位置

        Logger對象可以通過addhandler()方法為自己添加對象

        #如何創建handler對象

        基本不實例化和handeler實例

        handler是個基類

        #logering內置handler包括:

        獲取控制器(處理類)

        sh.logging.StreamHandle()

        logger.addHandler(sh)

        #時間處理器和格式處理器:

        #添加格式器

        #以及設置處理器級別

        最后。。。給大家看看成品吧 我實在是不想分步驟了

 

 

     最后呢運用了一個單例的設計模式。。去設計這個日記類。。就是預防多次調用,出現了多個logger()方法

  總結:

    web自動化基本上已經總結完了。后續會推出App自動化的學習筆記。也感謝各位關注。

    至於提到的Web項目的實戰。會找一個三端的東西結合運用吧 App/Web/后台 三者的結合的系統(目前正在開發ing~)

    

             

         

              

              


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM