<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      UI自動化測試框架:數據驅動

      一、UI自動化框架介紹

      測試框架使用了Po設計模式(Page Object),每一個頁面用一個類來對應,這個類里面要實現所有核心頁面元素的獲取方法,類里面提供操作頁面元素的所有方法。
      這個框架實現幾點:
      1.把常用的代碼進行了封裝,減少重復代碼的編寫。
      比如說,操作excel 的方法,記錄日志的方法,創建文件的方法,查找元素的方法,解析ini配置文件的方法,還有記錄時間的方法,都進行封裝,在使用時直接進行調用。
      2.做到了測試程序和測試數據進行了分離。
      3.做到了定位表達式和程序的分離。
      4.易于維護
      5.能夠選擇不同的測試數據進行執行
      6.有測試報告
      7.可以在異常的時候進行截屏操作
      8.可以記錄測試日志

      二、框架的結構

      1 配置信息:Conf

        日志的配置文件,框架工程的全局變量,其他配置

      2 日志:Log

        執行的時候打印的日志

      3 測試數據:TestData

        測試的excel文件,元素的定位表達式文件,其他測試數據

      4 測試邏輯封裝:Action

        基于你的測試邏輯或者場景通過常見測試步驟的封裝,比如登錄。

      5 測試框架的核心代碼:TestScript

        數據驅動中執行的測試步驟; 讀取測試數據;執行測試腳本;收集測試結果;提供測試報告。

      6 工程的全局封裝:Util

         excel讀取;日志的使用;日期的封裝;目錄的封裝;頁面元素獲取的封裝;配置文件讀取的封裝

      7 PageObject (homepage 頁面屬于的結構) PageObject

      目錄結構如下:

      三、代碼說明

      1、Conf\PageElementLocator.ini

      [crm_login]
      loginPage.username=xpath>//input[@id="txtUsername"]
      loginPage.password=xpath>//input[@id="txtPassword"]
      loginPage.loginbutton=xpath>//input[@type="submit"]

      說明:

      該文件的作用是實現定位表達式和程序的分離。讓每個定位表達式有個名字,方便使用和管理。

      用到哪個頁面的元素就把對應的定義表達式更新到該文件中。

      給每個頁面起個名字,作為section的名字,[crm_login]:

         loginPage.username 是自己給每個元素取的名字;

        =xpath 表示用xpath定位;

        > 用于分割;

        //input[@id="txtUsername"]是xpath表達式

       

      2、Conf\ProjVar.py

        放置當前工程路徑;配置文件路徑;數據文件路徑;測試數據Excel列。

        代碼舉例:

      import os
      
      # 當前工程的路徑
      proj_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
      
      # 配置文件的路徑
      PageElementLocator_file_path = os.path.join(proj_path,r"Conf\PageElementLocator.ini")
      
      # 數據文件的路徑
      test_data_file_path = os.path.join(proj_path,r"TestData\crm登錄賬號.xlsx")
      
      # "crm賬號"sheet頁名稱
      test_user_info_sheet = "crm賬號"
      # "crm賬號"sheet頁列表的名稱
      username_col = 1
      password_col = 2
      test_data_sheet_col = 3
      execute_flag_col = 4
      test_time_col = 5
      test_user_info_result_col = 6
      
      # "測試結果"sheet頁名稱
      test_result_sheet = "測試結果"

       

      3、Conf\Logger.conf

        記錄日志的配置文件

        同時將生成的日志寫入:Log\AutoTestLog.log 文件

       

      4、PageObject\LoginPage.py

        負責實現po的內容,一個頁面的所有操作,都寫到一個類里面。
        舉例:LoginPage.py 實現登錄頁面的PO
          get_login_link(self):獲取要操作的鏈接元素
          click_login_link(self):點擊這個鏈接元素的動作
          只寫怎么操作頁面元素,不寫任何測試邏輯
        部分代碼示例:
      class loginPage():
          def __init__(self,driver):
              self.driver = driver
      
          def get_login_username(self):
              input = read_ini_file_option(PageElementLocator_file_path,"crm_login","loginPage.username")
              element = find_element(self.driver,input.split(">")[0],input.split(">")[1])
              return element
      
          def input_login_username(self,username):
              self.get_login_username().send_keys(username)

      5、ScreenPics

        在代碼中,斷言失敗或執行失敗時,將當前頁面截圖,根據執行時間生成路徑并保存截圖。

      6、TestData

        將需要測試的數據放到該文件夾下,根據excel中的數據執行自動化測試腳本。

      7、TestScript

        該文件夾下的文件執行具體的測試步驟和用例。

        如:AddNewCaseTestScript.py 從TestData的excel中,讀取測試數據,根據不同的測試數據創建case。

      8、Util

        放配置文件,如常用的 獲取時間,創建文件夾,讀寫Excel等文件封裝好,放到這里。使用時直接調用。

        舉例1:TakePic.py  截圖配置文件

      from Util.Dir import *
      from selenium import webdriver
      
      def take_pic(driver):
          file_path = make_time_dir()
          pic_path = os.path.join(file_path, TimeUtil().get_chinesedatetime() + ".png")
          try:
              result = driver.get_screenshot_as_file(pic_path)
              print(result)
          except IOError as e:
              print(e)

        舉例2:ParseConfig.py 解析配置文件PageElementLocator.ini

      #encoding=utf-8
      # 解析配置文件
      
      import configparser
      
      def read_ini_file_all_sections(ini_file_path):
          '''拿到所有的section'''
          cf = configparser.ConfigParser()
          cf.read(ini_file_path,encoding="utf-8")
          return cf.sections()
      
      def read_ini_file_section_all_options(ini_file_path,section_name):
          '''拿到指定的section的所有名稱'''
          cf = configparser.ConfigParser()
          cf.read(ini_file_path, encoding="utf-8-sig")
          return cf.options(section_name)
      
      def read_ini_file_option(ini_file_path,section_name,option_name):
          '''拿到指定section名稱的值'''
          cf = configparser.ConfigParser()
          cf.read(ini_file_path, encoding="utf-8-sig")
          try:
              value = cf.get(section_name,option_name)
          except:
              print ("the specific seciton or the specific option doesn't exit!")
              return None
          else:
              return value

        舉例3:Dir.py 創建目錄

      def make_dir(dir_path):
          if not os.path.exists(dir_path):
              try:
                  os.makedirs(dir_path)
                  print("創建目錄 %s 成功" %dir_path)
              except:
                  print("創建目錄 %s 不成功" %dir_path )
      
      def make_time_dir():
          date = TimeUtil().get_chinesedate()
          dir_path = os.path.join(proj_path,"ScreenPics")
          dir_path = os.path.join(dir_path,date)
          dir_path =  os.path.join(dir_path,str(TimeUtil().get_hour()))
          make_dir(dir_path)
          return dir_path

        其他常用的方法可根據項目的需求進行封裝:

       

       

       

       

       

      posted @ 2020-12-07 14:46  hqq的進階日記  閱讀(600)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 久久婷婷大香萑太香蕉AV人| 久久精品国产亚洲夜色av网站| 香蕉EEWW99国产精选免费| 美女黄18以下禁止观看| 国产蜜臀视频一区二区三区| 国产综合视频一区二区三区 | 亚洲另类欧美综合久久图片区| 亚洲日本韩国欧美云霸高清| 国产一区二区三区小说| 中文字幕国产精品自拍| 亚洲国产美女精品久久久| 国产又黄又硬又粗| 久久国产精品二国产人妻| 亚洲一区二区三区在线播放无码| 任我爽精品视频在线播放| 欧美大bbbb流白水| 亚洲高清aⅴ日本欧美视频| 国产超高清麻豆精品传媒麻豆精品| 少妇高潮尖叫黑人激情在线| av一区二区中文字幕| 久久婷婷成人综合色| 116美女极品a级毛片| 日韩人妻一区中文字幕| 国产视频一区二区三区麻豆| 一本大道色婷婷在线| 国产一区二区三区四区五区加勒比 | 亚洲成人av综合一区| 亚洲WWW永久成人网站| 成人午夜在线观看日韩| 久久成人成狠狠爱综合网| 亚洲人成色99999在线观看| 亚洲高潮喷水无码AV电影| 揭东县| 亚洲国产一区二区三区四| 青青在线视频一区二区三区| 成人又黄又爽又色的视频| 欧美日韩国产图片区一区| 人妻有码av中文字幕久久琪| 亚洲精品第一页中文字幕| 人妻少妇偷人无码视频| 肉大捧一进一出免费视频|