前言
隨著IT和5G技術(shù)發(fā)展的發(fā)展蛙粘,軟件已經(jīng)進(jìn)入每個(gè)人的手機(jī),要想客戶滿意威彰,必須保證軟件質(zhì)量出牧。軟件開發(fā)周期越來(lái)越短,軟件測(cè)試任務(wù)越來(lái)越重歇盼,而測(cè)試中的許多功能測(cè)試都是重復(fù)行非智力的舔痕,這些工作最適合計(jì)算機(jī)代替人工完成。
自動(dòng)化測(cè)試是一個(gè)非常廣泛的技術(shù)豹缀,需要多年努力學(xué)習(xí)才能精通伯复,有些做了四五年功能測(cè)試的工程師也沒(méi)有熟練掌握,所以自動(dòng)化測(cè)試是測(cè)試新手彎道超車?yán)蠝y(cè)試的好機(jī)會(huì)邢笙。
一啸如、自動(dòng)化測(cè)試概述
1. 概念
軟件自動(dòng)化測(cè)試就是通過(guò)測(cè)試工具或者其他手段,按照測(cè)試人員的預(yù)定計(jì)劃對(duì)軟件產(chǎn)品進(jìn)行自動(dòng)化測(cè)試氮惯,他是軟件測(cè)試的一個(gè)重要組成部分叮雳,能夠 完成許多手工測(cè)試無(wú)法完成或者難以實(shí)現(xiàn)的測(cè)試工作,正確合理的實(shí)施自動(dòng)化測(cè)試妇汗,能夠快速帘不,全面的對(duì)軟件進(jìn)行測(cè)試,從而提高軟件質(zhì)量杨箭,節(jié)省經(jīng)費(fèi)寞焙,縮短軟件的發(fā)布周期。
2. 為什么要進(jìn)行自動(dòng)化測(cè)試
- 縮短測(cè)試周期
計(jì)算機(jī)行業(yè)更新迭代快速告唆,大量頻繁的回歸測(cè)試消耗時(shí)間棺弊,自動(dòng)化測(cè)試能夠?qū)⒅貜?fù)的實(shí)行交給計(jì)算機(jī)去做,加快測(cè)試速度擒悬。 - 避免人為出錯(cuò)
測(cè)試人員不可能持續(xù)高度集中模她,并且人類易受外界影響(頭疼腦熱,精神不振)懂牧,可能會(huì)造成人為錯(cuò)誤 - 測(cè)試信息存儲(chǔ)
自動(dòng)化測(cè)試將測(cè)試信息和數(shù)據(jù)儲(chǔ)存在文件中侈净,思路清晰明確,交接方便 - 輕易獲取覆蓋率
自動(dòng)化測(cè)試能夠解放測(cè)試人員僧凤,使測(cè)試人員能夠有更多的精力做那些非重復(fù)性的工作畜侦。 - 其他
自動(dòng)化測(cè)試可以是實(shí)現(xiàn)自動(dòng)或者定時(shí)執(zhí)行
注意:自動(dòng)化測(cè)試的方向是對(duì)的,而且趨勢(shì)也是如此躯保,但是有些自動(dòng)化實(shí)現(xiàn)不了的還是會(huì)手動(dòng)測(cè)試的旋膳。
3. 自動(dòng)化測(cè)試條件和使用場(chǎng)景
條件:
- 手動(dòng)測(cè)試已經(jīng)完成,后期再不影響進(jìn)度的前提下逐漸實(shí)現(xiàn)自動(dòng)化
- 項(xiàng)目周期長(zhǎng),重復(fù)性的工作都交給機(jī)器去實(shí)現(xiàn)
- 需求穩(wěn)定,項(xiàng)目變動(dòng)不大
- 自動(dòng)化測(cè)試腳本復(fù)雜度比較低
- 可重復(fù)利用
場(chǎng)景:
- 頻繁的回歸測(cè)試
- 冒煙測(cè)試
- 傳統(tǒng)行業(yè)需求變化不大途事,應(yīng)用頻繁
- 性能測(cè)試
5. 自動(dòng)化測(cè)試流程
①分析測(cè)試需求
需求文檔是我們展開一切工作的根本验懊,也是測(cè)試工程師的測(cè)試目標(biāo)。測(cè)試工程師分析測(cè)試需求尸变,使用思維導(dǎo)圖提取測(cè)試點(diǎn)义图,以便用例設(shè)計(jì)時(shí)能夠覆蓋所有的需求點(diǎn)。這里舉一個(gè)例子召烂,App功能測(cè)試需要覆蓋一下幾個(gè)方面:
- 頁(yè)面控件測(cè)試碱工,確保各個(gè)控件可靠;
- 頁(yè)面功能測(cè)試,確保各項(xiàng)操作正常;
- 數(shù)據(jù)處理測(cè)試奏夫,確保數(shù)據(jù)顯示準(zhǔn)確怕篷、處理精確可靠;
- 模塊業(yè)務(wù)邏輯測(cè)試,確保各個(gè)業(yè)務(wù)流程暢通桶蛔。
②制定測(cè)試計(jì)劃
不管是手動(dòng)測(cè)試還是自動(dòng)化測(cè)試前匙头,必須做個(gè)測(cè)試計(jì)劃,明確測(cè)試對(duì)象仔雷、測(cè)試目的蹂析、測(cè)試的項(xiàng)目?jī)?nèi)容、測(cè)試的方法碟婆、測(cè)試的進(jìn)度电抚,預(yù)估測(cè)試風(fēng)險(xiǎn)。制定好測(cè)試計(jì)劃后竖共,下發(fā)給用例設(shè)計(jì)者蝙叛。
③設(shè)計(jì)測(cè)試用例
根據(jù)測(cè)試點(diǎn),設(shè)計(jì)出能夠覆蓋所有需求點(diǎn)的測(cè)試用例公给,形成測(cè)試用例文檔借帘。由于不是所有的測(cè)試用例都能用自動(dòng)化來(lái)執(zhí)行蜘渣,所以需要將能夠執(zhí)行自動(dòng)化測(cè)試的用例匯總成自動(dòng)化測(cè)試用例。必要時(shí)肺然,要將登陸系統(tǒng)的用戶蔫缸、密碼惫皱、產(chǎn)品削祈、客戶等參數(shù)信息獨(dú)立出來(lái)形成測(cè)試數(shù)據(jù),便于腳本開發(fā)第喳。
④搭建測(cè)試環(huán)境
自動(dòng)化測(cè)試人員在用例設(shè)計(jì)工作開展的同時(shí)即可著手搭建測(cè)試環(huán)境街望。因?yàn)樽詣?dòng)化測(cè)試的腳本編寫需要錄制頁(yè)面控件校翔,添加對(duì)象。測(cè)試環(huán)境的搭建灾前,包括被測(cè)系統(tǒng)的部署防症、測(cè)試硬件的調(diào)用、測(cè)試工具的安裝盒設(shè)置豫柬、網(wǎng)絡(luò)環(huán)境的布置等告希。
⑤編寫并執(zhí)行測(cè)試腳本
根據(jù)自動(dòng)化測(cè)試用例和問(wèn)題的難易程度,采取適當(dāng)?shù)哪_本開發(fā)方法編寫測(cè)試腳本烧给。
①先通過(guò)錄制的方式獲取測(cè)試所需要的頁(yè)面控件燕偶;
②然后再用結(jié)構(gòu)化語(yǔ)句控制腳本的執(zhí)行,插入檢查點(diǎn)和異常判定反饋語(yǔ)句础嫡,將公共普遍的功能獨(dú)立成共享腳本指么,必要時(shí)對(duì)數(shù)據(jù)驚醒參數(shù)化;
③還可以用其他高級(jí)功能編輯腳本榴鼎。
腳本編寫好了之后伯诬,需要反復(fù)執(zhí)行,不斷調(diào)試巫财,直到運(yùn)行正常為止盗似。
⑥分析測(cè)試結(jié)果、記錄測(cè)試問(wèn)題
建議測(cè)試工程師及時(shí)分析自動(dòng)化測(cè)試結(jié)果平项,每天抽出一定時(shí)間分析結(jié)果赫舒,更早地發(fā)現(xiàn)問(wèn)題。如果采用開源自動(dòng)化測(cè)試工具闽瓢,建議對(duì)其進(jìn)行二次開發(fā)接癌,以便與測(cè)試部門選定的缺陷管理工具緊密結(jié)合。理想情況下扣讼,自動(dòng)化測(cè)試案例運(yùn)行失敗后缺猛,自動(dòng)化測(cè)試平臺(tái)就會(huì)自動(dòng)上報(bào)一個(gè)缺陷。測(cè)試人員只需每天抽出一地你該時(shí)間,確認(rèn)這些自動(dòng)上報(bào)的缺陷荔燎,是否是真實(shí)的系統(tǒng)缺陷耻姥。如果是系統(tǒng)缺陷就提交開發(fā)人員修復(fù),如果不是系統(tǒng)缺陷有咨,就檢查自動(dòng)化測(cè)試腳本或者測(cè)試環(huán)境咏闪。
⑦跟蹤測(cè)試BUG
測(cè)試記錄的BUG要記錄到缺陷管理工具中去,以便定期跟蹤處理摔吏。開發(fā)人員修復(fù)后,需要對(duì)此問(wèn)題執(zhí)行回歸測(cè)試纵装,就是重復(fù)執(zhí)行一次該問(wèn)題對(duì)應(yīng)的較薄征讲,執(zhí)行通過(guò)則關(guān)閉,否則繼續(xù)修改橡娄。如果問(wèn)題的修改方案與客戶達(dá)成一致诗箍,但與原來(lái)的需求有所偏離,那么在回歸測(cè)試前挽唉,還需要對(duì)腳本進(jìn)行必要的修改和調(diào)試滤祖。
⑧自動(dòng)化腳本的維護(hù)
如果需求發(fā)生變更時(shí),測(cè)試腳本和相關(guān)文檔《自動(dòng)化測(cè)試用例》瓶籽、《自動(dòng)化腳本設(shè)計(jì)說(shuō)明書》進(jìn)行維護(hù)匠童。
4. 自動(dòng)化測(cè)試構(gòu)成
①接口自動(dòng)化測(cè)試
②UI自動(dòng)化測(cè)試
③持續(xù)集成
三、 接口自動(dòng)化測(cè)試
API接口測(cè)試介于單元測(cè)試和界面測(cè)試之間塑顺,是一種灰盒測(cè)試方法汤求,主要測(cè)試內(nèi)部接口功能的完成性。相較于UI自動(dòng)化測(cè)試严拒,它具有自動(dòng)化成本低和測(cè)試效率高的特點(diǎn)扬绪。
接口測(cè)試的工作原理是接口測(cè)試工具模擬客戶端向服務(wù)器發(fā)送報(bào)文請(qǐng)求,服務(wù)器接受請(qǐng)求并做出響應(yīng)裤唠。然后向客戶端返回應(yīng)答信息挤牛,接口測(cè)試工具對(duì)應(yīng)答信息進(jìn)行解析的一個(gè)過(guò)程。
常用的接口測(cè)試工具有:
①Apache JMeter:是一款基于Java的開源測(cè)試工具种蘸,主要應(yīng)用于WEB應(yīng)用程序的負(fù)載測(cè)試墓赴,同時(shí)也支持單元測(cè)試和接口測(cè)試;
②Postman:是一款功能強(qiáng)大的網(wǎng)頁(yè)測(cè)試工具劈彪,支持WEB API和HTTP請(qǐng)求竣蹦,能夠發(fā)送任何類型的HTTP請(qǐng)求(GET、HEAD沧奴、POST痘括、PUT等)。Postwomen與其近似的一款免費(fèi)開源、輕量級(jí)測(cè)試工具纲菌;
③SoapUI挠日,是一款用于SOAP和REST的開源API測(cè)試自動(dòng)化框架,可以集成到Eclipse等開發(fā)工具中翰舌,支持用戶二次開發(fā)嚣潜;
④Robot Framework,是一款基于Python3的開源自動(dòng)化測(cè)試框架椅贱,具有良好的可擴(kuò)展性懂算,支持關(guān)鍵字驅(qū)動(dòng),運(yùn)行用戶二次開發(fā)庇麦。
基于這些接口測(cè)試工具计技,測(cè)試人員可以根據(jù)自身業(yè)務(wù)需要開發(fā)適合自己的接口自動(dòng)化測(cè)試工具。有了接口自動(dòng)化測(cè)試工具山橄,我們就可以開展自動(dòng)化測(cè)試工作垮媒。
自己搭建框架
使用測(cè)試工具自動(dòng)化測(cè)試比較有局限,所以我們可以自己搭建一套自動(dòng)化框架:
①讀取文件中的數(shù)據(jù)航棱,使用csv或者excel
//讀取csv
import csv
class ReadCsv():
def readCsv(self):
item = []
rr = csv.reader(open("../dataDemo/123.csv"))
for csv_i in rr:
item.append(csv_i)
item =item [1:]
return item
//讀取excel
from openpyxl import load_workbook
class Readxcel():
def getTestExcel(self):
# 打開表
workbook = load_workbook("G:\python\pythonProject\pytest05a\\requestdemo\\a.xlsx")
# 定位表單
sheet = workbook['Sheet1']
print(sheet.max_row) # 3 行
print(sheet.max_column) # 3 列
test_data = [] # 把所有行的數(shù)據(jù)放到列表中
for i in range(2, sheet.max_row + 1):
sub_data = {} # 把每行的數(shù)據(jù)放到字典中
for j in range(1, sheet.max_column + 1):
sub_data[sheet.cell(1, j).value] = sheet.cell(i, j).value
test_data.append(sub_data) # 拼接每行單元格的數(shù)據(jù)
return test_data
t = Readxcel()
f = t.getTestExcel()
print(f)
②requests拿到數(shù)據(jù)請(qǐng)求接口返回狀態(tài)碼
import requests
from requestdemo.readexcel import Readxcel
class GetStatusCode():
def getStatusCode(self):
t = Readxcel()
f = t.getTestExcel()
item = []
for excel_i in f:
if excel_i["method"] == "get":
rr = requests.get(excel_i["url"], params=excel_i["params"])
item.append(rr.status_code)
else:
rr = requests.post(excel_i["url"], data=excel_i["params"])
item.append(rr.status_code)
return item
print(GetStatusCode().getStatusCode())
③通過(guò)斷言驗(yàn)證返回狀態(tài)碼和200對(duì)比
import allure, pytest, os
from requestdemo.getStatusCode import GetStatusCode
get = GetStatusCode()
statusCodes = get.getStatusCode()
class TestReadExcel():
def testReadExcel(self):
for code in statusCodes:
assert code == 200
if __name__ == "__main__":
# 生成測(cè)試報(bào)告json
pytest.main(["-s", "-q", '--alluredir', 'report/result', 'testreadexcel.py'])
# 將測(cè)試報(bào)告轉(zhuǎn)為html格式
split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
os.system(split)
④生成allure的測(cè)試報(bào)告
四睡雇、UI自動(dòng)化測(cè)試
UI自動(dòng)化測(cè)試的成本比接口測(cè)試要高,不是技術(shù)實(shí)現(xiàn)難度高饮醇,因?yàn)閁I是用戶界面它抱,變化比較頻繁,維護(hù)成本高朴艰。
那么我們到要不要進(jìn)行UI自動(dòng)化測(cè)試呢抗愁?要要要!對(duì)一些大型項(xiàng)目呵晚,其功能是處于不斷地迭代地蜘腌,雖然界面在調(diào)整,但是由于項(xiàng)目周期長(zhǎng)饵隙,在開發(fā)和測(cè)試過(guò)程中撮珠,需要頻繁使用自動(dòng)化測(cè)試的腳本進(jìn)行回歸測(cè)試,可以提高自動(dòng)化測(cè)試的利用率金矛,提高工作效率芯急,降低工作成本。
UI自動(dòng)化分為App自動(dòng)化和Web自動(dòng)化測(cè)試驶俊,我們先學(xué)習(xí)web自動(dòng)化娶耍。
1. Web自動(dòng)化
推薦工具:推薦使用工具Selenium,主要進(jìn)行Web自動(dòng)化測(cè)試饼酿。
優(yōu)點(diǎn):
跨平臺(tái)榕酒、跨語(yǔ)言
支持多種瀏覽器
支持移動(dòng)端測(cè)試
插件多胚膊,擴(kuò)展性強(qiáng)
缺點(diǎn):不能直接生成測(cè)試報(bào)告不能識(shí)別動(dòng)態(tài)圖片
工作原理:
環(huán)境搭建
1)python3.7
2)Firefox35(大于43)
3)selenium2框架
穩(wěn)定版 2.48.0 (pip install selenium==2.48.0)
4)瀏覽器驅(qū)動(dòng)
使用:
由于篇幅太長(zhǎng),請(qǐng)閱讀《Web自動(dòng)化測(cè)試想鹰,這篇足夠了》
2. App自動(dòng)化
推薦工具:推薦使用Appium紊婉,無(wú)論是在市場(chǎng)利用率,還是在功能上辑舷,都比其他工具要強(qiáng)喻犁。而且,Appium不僅支持Android還支持iOS何缓,所以在這里肢础,我們應(yīng)該選擇學(xué)習(xí)Appium最能滿足市場(chǎng)的需要。
使用:
由于appium使用篇幅太長(zhǎng)碌廓,請(qǐng)閱讀《App端UI自動(dòng)化測(cè)試乔妈,看完還不會(huì)找我》
五、持續(xù)集成
1. 什么是真正的自動(dòng)化氓皱?
開發(fā)工程師提交新版本代碼,自動(dòng)構(gòu)建勃刨,我們測(cè)試自動(dòng)執(zhí)行腳本波材。
這就是持續(xù)集成,持續(xù)集成推薦使用Jenkins身隐。
2廷区、持續(xù)集成概念
互聯(lián)網(wǎng)軟件的開發(fā)和發(fā)布,已經(jīng)形成了一套標(biāo)準(zhǔn)流程贾铝,最重要的組成部分就是持續(xù)集成(Continuous integration隙轻,簡(jiǎn)稱CI)
2.1. 持續(xù)集成(采蜜)
持續(xù)集成指的是,頻繁地(一天多次)將代碼集成到主干垢揩。
它的好處主要有兩個(gè):
(1)快速發(fā)現(xiàn)錯(cuò)誤玖绿。每完成一點(diǎn)更新,就集成到主干叁巨,可以快速發(fā)現(xiàn)錯(cuò)誤斑匪,定位錯(cuò)誤也比較容易。
(2)防止分支大幅偏離主干锋勺。如果不是經(jīng)常集成蚀瘸,主干又在不斷更新,會(huì)導(dǎo)致以后集成的難度變大庶橱,甚至難以集成贮勃。
持續(xù)集成的目的,就是讓產(chǎn)品可以快速迭代苏章,同時(shí)還能保持高質(zhì)量寂嘉。它的核心措施是奏瞬,代碼集成到主干之前,必須通過(guò)自動(dòng)化測(cè)試垫释。只要有一個(gè)測(cè)試用例失敗丝格,就不能集成。
2.2. 持續(xù)交付
持續(xù)交付(Continuous delivery)指的是棵譬,頻繁地將軟件的新版本显蝌,交付給質(zhì)量團(tuán)隊(duì)或者用戶,以供評(píng)審订咸。如果評(píng)審?fù)ㄟ^(guò)曼尊,代碼就進(jìn)入生產(chǎn)階段。
持續(xù)交付可以看作持續(xù)集成的下一步脏嚷。它強(qiáng)調(diào)的是骆撇,不管怎么更新,軟件是隨時(shí)隨地可以交付的父叙。
2.3. 持續(xù)部署
定義:持續(xù)部署(continuous deployment)是持續(xù)交付的下一步神郊,指的是代碼通過(guò)評(píng)審以后,自動(dòng)部署到生產(chǎn)環(huán)境趾唱。
目標(biāo):代碼在任何時(shí)刻都是可部署的涌乳,可以進(jìn)入生產(chǎn)階段。
前提:能自動(dòng)化完成測(cè)試甜癞、構(gòu)建夕晓、部署等步驟。
3悠咱、持續(xù)集成工具Jenkins
Jenkins概念: Jenkins 是一個(gè)開源軟件項(xiàng)目蒸辆,是基于Java開發(fā)的一種可拓展持續(xù)集成工具,主要用于持續(xù)析既、自動(dòng)地構(gòu)建 / 測(cè)試 / 集成軟件項(xiàng)目以及監(jiān)控一些定時(shí)執(zhí)行的任務(wù)躬贡。
Jenkins目的:
①持續(xù)、自動(dòng)地構(gòu)建/測(cè)試軟件項(xiàng)目眼坏。
②監(jiān)控軟件開放流程逗宜,快速問(wèn)題定位及處理,提示開放效率空骚。
Jenkins特性:
? 易于安裝纺讲,只要把 jenkins.war 部署到 Tomcat 即可運(yùn)行
? 易于配置,所有配置都是通過(guò)其提供的 web 界面實(shí)現(xiàn)
? 集成 RSS/E-mail囤屹,通過(guò) RSS 發(fā)布構(gòu)建結(jié)果或當(dāng)構(gòu)建完成時(shí)通過(guò) e-mail 通知
? 生成 JUnit / TestNG 測(cè)試報(bào)告
? 分布式構(gòu)建熬甚,支持 Jenkins 能夠讓多臺(tái)計(jì)算機(jī)一起構(gòu)建/測(cè)試
? 插件支持,支持?jǐn)U展插件肋坚,你可以開發(fā)適合自己團(tuán)隊(duì)使用的工具
產(chǎn)品發(fā)布流程:
產(chǎn)品設(shè)計(jì)成型 → 開發(fā)人員開發(fā)代碼 → 測(cè)試人員測(cè)試功能 → 運(yùn)維人員發(fā)布上線
六乡括、總結(jié)
若想真正實(shí)現(xiàn)軟件自動(dòng)化測(cè)試肃廓,必須包含持續(xù)集成、UI自動(dòng)化和接口自動(dòng)化诲泌。要達(dá)到這種水平盲赊,各種技術(shù)要熟練到一定級(jí)別。其實(shí)對(duì)于測(cè)試工程師來(lái)講敷扫,測(cè)試的工作其實(shí)相對(duì)比較輕松哀蘑,技術(shù)難度也不是特別高。我們要保持高度學(xué)習(xí)精神葵第,成為行業(yè)的高精尖人才绘迁!