從我的名片英文名字印錯,Back-end
-> QA Engineer
,我從產品開發的角色定位,原先是開發主要功能,一直到最近都是撰寫及維護核心程式的單元測試,然後公司主要的QA工程師離職後,我被賦予的新任務就是要接下QA的工作,測試產品。
直到最近,同事都會偷偷調侃我,名片印錯是在預言XD,以及本身是開發還兼做營運,所以是DevOps
(You are Developer but do operation, so DevOps!)
這個分類還要叫 後端工程師
嗎? 我都快變QA 惹XD,從求學到現在,我從前端起家,不小心出社會變成後端,結果又要不小心變QA測試工程師了嗎XD
我覺得挺有趣的,說不定下份工作會是 DevOps工程師
,哈哈!但無論如何,我覺得多學習都是好事情,有得學就很開心!
在不久的未來,我即將要使用Selenium撰寫產品的測試,身為一個後端的Junior 出社會不到一年,由於產品的核心演算法無法參與開發,加上團隊們要很趕的急速開發。作為一個小後端Junior,最好的角色就是跟在大家的屁股後面,撿各位資深前輩的丟下的臭蟲(Bugs)。
也就是看懂前輩們的程式碼,並製作成單元測試(測試後端),以及學使用Selenium 自動化測試前端!幫他們抓出臭蟲(有的時候會幫忙修臭蟲) (錯,是Always…)
學習QA測試 - Selenium
工作設備: MacBook Pro
一開始以為Selenium 是一個額外的軟體,他需要載一包執行檔像是 Chrome 那種應用程式來做執行。
後來我才發現,他其實很像是單元測試,在Python的運用中就是 pytest
, unittest
的存在,而Selenium
,其實就是Python的套件(Package),用一般安裝python套件的指令就能安裝。
也就是說運用上,不用像是載個新的應用程式適應,而是直接 import selenuim
就能運用,對於我這個常寫單元測試的人,我想 Selenium
我應該很快就能上手
Selenium
可以用很多種程式語言撰寫,但這篇我是介紹用python寫,而且也還是剛開始學習,所以只會教一點點(結果前面廢話超多QQ),之後有學習更多,在更新上來,也許不會只有這篇。
就 Selenium
套件內的功能來看,大致功能為:
- 可以用很多程式語言撰寫自動化程式碼
- 可以運用在不同的環境測試(各種瀏覽器, 手機, …)
這麼好用的東西居然不是應用程式,我也覺得很驚訝的
首先先來安裝 selenium
,打開Terminal,輸入下列指令
# 安裝python,當然是用pip install啦,下指令後就可以去泡杯咖啡了
pip install selenium
安裝好selenium後,我們要來安裝自動化測試的環境,這邊我是裝google
也就是說可能要測試不同的環境,需要環境的驅動才能測試,畢竟 自動化
,就是利用selenium打開環境開始自動操控執行。
這邊以google為範例,利用mac的套件管理系統 homebrew
來安裝google的驅動程式
# 用這兩個指令都能安裝,第一個跑不動的話,就用第二個吧!
brew install chromedriver
brew cask install chromedriver
安裝好惹,就開始我們基礎第一支簡單執行selenium的程式吧XD
打開你的IDE (我是PyCharm)
將下列程式碼複製上去XD,跑一下就會開始自動執行Chrome了
# 結合單元測試的selenium! 原來我早已經是QA XD
# 只要向一般的python套件一樣import就能用!!
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
class WebDriverPythonBasics(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Chrome()
def test_saucelabs_homepage_header_displayed(self):
self.browser.get("https://www.saucelabs.com")
element = self.browser.find_element(By.XPATH, '//a[text()="Platforms"]');
self.assertTrue(element.is_displayed());
element.click();
pricing_link = self.browser.find_element(By.XPATH, '//a[text()="Pricing"]');
self.assertTrue(pricing_link.is_displayed());
pricing_link.click();
def tearDown(self):
self.browser.close()
if __name__ == '__main__':
unittest.main()
執行完後,能看到 Selenium
自己打開Chrome 並自動到指定網站 https://www.saucelabs.com
,自動點擊 網站內的 Platforms
和 Pricing
並驗證(assertTrue)畫面有無正確。
我先前寫的單元測試都是用 unittest
去寫測試後端核心程式,而現在可以加上Selenium
來自動化測試前端,這讓我的測試功能更進一步,使產品程式碼更完善,讓我有一種技能樹又多點一分的感覺XDD,真的有一種從後端學習測試並有可能會晉升為 DevOps
的感覺xD
簡單講解幾段Code
和單元測試的 假設
» 驗證
,相似,用 Selenium 做自動化測試時,也許要 assert
各種條件來驗證功能是否有達到標準。
去到指定網址
# 這行Code 主要讓Selenium自動去到 get(url) 內的網址
self.browser.get("https://www.saucelabs.com")
抓取網頁上的屬性,並執行
element = self.browser.find_element(By.XPATH, '//a[text()="Platforms"]');
element.click();
這段Code 主要功用是 利用抓取XPATH 的方法 來抓到要執行的那個功能 (有可能是按鈕,可能是textbox)
Selenium 有具備很多種抓取網頁屬性的方法,可以by_css
, by_id
,有興趣可以直接去看套件內的程式函式
.click()
, 就是執行 按下去
,find_element
只是找到要執行的元素(某個按鈕,某個輸入框)
如何操控 google 的 pop-out 視窗,自動輸入值
這是我多加的功能,因為我有去找這方面的需求,簡單來說就是有時候進去網站或api,chrome會跳出視窗,請你輸入帳號密碼(所以通常是驗證用帳號密碼),他也不算在網頁內的元素,那麼要怎麼自動化這個部分呢?
# 在要前往該網頁/該api時,帶上驗證要求的資訊
# 假設帳號是admin, 密碼是pass123
self.browser = webdriver.Chrome()
self.browser.get("http://admin:pass123@120.88.xxx.ooo/")
在 http://
後面打上 帳號資訊 :
密碼資訊 @
網址
在執行測試自動化時,就會直接輸入帳號密碼登進去囉!
那麼第一堂幼幼班QA 程式紀錄就到這,後續有學習或更新再來紀錄!