很多人理解的自動化就是把手工測試case用腳本和工具轉變成自動化測試。也就是說把手工測試的每一個步驟用腳本來模擬,從而執行test case。那么自動化的所有問題就歸結于,如何用工具和腳本來轉化手工操作步驟了。還有很多非常senior的,但是不會coding的手工測試工程師強調case的design能力是如何如何重要,自動化相對來說不是那么重要。
我這里可以肯定的說,沒有好的編程功底,你也不可能涉及出非常好的test case, 自動化的開發也不應該是僅僅把手工操作用腳本來模擬,而是應該大幅度的改變test case,使得能夠用最好的方式來進行自動化。那些手工測試人員所謂的設計case的重要性,和他們設計case的高水平,實際上只是在他們的知識范圍之內產生的觀點。下邊我用一個小例子來說明,編程能力在自動化過程中起的作用到底有多大?;旧蟻碇v,有多強的開發水平,就有多強的自動化設計,實現水平。自動化開發和產品的開發實際上都是一樣的,都是有需求,你來實現。當然,不同水平的人,實現起來的效果是千差萬別的。這也就是為什么開發有高手,有低手,自動化測試的開發也同樣有低手,有高手。自動化測試水平沒有上限,你要學會發揮自己的無窮潛力。
不多說了,現在說一下我們要自動化什么問題。我們有兩個計算機帳號,A和B。我們需要用B帳號進行系統的設置,也就是測試的準備工作,然后用A帳號來進行測試。下邊來說一下不同水平的人是如何進行自動化的。
1. 手工測試人員
Log on B
Configure
Log out
Log on A
Test
2. 初級自動化人員(直接把手工case轉成自動化)
Set autologon B
Set autorun
Record test status: 0
Logout
Check status
if(status==0)
{
Configure
Set autologon A
Record test status:1
Logout
}
if(status==1)
{
Test
}
這個級別的人,需要懂得腳本編程,需要懂得系統設置,autologon and autorun。
3. 有一定經驗的自動化人員(改變手工測試case以利于自動化的更簡單,可靠的實現)
不需要log out and log on
利用Windows命令Runas
用高級語言調用Runas
利用重定向來輸入Password
這個級別的人,需要懂得高級語言,重定向,Windows系統命令Runas
4. 中級自動化人員(具有更豐富的開發經驗,可以用程序代替UI和系統命令)
不需要Runas命令
利用.NET的Process對象
用B的身份生成一個Process來進行配置工作
這個級別的人,要比較熟悉高級語言,比較熟悉高級語言的類庫,懂得操作系統的內核基本概念
5. 高級自動化人員(精通高級語言,精通操作系統內核)
不需要多生成一個進程
用本線程impersonate用戶B
利用.NET WindowsIdentity 對象
必須要調用Windows API,LogonUser
這個級別的人,要精通C/C++和Java,C#等高級語言,精通Windows內核的知識和Windows API
從以上的例子可以看到,針對同一個test case,不同的測試人員,從手工到高級自動化,由于自己知識面的原因,會設計出非常不同的case出來。越高級的自動化越靈活,穩定,可靠,也更需要掌握更多的開發和內核的知識。因此,我們看到很多人在強烈的否定自動化,你先看看他到底在哪個層次中。越下邊層次的自動化人員,由于技術的原因,碰到的問題會越多,能解決的問題卻越少,因此對自動化的抱怨也就越大了。這些都是可以理解的,不過以此來否定自動化,我覺得還是不太應該,畢竟自己技術還不過關