python+unittest架構整理(一點點學習前輩們的封裝思路,一點點成長。。。)

來源:互聯網
上載者:User

預期架構整理目標:

1.單個用例維護在單個.py檔案中可單個執行,也可批量產生組件批量執行

2.對定位參數,定位方法,業務功能指令碼,用例指令碼,用例批量執行指令碼,常用常量進行分層獨立,各自維護在單獨的.py檔案中

3.加入日誌,htlm報表,發送郵件功能

架構結構

 

結構說明:

config:配置部分,瀏覽器種類和定位資訊維護在此處

constant:常量部分,固定不變的資料維護在此處

data:存放用於參數化的文本表格等檔案

encapsulation:定位等selenium功能二次封裝在此處

error_picture:存放錯誤截圖

function:業務功能指令碼維護在此處

log:存放log類

report:存放測試報告檔案

test_case:存放用例檔案

all_case.py:用來執行所有用例

debug_case.py:本人調試用的,可以忽略

tst.log:產生的日誌

逐個介紹各個包下面的.py檔案,並附上源碼(說明見注釋哈哈~):

 

 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-05-11 13:42 4 # config/config_01.py 5 from selenium import webdriver 6 import time 7 from selenium.webdriver.common.action_chains import * 8  9 10 # config配置部分11 12 # 瀏覽器種類維護在此處13 browser_config = {14     'ie': webdriver.Ie,15     'chrome': webdriver.Chrome16 }17 18 # 定位資訊維護在此處,維護結構由外到內為:頁面名稱--頁面下元素名稱--元素的定位方式+參數19 locat_config = {20     '部落格園首頁': {21         '找找看輸入框': ['id', 'zzk_q'],22         '找找看按鈕': ['xpath', '//input[@value="找找看"]']23     }24 }
1 #!/usr/bin/env python2 # -*- coding: utf-8 -*-3 # @Time    : 2017-05-15 13:204 # constant/constant_1.py5 6 # 常量部分(固定不變使用頻繁的參數維護在此處)7 LOGIN_URL = 'https://www.cnblogs.com/'
 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-05-15 13:20 4 # encapsulation/encapsulation.py 5  6 # 封裝部分維護在此 7  8 from config.config_01 import locat_config 9 from log.log import Logger10 from selenium.webdriver.support.wait import WebDriverWait11 12 from selenium.webdriver.support import expected_conditions as EC13 14 class UIHandle():15     logger = Logger()16 17     # 構造方法,用來接收selenium的driver對象18     @classmethod19     def __init__(cls, driver):20         cls.driver = driver21 22     # 輸入地址23     @classmethod24     def get(cls, url):25         cls.logger.loginfo(url)26         cls.driver.get(url)27 28     # 關閉瀏覽器驅動29     @classmethod30     def quit(cls):31         cls.driver.quit()32 33     # element對象(還可加入try,截圖等。。。)34     @classmethod35     def element(cls, page, element):36         # 加入日誌37         cls.logger.loginfo(page)38         # 加入隱性等待39         # 此處便可以傳入config_o1中的dict定位參數40         el = WebDriverWait(cls.driver, 10).until(EC.presence_of_element_located(locat_config[page][element]))41         # 加入日誌42         cls.logger.loginfo(page+'OK')43         return el44     # element對象(還未完成。。。)45     def elements(cls, page, element):46         # 加入日誌47         cls.logger.loginfo(page)48         # 加入隱性等待49         WebDriverWait(cls.driver, 10)50         els = cls.driver.find_elements(*locat_config[page][element])51         # 注意返回的是list52         return els53 54     # send_keys方法55     @classmethod56     def Input(cls, page, element, msg):57         el = cls.element(page, element)58         el.send_keys(msg)59 60     # click方法61     @classmethod62     def Click(cls, page, element):63         el = cls.element(page, element)64         el.click()
 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-05-15 13:22 4 # function/function_01.py 5 # 業務功能指令碼(用例指令碼可調用此處的功能指令碼) 6  7 from encapsulation.encapsulation import UIHandle 8 from constant.constant_1 import LOGIN_URL 9 from config.config_01 import browser_config10 from time import sleep11 12 # 開啟部落格園首頁,進行找找看搜尋功能13 def search(msg):14     # 開啟瀏覽器15     driver = browser_config['chrome']()16     # 傳入driver對象17     uihandle = UIHandle(driver)18     #輸入url地址19     uihandle.get(LOGIN_URL)20     # 調用二次封裝後的方法,此處可見操作了哪個頁面,哪個元素,msg是要插入的值,插入值得操作在另外一個用例檔案中傳入21     uihandle.Input('部落格園首頁', '找找看輸入框', msg)22     uihandle.Click('部落格園首頁', '找找看按鈕')23     uihandle.quit()
 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-05-17 11:19 4 # log/log.py 5 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.