資料驅動測試(Python)

來源:互聯網
上載者:User

標籤:完成   內容   str   擷取   driver   star   缺點   zid   改變   

自動化領域的兩種驅動,對象驅動與資料驅動

  • 資料驅動:測試資料的改變引起執行結果的改變 叫 資料驅動
  • 關鍵字驅動:測試對象名字的改變起引起測試結果的改變 叫 關鍵字驅動

1 、讀取檔案參數化
   以百度表搜尋為例,我們可以通過指令碼迴圈執行,讀取一檔案中不同的內容來完成自動
化工作,也就是說我們每次取的檔案裡的搜尋索引鍵不同,而每次百度搜尋的的結果不同,
這也是資料驅動的本質。

代碼如下:
d:\abc\data.txt
baidu_read_data.py

#coding=utf-8from selenium import webdriverimport os,timesource = open("D:\\abc\\data.txt", "r")values = source.readlines()source.close()# 執行迴圈for serch in values:browser = webdriver.Firefox()browser.get("http://www.baidu.com")browser.find_element_by_id("kw").send_keys(serch)browser.find_element_by_id("su").click()browser.quit()

這裡簡單說明一下,open 方法左以唯讀方式(r)開啟本地的 data.txt 檔案,readlines方法是逐行的讀取檔案內容。

通過 for 迴圈,serch 可以每次擷取到檔案中的一行資料,在定位到百度的輸入框後,
將資料傳入 send_keys(serch)。這樣通過迴圈調用,直到檔案的中的所有內容全被讀取。
2 、使用者名稱密碼的參數化(讀取檔案)

後面的例子東一登入百度為例,主要是讀取檔案(因為百度的登入時,需要驗證碼,所以也沒不會登入成功)

按照上面的方法,對自動化指令碼中使用者名稱密碼進行參數化,從目前所查到 python 讀取方法有,整個檔案讀取,逐行讀取,固定位元組讀取。

怎樣才一次讀取使用者名稱和密碼兩個資訊呢,最初的修改是這樣的:
建立兩個檔案,分別存放使用者名稱密碼
調用使用者名稱密碼登入登入的指令碼

#coding=utf-8from selenium import webdriverimport os,timesource = open("D:\\abc\\data2.txt", "r") #使用者名稱檔案user = source.read(5) #使用者名稱長度source.close()source2 = open("D:\\abc\\data3.txt", "r") #密碼檔案pw = source2.read(6) #密碼長度source2.close()driver = webdriver.Firefox()driver.get("https://passport.baidu.com/v2/?login&tpl=mn&u=https%3A%2F%2Fwww.baidu.com%2F")driver.find_element_by_id("TANGRAM__PSP_3__userName").clear()driver.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(k)time.sleep(3)driver.find_element_by_id("TANGRAM__PSP_3__password").clear()driver.find_element_by_id("TANGRAM__PSP_3__password").send_keys(v)time.sleep(3)driver.find_element_by_id("TANGRAM__PSP_3__submit").click()time.sleep(3)driver.close()

缺點:

雖然目的達到了這,但這樣的實現有很多問題:

  • 使用者名稱密碼分別在不同的檔案裡,這樣就要求使用者名稱密碼必須一一對應
  • 必須指定讀取的長度,測試 readlines() 並不是讀取的一行資料。
  • 無法迴圈讀取。

3 、使用者名稱的參數化(字典)
  使用者名稱密碼參數化
 解決迴圈調用
如果固定只是讀取使用者名稱,密碼兩個值,可以通過如下方法實現。
建立 fun.py 檔案,定義一個字典方法(方法檔案和case檔案放在一個根目錄下):

def zidian():d={‘fnngj‘:‘a23456‘,‘testing360‘:123456}print "suess read username and password!!"return d

字典的可以方便的存放 k,v 索引值對,一個鍵對應一個值;注意,如果密碼中有非數字,需要加單引號。

下面迴圈調用詞典的值:

#coding=utf-8from selenium import webdriverimport os,timeimport fun #匯入函數#迴圈調用字典裡的使用者名稱密碼,分別賦值給 k,vfor k,v in fun.zidian().items():driver = webdriver.Firefox()driver.get("https://passport.baidu.com/v2/?login&tpl=mn&u=https%3A%2F%2Fwww.baidu.com%2F")driver.find_element_by_id("TANGRAM__PSP_3__userName").clear()driver.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(k)time.sleep(3)driver.find_element_by_id("TANGRAM__PSP_3__password").clear()driver.find_element_by_id("TANGRAM__PSP_3__password").send_keys(v)time.sleep(3)driver.find_element_by_id("TANGRAM__PSP_3__submit").click()time.sleep(3)driver.close()

指令碼這樣表設計就穩定了很多,每次取的值非常固定,而且同樣實現了參數與指令碼分離,如果幾百個指令碼都調用 fun( ) 函數,當需要修改使用者名稱密碼時,只用修改 fun( )函數裡面字

典的值就可以了。
4 、使用者名稱密碼的參數化(函數)
其實,在項目中只需要做到參數化就行了,並不需要迴圈的讀取內容。那麼通過函數調用就可以很簡單的解決。
首先定義fun.py,(方法檔案和case檔案放在一個根目錄下)

def user(k=‘fnngj‘,v=123456):  print "suess read username and password!!"  return k,v

賦預設值,並將結果返回。

調用函數值:

#coding=utf-8from selenium import webdriverimport os,time#匯入函數import fun #通過調用函數獲得使用者名稱&密碼k,v = fun.user()print k,vdriver = webdriver.Firefox()driver.get("https://passport.baidu.com/v2/?login&tpl=mn&u=https%3A%2F%2Fwww.baidu.com%2F")driver.find_element_by_id("TANGRAM__PSP_3__userName").clear()driver.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(k)driver.find_element_by_id("TANGRAM__PSP_3__password").clear()driver.find_element_by_id("TANGRAM__PSP_3__password").send_keys(v)driver.find_element_by_id("TANGRAM__PSP_3__submit").click()time.sleep(3)driver.close()

 運行結果:

>>> =================== RESTART ================================
>>>
suess read username and password!!
fnngj 123456
.
----------------------------------------------------------------------
Ran 1 test in 25.484s
OK

資料驅動測試(Python)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.