Python 和Java 哪個更適合做自動化測試?

PS:本文轉(zhuǎn)載自黑馬測試高贊知乎文章
鏈接:https://www.zhihu.com/question/264353399/answer/2453360401


大家好。
從事軟件測試很多年了,從各個大廠一路摸爬滾打,現(xiàn)在我有幸供職于字節(jié)跳動。個人也是從功能測試慢慢爬到了自動化測試這條路上。所以針對這個問題,我還有點發(fā)言權(quán)。
記得我一開始從功能準備轉(zhuǎn)型到自動化測試,和很多“涉事未深”的同學一樣,也面臨首選語言的選擇性障礙。在詢問行業(yè)大佬到底是選Python還是Java時,基本能得到的答案無外乎:“你想干啥”,“你會啥”,“你想怎么做” 。
后來自以為想清楚了這三個問題,大佬們卻像范大將軍似的一頓訓:“哎,謝天謝地,實用主義點,我勸你們,先弄明白自己的本職工作,把自動化的這個理念先搞懂。你測試基礎(chǔ)不牢固,技術(shù)棧又不熟,一說全會,一做全廢。連普通功能點都評估不好,到時候你問我要怎么寫?”
帶著這些問題,我以懵懂的心,才由深入淺的把這個“首選語言”搞明白。

要想說透冰山上“自動化首選語言”這個表層問題,其實我們應該鉆到冰山下,去了解另外兩個問題:1、測試為什么要使用自動化,2、目前企業(yè)主流上是使用什么方法來實現(xiàn)自動化。了解了冰山下的2個問題,再來聊冰山上的問題,就能由深入淺知道答案了..
所以分享內(nèi)容會稍長,我接下來的文章主題結(jié)構(gòu),就圍繞這3個問題展開:
1)為什么要使用自動化測試?
2)目前企業(yè)主流上是使用什么方法來實現(xiàn)自動化測試
3)Python 和Java 哪個更適合做自動化測試?
好,文章正式開始....
一、軟件測試為什么要使用自動化?
在回答這個問題之前,我們要先把自動化的理念搞清楚!
1、什么是自動化測試?
所謂自動化測試,指的是使用獨立于待測軟件的其他軟件,來自動執(zhí)行測試、比較實際結(jié)果與預期并生成測試報告這一過程。
在測試流程已經(jīng)確定后,測試自動化可以自動執(zhí)行的一些重復但必要測試工作。也可以完成手動測試幾乎不可能完成的測試。對于持續(xù)交付和持續(xù)集成的開發(fā)方式而言,測試自動化是至關(guān)重要的。
2、為什么測試工作要使用自動化?
自動化測試的工作原理其實本身粗略的講就是代替手工測試,但究竟代替的是什么?
我們以傳統(tǒng)手工測試舉例,我們寫一條case有前置,有步驟,有預期結(jié)果,然后人工操作,將實際結(jié)果同預期結(jié)果比對。
而自動化則是由計算機來代替我們將自動比對預期結(jié)果和實際結(jié)果的過程。
我們拿計算器舉例子:
[暫不支持下載該格式的圖片]
我們?nèi)ビ嬎慵臃ǎ?+1=2
手工:a輸入1 b輸入1 預期結(jié)果為2 執(zhí)行后 2=2 測試通過
程序:a=1 b=1 判斷:2==a+b 執(zhí)行后 2=2 測試通過
恭喜你!現(xiàn)在你擁有一個僅僅能計算1+1=2正確的計算器!但凡換一種你都不能保證它對!
于是有一天機緣巧合的把a=1改成a=2 這個時候執(zhí)行結(jié)果 判斷: 2==a+b 執(zhí)行后 2==3 測試不通過
于是我們引入了參數(shù)化的概念。
a,b,c 加法時對應 第一組:1,1,2 現(xiàn)在 a=1 b=1 c=2 判斷:c==a+b 執(zhí)行后 2=2 ?測試通過
這個時候我們通過手工測試的基礎(chǔ),我們考慮我們的測試點,從傳統(tǒng)手工測試角度出發(fā),我們通過等價類劃分,將數(shù)字分為,整形,浮點型,0。再根據(jù)邊界值劃分為比如最長就到3位也就是結(jié)果=999
這樣來我們將更改我們的測試參數(shù)
第2組1.1 ,1.2 ,2.3 將參數(shù) 帶入a+b=c中 執(zhí)行 c==a+b c==2.3 執(zhí)行后2.3==2.3 ?測試通過
第3組1,0,1 將參數(shù) 帶入a+b=c中 執(zhí)行 c==a+b c==1 執(zhí)行后1==1 ?測試通過
第4組100,200,300 將參數(shù) 帶入a+b=c中 執(zhí)行 c==a+b c==300 執(zhí)行后300==300 ?測試通過
上面都是正常的場景,現(xiàn)在來一些異常的場景,在原有的基礎(chǔ)上進行劃分
細化分第2組數(shù)據(jù)讓兩個浮點數(shù)相加往前進一位 1.89,1.33,3.22 將參數(shù) 帶入a+b=c中 執(zhí)行 c==a+b c==3.22 執(zhí)行后3.3.2199999999999998==3.22 測試不通過 這個時候就造成了精度問題可以讓研發(fā)進行修復,如保留2位小數(shù)。
當然我么還可以細化分第4組數(shù)據(jù)讓它超出邊界值999,1,超出邊界,結(jié)合第2組細分和第4組細分既是浮點型,又讓它結(jié)果超出邊界 555.55,444.55,超出邊界 等加減乘除的運算都驗證一遍,通過參數(shù)輸入,計算機輸出,結(jié)果比對。從而得到一個加法的自動化用例集,在此基礎(chǔ)上我們還可以有其他運算的用例集。
以上這就是最原始的一種測試方式。無論你是測試接口還是Web端,移動端,UI,歸根結(jié)底,請求方后,返回值同預期值做比較。所以每種語言幾乎都可以進行自動化測試。
既然每種語言幾乎都可以進行自動化測試,Python 和Java 哪個更適合做自動化測試?

我們以程序員第一句話 Hello World!為例:
1. 這是java的HelloWorld:
2. 這是python的HelloWorld
python 語言比較簡潔,開發(fā)起來比較快。 java 語言也很簡潔,但相對 python 而言比較復雜。很明顯python的簡潔不是浪得虛名。
二、目前企業(yè)主流上是使用什么方法來實現(xiàn)自動化測試

隨著業(yè)務不斷的積累,case逐漸增加,人員不斷調(diào)整,我們無法草率的刪除過往的case。
但也做不到上線一個夠簡單,夠獨立的功能,但每次執(zhí)行自動化會回歸全部case的痛點。
于是千呼萬喚始出來了測試框架。
測試框架使得自動化測試,更便于實施處理自動化測試腳本,本身的存在的問題:如異常處理和場景恢復,彌補測試腳本本身的不足或是特殊測試需求,測試易于維護。

1、Java常聽說的測試框架

1 ) JUnit
Junit可以讓您為Java代碼編寫出相應的單元測試程序。您可以將JUnit用于單元與集成測試,它還能夠支持Java 8的各種功能。
2?)?REST Assured
在Java中測試和驗證各種REST服務,Java領(lǐng)域帶來了語言上的簡便性。它是一種十分優(yōu)秀的REST API集成測試工具。
3?)?Selenium
Selenium應該是Java UI測試中最為普遍的工具了,它允許您測試JSP頁面,甚至允許您去編寫Web應用,以驗收各種測試。
4?)?TestNG
TestNG是一種由JUnit和NUnit發(fā)展而來的測試框架,不過它引入了許多新的功能,如:annotations可以在任意大的線程池中,運行各種可用策略的測試,可以彌補JUnit和TestNG之間的差距。
2、python常見的測試框架:

1)Unittest
unittest?的一個很有用的特性是 setUp() 和 tearDown() 方法,它們提供了為測試進行準備和掃尾工作的功能,這種功能很適合用在測試對象需要復雜執(zhí)行環(huán)境的情況下。當類里面定義了 setUp() 方法的時候,測試程序會在執(zhí)行每條測試項前先調(diào)用此方法;同樣地,在全部測試項執(zhí)行完畢后,tearDown() 方法也會被調(diào)用。
2) Pytest
目前行業(yè)內(nèi)常用的就是Pytest,Pytest簡單靈活,容易上手,支持參數(shù)化。
能夠支持簡單的單元測試和復雜的功能測試,還可以用來做Selenium/Appnium等自動化測試、接口自動化測試(Pytest+Requests),Pytest具有很多第三方插件,并且可以自定義擴展。

3、企業(yè)是怎么選擇的呢? ? ?

我不說也許你不知道,其實。。。。使用JavaScript或者jQuery也可以寫一些簡單的自動化腳本~
但很多大廠都是Java開發(fā)的,對于自動化測試開發(fā)工具多數(shù)也會使用Java語言,這樣更容易溝通,思想兼容。同時面向移動端自動化對掌握Java語言工具的測試工程師來講,Java也非常對口!
當然很多大廠包括一些中小型企業(yè),創(chuàng)業(yè)團隊也會使用Python進行測試。
用Python+Pytest自動化測試;
用Python+Selenium:搞定UI自動化測試,兼容性測試;
用Python Request:搞定接口測試;
用Python Locust,搞定性能測試;
用Python Scapy:搞定安全性能測試;
通過Python+mysql+Django/Flask搭建公司自己使用的自動化測試平臺。
對于移動端我所在的公司字節(jié)跳動為例,我們會使用自研Shoots方案來做全平臺自動化測試,也會通過Airtest做移動端跨平臺的UI自動化測試框架(適用于游戲和App)而這些都是基于Python語言開發(fā)的。
在數(shù)據(jù)驅(qū)動測試的情況下,在一些臨時項目,或者短期任務中,我們也常用Python這種膠水語言去寫一些腳本,生成測試數(shù)據(jù),輔助測試任務,降低人力成本。
三、Python 和Java 哪個更適合做自動化測試?
1、先來說說Python
Python沒有很復雜的結(jié)構(gòu),前期準備也少,對人員的專項素質(zhì)要求并不高,對電腦配置也沒有很高的要求,對于未經(jīng)過計算機專業(yè)培訓的同學來說入門唾手可及。
尤其是Pytest框架,它的擴展也比較好:
如Pytest-selenium(集成selenium)、
Pytest-html(完美html測試報告生成)、
Pytest-rerunfailures(失敗case重復執(zhí)行)、
Pytest-xdist(多CPU分發(fā))等測試用例的skip和xfail處理,可以很好和jenkins集成,
當然report框架----allure 也支持了Pytest。
最終你將會獲得一份測試報告如Jenkins展示圖:

總結(jié):對測試工程師而言,Python 簡單易學,龐大的充沛的生態(tài),對現(xiàn)有的自動化測試框架相對完善且好用(比如?selenium,Appium 等等),測試可以在框架上簡易地開發(fā),可以定制化測試環(huán)境。
2、再來說說JAVA
Java 雖然也能做自動化測試,但相對 Python 而言并不是那么好學。但如果測試工程師想在框架上進行簡易的開發(fā),做測試開發(fā)工作,那就必須掌握 Java 語言,需要學習更多的東西。
3、分享下我的真誠建議
Python和Java說到底是一種開發(fā)工具,一種語言,他們思想是互通的。
我們追求的本質(zhì)是提高測試效率,提高測試質(zhì)量,降低測試成本,降低維護成本。
語言本身無好壞。如何挑選?
要去挑你熟悉的或者周邊兒大家都在用的,這樣資源更具有優(yōu)勢。因為資源越豐富學習起來的成本越低,畢竟我們不是在一個封閉的環(huán)境悶聲學技術(shù)。
可以從Python入門,等有些基礎(chǔ)以后也可以選擇,再往Java上面去靠,學習更多的計算機原理。
有基礎(chǔ)的好上手,沒基礎(chǔ)的好入門,就目前Python對于測試來講足夠了。
如果你是一個正在觀望,不如看看這里 視頻鏈接:


四、寫在最后
注重學習思路,測試基礎(chǔ)的沉淀,測試策略及測試思路的培養(yǎng)對自動化測試更是事半功倍。等工作的時候基本都封裝了一套自己的測試架構(gòu),大家更在乎的是使用xxxx的技術(shù)方案探討和實踐哦~~
自動化測試進化圖,點亮智慧樹,請收好~

想,都是問題。做,才有答案!很多事情不是一步到位的,而是不停演化得到的結(jié)果。
? 行動起來~
供稿:字節(jié)跳動 ?畢波

若你是對測試不太了解的測試小萌新,有太多太多對測試的疑惑(前途、薪資、技術(shù)含量、男生是否可以干.....),強烈推薦你觀看《測試小白必看:學習軟件測試必問的100個問題,從此貼開始》,相信能掃除掉你心目中90%以上的常見問題。
《100個常見問題鏈接》:http://bbs.itheima.com/thread-507947-1-1.html

最后,為方便大家自學軟件測試,特意給大家準備了一份13G的超實用干貨學習資源,涉及的內(nèi)容非常全面。
包括軟件學習路線圖,黑馬50多天的上課視頻、16個突擊實戰(zhàn)項目,80余個軟件測試用軟件,37份測試文檔,70個軟件測試相關(guān)問題,40篇測試經(jīng)驗級文章,上千份測試真題分享,還有2020軟件測試面試寶典,還有軟件測試求職的各類精選簡歷,希望對大家有所幫助…..
《2022黑馬測試學習路線圖鏈接》:http://bbs.itheima.com/thread-405757-1-1.html
