python3+selenium框架設計05-配置文件和瀏覽器引擎類


python3配置文件的增刪改查等操作可以使用內置的ConfigParser模塊,可以自行百度學習,也可以看 Python3學習筆記27-ConfigParser模塊

配置文件一般存放着環境信息,比如url和一些測試過程中后續需要用到的字段。還有測試中需要導入,導出的一些文件。在項目下新建Config文件夾,文件夾下新建config.ini文件。項目結構如下

實際項目測試中,比如測試環境和生產的地址的切換,用戶信息這些都是放在配置文件中,所以會頻繁的使用對配置文件進行操作的方法,那我們就需要對配置文件的增刪改查進行封裝

先看下config.ini文件

因為ConfigParser模塊在寫入時會把注釋給清空掉。所以如果要實現配置文件去控制想要測試哪個環境信息,只能配置一個開關。沒辦法通過去掉注釋這種方法。

environment是配置一些開關,比如browser用來配置瀏覽器,可以設定0是谷歌瀏覽器,1是火狐瀏覽器。switch是環境開關,0是測試環境,1是生產環境

test放一些關於測試環境用到的信息

prod放一些關於生產環境用到的信息

接下來進行具體的實現。在Common文件夾下,對Base_Page.py文件添加全局變量

path = getcwd.get_cwd()
config_path = os.path.join(path, 'Config/config.ini')
config = configparser.ConfigParser()
config.read(config_path,encoding="utf-8-sig")

上面代碼是為了提供配置文件的路徑,接下來是封裝配置的文件的增刪改查

    def config_get(self,key,section=None):
        '''讀取配置文件字段的值並返回'''
        switch = config.get('environment', 'switch')
        if section==None and switch == str(0):
            section = 'test'
        elif section==None and switch == str(1):
            section = 'prod'
        config_get = config.get(section,key)
        return  config_get

這是將讀取配置文件的方法進行封裝。代碼中key是配置文件中section某個鍵,section是具體哪個部分的配置文件,默認是None。如果需要讀的信息不是test或者prod下,才需要進行傳入。來看下測試代碼

from framework.Base_Page import BasePage

s = BasePage(driver=1)
bro =s.config_get('browser','environment')
print('browser是:%s' %bro)

url = s.config_get('url')
print('url是:%s' % url)

可以看到第一個如果要讀取不是test或prod下的配置內容,需要把section和key都傳進去,注意順序先key再section。第二個因為switch是1,所以讀的是prod下的,也就是生產環境的url。

 

接下來看寫入配置文件

   def config_write(self,key = None,value = None,section = None):
        '''往配置文件寫入鍵值'''
        switch = config.get('environment', 'switch')
        if section == None and switch == str(0):
            section = 'test'
        elif section == None and switch == str(1):
            section = 'prod'
        if key is not None and value is not None:
            config.set(section,key,value)
            log1.info('在section:%s下寫入%s=%s' %(section,key,value))
            with open(config_path,'w',encoding='utf-8')as f :
                config.write(f)
        else:
            config.add_section(section)
            log1.info('新增section:%s' % section)
            with open(config_path,'w',encoding='utf-8')as f :
                config.write(f)

和上面讀取的思路差不多懶得解釋了。來看測試代碼。

s.config_write('用戶名','username','environment')
s.config_write('yonghuming','username')
s.config_write(section='yonghu')

可以看到新增成功了。

 

再看下刪除

 def config_delete(self,key = None,section = None):
        '''刪除配置文件字段'''
        switch = config.get('environment', 'switch')
        if section == None and switch == str(0):
            section = 'test'
        elif section == None and switch == str(1):
            section = 'prod'
        if key is not None :
            config.remove_option(section,key)
            log1.info('刪除section:%s下key為:%s的記錄' % (section,key))
            with open(config_path,'w',encoding='utf-8')as f :
                config.write(f)
        else:
            config.remove_section(section)
            log1.info('刪除section:%s' % section)
            with open(config_path,'w',encoding='utf-8')as f :
                config.write(f)

和讀取也是差不多的思路,看下測試代碼

s.config_delete('用戶名','environment')
s.config_delete('yonghuming')
s.config_delete(section='yonghu')

 

 

在對配置文件操作封裝文成之后,封裝瀏覽器引擎類,根據配置文件的不對,啟動不同的瀏覽器。

def open_browser(self):
        browser = self.config_get('browser','environment')
        log1.info('讀取瀏覽器配置')
        url = self.config_get('url')
        log1.info('讀取url:%s' % url)
        try:
            if browser == str(0) :
                self.driver = webdriver.Chrome()
                log1.info('打開的瀏覽器為chrome')
            elif browser == str(1) :
                self.driver = webdriver.Firefox()
                log1.info('打開的瀏覽器為chrome')
            self.driver.get(url)
            self.driver.maximize_window()
            log1.info('瀏覽器最大化')
            self.driver.implicitly_wait(10)
            log1.info('設置靜態等待時間10秒')
            return self.driver
        except BaseException:
            log1.error('瀏覽器打開報錯')

看下測試代碼

from framework.Base_Page import BasePage
import unittest
class baidu(unittest.TestCase):

    def test_nos(self):
        s = BasePage(self)
        self.driver = s.open_browser()

if __name__ == '__main__':
    unittest.main()

我這邊執行成功


免責聲明!

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



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