1. 程式人生 > >一個軟件測試小白的進階之路

一個軟件測試小白的進階之路

spring tex 設計思想 spel 尊重 block 完成 find 自己的

強哥是一個軟件測試新人,畢業以後他的職業發展是這樣的。

1

功能測試人員,也就是我們常常俗稱的進行點點點測試工程師。前 1-2 年做功能測試,使用其他人開發的工具進行測試。這個階段的測試工作都比較初級,嚴重依賴於別人開發的工具和系統。當系統進行升級換代的時候,強哥會明顯的感覺到有陣痛期,一下適應不了這種變化。

做了 2 年功能測試,強哥悟出了一個道理:功能測試人員一般最遵守行業規則,但是也最沒存在感。強哥發誓在下班以後學習自動化測試技術,擺脫這種隨便被人甩鍋的命運。

2

自動化測試人員。強哥終於面試上了一個自動化測試的崗位,這一年每天晚上熬夜學習終於得到了回報,試用期結束,強哥已經上手了第一份自動化測試的工作。

他在部門內部受到了其他同事尊重,尤其是部門的功能測試人員,一雙雙膜拜的眼神。強哥心裏竊喜,這一年的付出是值得的,現在我也可以給別人臉色了。

自動化測試的工作內容,主要是使用編程語言編寫腳本啊,進行自動化測試。強哥明顯感到了測試效率的提升,一個人可以幹兩個人的活,用老板的話說:小強不錯,能打能扛。

2 年過去了,小強隱約感覺到了幾點自動化測試工作的不足:

  • 寫出來的代碼,功能測試人員看不懂,也沒有辦法用。平時他和功能測試的同事也是各幹各的,相當於在兩個部門。這就意味著,從老板的角度來說,沒有發揮 1 + 1 > 2 的效應。

  • 自己使用的是 Python 語言,部門的另外一位自動化工程師用的是 Java 語言,她被招來做另外的項目測試。強哥很想去看看她的代碼是怎麽寫的,怎麽運行的,奈何看不懂,也不知道怎麽運行。同是一個崗位的人,卻沒辦法切磋技術,好不孤獨啊。

  • 還有一個問題。前 3 個月自己寫的代碼,過幾個月自己再去看,居然有點看不懂了,要調試一段時間才能弄清楚中間的思路。要是被別人知道了,肯定會認為自己很菜的,自己代碼自己都看不懂。

雖然看到了自動化崗位的一些不足,但是強哥心裏清楚,相比之前的功能測試,瞧別人的臉色,現在簡直太幸福了。自從學習了 Python 自動化測試,他感覺真正融入了這個行業,情不自禁的開始關心行業動態,關心起 Python 這門編程語言的發展勢頭了。

3

在一次技術開發者大會上,強哥接觸到了 ”測試開發“ 這個崗位,心中很久的疑惑終於被解開了。進行技術分享的是國內某大型電商平臺的技術專家,詳細介紹了測試開發這個崗位的優勢和進階路線。

強哥趕緊掏出一直放在雙肩包裏的袖珍筆記本,開始記錄:

  • 測試開發是給測試部門開發交互界面友好的測試工具和效率工具,像大家熟知的 Postman 和 Jmeter 屬於測試開發的工作;

  • 測試開發研發出來的產品,功能測試人員和其他工作人員經過簡單培訓就可以上手使用,充分發揮 1 + 1 > 2 的效應;

  • 可以將部門管理,BUG 管理,自動化運行,測試報告, 性能分析, 同事登錄等工作模塊全部集成到一個平臺,大大減少了部門內部和跨部門的溝通成本,提高整個部門和工作的工作效率。

  • 測試開發是行業規則大的制定者。使用工具和平臺的人需要遵循這些規則。強哥終於知道自己以前做功能測試的時候是被誰左右了。他默默下定決心,要成為測試開發,成為規則制定者。

測試開發這個工作確實挺好的,商業價值和技術價值都很高,技術演講到後半段,強哥發現,事情也沒那麽美好,準入門檻挺高的,要學習的內容很多,初略總結下來,包含的最基本內容就有許多。

  • HTML,GUI ,手機端等頁面構建技術。用來給使用者觀察和使用的 UI 界面。強哥在自動化測試的時候學過 HTML,打算再學深一點,就可以比較輕松的完成前端頁面技術積累。

  • 服務端開發技術。最初強哥不理解這是個什麽技術,後來越聽越明白,其實就是進行測試的時候接觸的後端開發,以前經常和這幫人打交道,報了 BUG 去找他們,他們還死不認賬,幾次差點和他們打起來。強哥忽然想到:如果我要學這個技術,那我豈不是可以和後端開發做同樣的事情了?他們私底下都在做自己的產品和工具,我也可以啊,搞不好還能融到資,賣點錢。

  • 數據庫。數據庫這東西強哥也接觸過,不過了解得不太深入,只會幾個簡單的 SQL 查詢語句,一旦設計到建表和多表查詢,那就只能召喚搜索引擎了。這方面可能還需要下點功夫。

  • 服務部署。服務部署強哥還是第一次聽,很多概念都不懂,不過有一個名詞強哥經常聽到,那就是 Docker,以前只知道概念,完全不知道它幹嘛用的,今天終於算是啟蒙了。

聽完這個基礎技術準備,強哥感到熱血澎湃,都想立刻起身回家開始學習這些東西了。可沒過幾分鐘,站在臺上那位大佬就給他潑了一盆冷水。他一再強調,這些是入門測試開發的基礎內容,要真正開發一款好用的測試工具和平臺,只會簡單的使用這些技術是不夠的。

必須要對網絡協議有一定的了解,要對開發模式非常熟悉,要會使用版本控制,更重要的,要深入編程語言的高級特性和編程技巧,如果 CS 基礎不夠,玩出來的都會是花架子,對職業發展沒有太多好處。

強哥心灰意冷,大學學的 CS 課程全部忘光了,現在要撿起來談何容易啊。沒想到一個小小的測試崗位要求這麽高。不過演講者還是給出了一個比較可行的方法,那就是熟讀源碼,分析源碼。我們使用的框架,比如 Selenium 和 Appium, 裏面包含了很多優秀的設計思想,強哥當年學習的時候被整得一臉懵逼,苦不堪言,一度想放棄,後來用得此次多了,源碼重讀的次數也越來越多,慢慢能夠理解他們寫的代碼有多麽厲害了。想到這,強哥不由得感嘆一聲,要是有個人帶我分析源碼該有多好啊,能少走好多彎路。

演講結束了,強哥決定回家試一試用 Python 語言寫一個最簡單的 UI 測試工具,在公交車上他已經思考好了大體的框架:

  • HTML 頁面展示;

  • Python 開發框架接受 HTML 頁面上的請求。現在還不知道有什麽框架,回去了解一下。

  • 之前寫好的測試腳本。將腳本封裝成函數或類,開發框架接受到請求,調用對應的方法就完成了自動化測試。

回到家,強哥喝了口水就開始了解開發框架,上網了解了 Flask 和 Django 兩大框架,他趕緊把想到的架構圖畫下來。

技術分享圖片

如果用 Java 開發,把中間的開發框架換成 Springboot 就可以了。

  1. 先把 HTML 寫好:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lemon Web Test</title>
</head>
<body>
請選擇你要測試的項目:
<form action="http://127.0.0.1:5000/ui-test/" method="get">
<select name="project">
<option>百度</option>
<option>豆瓣</option>
<option>Github</option>
</select>
<input type="submit">
</form>
?
</body>
</html>
  1. 強哥看網上 Flask 用的代碼不多,他初略看了一下官方文檔就開始依樣畫葫蘆寫簡單的 Demo。

from flask import Flask, request
?
# 初始化服務對象
app = Flask(__name__)
?
@app.route("/ui-test/") # 定義訪問的網址
def ui_test():
# 獲取 HTML 數據,要測試的項目或者功能
project = request.args.get(‘project‘)
# 自動化測試腳本封裝的函數
if project == ‘百度‘:
# auto_test()
?
# 返回給用戶操作成功
return "test success"
?
# 運行服務,開放端口 5000
app.run(port=5000)
  1. 至於自動化腳本,他從以前寫的 Selenium 腳本隨便抽了個最簡單的拿出來用,封裝成 auto_test 函數。

def auto_test():
# 初始化了一個瀏覽器
driver = webdriver.Chrome()
?
# 進入項目路徑
driver.get(‘http://www.baidu.com‘)
?
# 找到要輸入的輸入框, 元素定位
input_ele = driver.find_element_by_id(‘kw‘)
input_ele.send_keys(‘檸檬班‘)
# 提交內容
input_ele.submit()
?
# 定位元素
e = WebDriverWait(driver, 20).until(
ec.presence_of_element_located((By.CSS_SELECTOR, ‘h3.t‘)))
?
# 測試結果是否通過
if ‘檸檬班_騰訊課堂‘ in e.text:
driver.quit()
return ‘Test Success‘
?
driver.quit()

雖然這個 Demo 非常的簡單,但是強哥已經通過自己寫的例子認識到測試開發的強大之處了,接下來,他要努力學習 Python 高級特性,開發框架 ,前端語言、數據庫和部署技術,然後就是源碼分析能力了。行業規則制定者,這個信念已經在心裏。

一個軟件測試小白的進階之路