剛接觸自動化測試,因爲沒有編程語言的基礎,是搞不懂代碼裏面的函數、封裝、包以及其餘概念,只是瞭解字符串、數組、元組及字典這種最基本的名詞,更不懂自動化測試框架了。php
在我這種外門漢的角度來看,代碼不就是一頁word文件寫進去,從頭執行到尾嗎?其實否則,代碼可不止一頁word,不少頁啊。html
看着蟲師的書籍學習自動化測試,邊看邊敲仍是會忘記,想一想仍是作作筆記比較合宜。這篇筆記來粗略記下學習自動化測試的幾種模型,可能再以後回來看會有特別的感覺,先這樣記着吧。web
一、線性測試編程
線性測試,顧名思義,就是一條路按照一條直線走到底。它的每一個腳本都是獨立的,均可以拿出來單獨運行,來驗證一個功能點,上兩段小代碼舉個栗子:
數組
打開百度主頁:瀏覽器
# coding:utf-8 from time import sleep # 從time中引入sleep from selenium import webdriver # 從selenium中引入webdriver driver = webdriver.Firefox() # 選擇打開的瀏覽器 driver.maximize_window() # 瀏覽器窗口最大化 driver.implicitly_wait(3) # 隱式等待 driver.get("https://www.baidu.com") # 獲取URL,打開頁面 driver.quit() # 退出相關瀏覽器
打開百度主頁,並輸入查找內容:app
# coding:utf-8 from time import sleep # 從time中引入sleep from selenium import webdriver # 從selenium中引入webdriver driver = webdriver.Firefox() # 選擇打開的瀏覽器 driver.maximize_window() # 瀏覽器窗口最大化 driver.implicitly_wait(3) # 隱式等待 driver.get("https://www.baidu.com") # 獲取URL,打開頁面 search = driver.find_element_by_id("kw") # 經過id定位搜索框 search.send_keys("selenium") # 填入"selenium" sleep(5) # 直接等待 driver.quit() # 退出相關瀏覽器
以上兩段代碼,分別作了實現打開百度首頁和打開百度首頁後輸入查找內容的功能,均可以單獨拿出來執行。若是須要修改查找訪問頁面,那麼我須要兩段代碼都須要修改。當這類獨立的腳本數量多了起來,去修改這些內容花費的工做量太大,將會失去了自動化的目的。
框架
二、模塊化與類庫編程語言
login.py模塊化
# coding:utf-8 from time import sleep from selenium import webdriver # 從selenium中引入webdriver def login_mantis(): driver = webdriver.Firefox() # 選擇打開的瀏覽器 driver.maximize_window() # 瀏覽器窗口最大化 driver.implicitly_wait(3) # 隱式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 獲取URL,打開頁面 sleep(1) # 直接等待 username = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 經過Xpath定位獲取輸入帳號框 username.send_keys("wuhaobo") # 輸入帳號 sleep(1) password = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 經過Xpath定位獲取輸入密碼框 password.send_keys("123456") # 輸入密碼 sleep(1) login = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 經過Xpath定位獲取登陸按鈕 login.click() # 點擊登陸按鈕 sleep(3)
上面的代碼實現了mantis登陸功能。
quit.py
# coding:utf-8 from selenium import webdriver # 從selenium中引入webdriver def quit_mantis(): driver = webdriver.Firefox() # 選擇打開的瀏覽器 driver.quit() # 退出相關瀏覽器
上面的代碼實現了mantis退出功能。
do_something_in_mantis.py
# coding:utf-8 from time import sleep # 從time中引入sleep from selenium import webdriver # 從selenium中引入webdriver import login # 引入登陸模塊 import quit # 引入退出模塊 login.login_mantis() # 調用登陸模塊 print ">>>如下操做爲在登陸界面後的操做" # 須要作的操做放在登陸和退出中間 print ">>>以上操做爲在登陸界面後的操做" quit.quit_mantis() # 調用退出模塊
上面的代碼實現了調用登陸模塊和退出模塊。
經過以上代碼能夠發現,登陸模塊和退出模塊可讓任意操做類腳本調用,省去了該部分代碼的重複量,便於維護的同時,也加快了代碼的開發速度。
三、數據驅動
直接理解成參數化輸入,不一樣結果輸出。
(1)、讀取TXT方式
將存好登陸的帳號密碼放置在兩個TXT文件中:
# coding:utf-8 from time import sleep from selenium import webdriver # 從selenium中引入webdriver username_file = open("G:\\joker_study\\username.txt") # 打開帳號文本路徑 username = username_file.read() # 取出帳號 password_file = open("G:\\joker_study\\password.txt") # 打開密碼文本路徑 password = password_file.read() # 取出密碼def login_mantis_by_txt(): driver = webdriver.Firefox() # 選擇打開的瀏覽器 driver.maximize_window() # 瀏覽器窗口最大化 driver.implicitly_wait(3) # 隱式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 獲取URL,打開頁面 sleep(1) # 直接等待 username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 獲取輸入帳號框 username_input.send_keys(username) # 輸入帳號 sleep(1) password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 獲取輸入密碼框 password_input.send_keys(password) # 輸入密碼 sleep(1) login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 獲取登陸按鈕 login_button.click() # 點擊登陸按鈕 sleep(3) driver.quit() # 退出瀏覽器
上面的代碼實現了從TXT文件中讀出帳號和密碼,再傳入函數中,進行登陸操做。
(2)、經過函數
userconfig.py
# coding:utf-8 def username_password(username="CJOLER",password="123456"): return username,password
login.py
# coding:utf-8 from time import sleep from selenium import webdriver # 從selenium中引入webdriver import userconfig # 引入userconfig文件 un, pw = userconfig.username_password() print un, pw def login_mantis_by_txt(): driver = webdriver.Firefox() # 選擇打開的瀏覽器 driver.maximize_window() # 瀏覽器窗口最大化 driver.implicitly_wait(3) # 隱式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 獲取URL,打開頁面 sleep(1) # 直接等待 username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 獲取輸入帳號框 username_input.send_keys(un) # 輸入帳號 sleep(1) password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 獲取輸入密碼框 password_input.send_keys(pw) # 輸入密碼 sleep(1) login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 獲取登陸按鈕 login_button.click() # 點擊登陸按鈕 sleep(3) driver.quit() # 退出瀏覽器
上面的代碼實現了將帳號密碼放在一個函數內,再去調用,進行登陸操做。
(3)、讀取字典
userconfig.py
# coding:utf-8 def username_password(): config = {"username": "CJOKER", "password": "123456"} return config
login.py
# coding:utf-8 from time import sleep from selenium import webdriver # 從selenium中引入webdriver import userconfig # 引入userconfig文件 Data = userconfig.username_password() un = Data["username"] pw = Data["password"] def login_mantis_by_txt(): driver = webdriver.Firefox() # 選擇打開的瀏覽器 driver.maximize_window() # 瀏覽器窗口最大化 driver.implicitly_wait(3) # 隱式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 獲取URL,打開頁面 sleep(1) # 直接等待 username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 獲取輸入帳號框 username_input.send_keys(un) # 輸入帳號 sleep(1) password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 獲取輸入密碼框 password_input.send_keys(pw) # 輸入密碼 sleep(1) login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 獲取登陸按鈕 login_button.click() # 點擊登陸按鈕 sleep(3) driver.quit() # 退出瀏覽器
上面的代碼實現了將帳號密碼放在一個字典內,再去調用,進行登陸操做。
(4)、csv文件
# coding:utf-8 import os # 引入os模塊 import csv # 引入csv包 from time import sleep # 引入sleep方法 from selenium import webdriver # 從selenium中引入webdriver list_username = [] list_password = [] data = csv.reader(file('G:\\joker_study\\userconfig.csv', 'rb')) # 獲取每列數據 for user in data: print user[0] # 獲取第一列中從上往下的數據 list_username.append(user[0]) # 將每次讀取的字符串加入到數組中 print user[1] # 獲取第二列中從上往下的數據 list_password.append(user[1]) # 將每次讀取的字符串加入到數組中 def login_mantis_by_csv(): for i in range(len(list_username)): driver = webdriver.Firefox() # 選擇打開的瀏覽器 driver.maximize_window() # 瀏覽器窗口最大化 driver.implicitly_wait(3) # 隱式等待 driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 獲取URL,打開頁面 sleep(1) # 直接等待 username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 獲取輸入帳號框 username_input.send_keys(str(list_username[i])) # 輸入帳號 sleep(1) password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 獲取輸入密碼框 password_input.send_keys(str(list_password)) # 輸入密碼 sleep(1) login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 獲取登陸按鈕 login_button.click() # 點擊登陸按鈕 sleep(3) driver.quit() # 退出瀏覽器
上 面的代碼實現了將帳號密碼分別存在一個CSV表格中,經過csv.reader將每列都讀取出來,user[0]第一列,user[1]第二列,一次類 推。須要注意的是,要講CSV文件打開的格式和工具格式保持一致:在簡體中文環境下,EXCEL打開的CSV文件默認是ANSI編碼,若是CSV文件的編 碼方式爲utf-八、Unicode等編碼可能就會出現文件亂碼的狀況。
四、關鍵字驅動
採用EXCEL或者QTP及robot framework等工具大部分都是以關鍵字驅動來實現自動化測試,這種方式因爲只須要關注"我要作什麼(命令)?對誰作(對象)?怎麼作(值)?",目前尚未去採用這種方式去寫做腳本,等學習了robot framework或者用到這種方式的時候,再記錄補充下吧。
例如這種EXCEL表格(網上隨意複製過來)中所示: