軟件測試工程師面試的時候,但凡簡歷中有透露一點點自己會自動化測試的技能點的描述,都會被面試官問,那你結(jié)合你的測試項目說說自動化測試是怎么實現(xiàn)的?一到這里,很多網(wǎng)友,包括我的學(xué)生,也都一臉懵逼的樣子。
有心放棄吧,但是看著那么高的薪資,還是很眼熱的!但是說吧,可感覺自己說的是不是太簡單了,能成么?其實,大家遠(yuǎn)遠(yuǎn)不需要這么擔(dān)心,因為自動化測試沒有大家想的那么神秘,那么可怕,說出了本質(zhì),那就是都一樣的!
自動化測試的本質(zhì):是把以人為驅(qū)動的測試行為轉(zhuǎn)化為機器執(zhí)行的一種過程。一般,在設(shè)計了測試用例并通過評審之后,由測試人員根據(jù)測試用例中描述的規(guī)程一步步執(zhí)行測試,得到實際結(jié)果與期望結(jié)果的比較。自動化測試的目的是,為了節(jié)省人力、時間或硬件資源,提高測試效率?!@是百度百科中的介紹。
從上面一段文字描述中,我們能夠知道自動化測試跟手工測試有著密切的關(guān)系,并且是先有手工測試,設(shè)計測試用例,再將測試過程轉(zhuǎn)換為腳本語言,讓計算機運行的過程。
所以,大家在在進(jìn)行自動化測試的過程實現(xiàn)的時候,一定要根據(jù)手工測試中使用的測試用例進(jìn)行設(shè)計腳本,因為自動化測試要模擬人的實際操作。下面我們以實際案例說一下自動化測試的實現(xiàn)過程和手工測試的關(guān)系。
案例:在QQ注冊頁面,對QQ的注冊進(jìn)行功能測試。
頁面地址:https://ssl.zc.qq.com/v3/index-chs.html
確認(rèn)頁面中各個表單元素的需求:
1、昵稱:必填;不能超過24個字母或12個漢字
2、密碼:必填;8-16個字符;必須包含字母、數(shù)字、符號中至少2種
3、國家地區(qū)編碼:默認(rèn)+ 86
4、手機號:格式必須正確;用來接收驗證碼
5、驗證碼:輸入收到的驗證碼
6、手機號符合要求,可以點擊【發(fā)送短信驗證碼】;否則不可點擊;
7、用戶協(xié)議復(fù)選框默認(rèn)處于勾選狀態(tài)。
接下來我們設(shè)計一條測試用例:
【用例標(biāo)題】各項信息填寫正確,注冊QQ
【測試步驟】
1)打開Firefox瀏覽器
2)在瀏覽器地址欄輸入頁面地址:https://ssl.zc.qq.com/v3/index-chs.html
3)在昵稱文本框輸入:測試小梧
4)密碼框輸入:TestKai2020
5)手機號碼輸入:13366244232(未注冊過)
6)點擊【發(fā)送短信驗證碼】按鈕
7)輸入收到的短信驗證碼:321564
8)點擊【立即注冊】按鈕
【預(yù)期結(jié)果】
頁面跳轉(zhuǎn)到:注冊成功頁面。
(假如頁面地址為:https://ssl.zc.qq.com/v3/success.html)
如果大家覺得上面沒問題,能看懂,那說明我的測試用例寫的還行哦!
但是這是剛剛開始,測試用例的設(shè)計就是這個樣子,大家都看得懂的測試用例才是好的用例。執(zhí)行就不說了,因為接下來我們要說的是如何利用自動化進(jìn)行實現(xiàn)。
自動化測試有三點核心內(nèi)容:腳本語言,對象識別,自動執(zhí)行和結(jié)果判斷。這不是什么名人名言,是凱哥自己說的。
首先,選腳本語言。我們就選擇比較流行的Python。簡單、好用、時髦。選擇Python3.7版本,不高也不低,正好。
其次,做Web系統(tǒng)的自動化測試,我們選擇對象識別機制的時候就選擇Selenium(有同學(xué)可能說QTP/UFT也行,但是我想說這個Selenium不花錢)。Selenium就不介紹了。安裝好Python后,直接使用pip install selenium就能裝上。
最后,自動執(zhí)行我們要用外部參數(shù)文件,腳本寫好了,使用參數(shù)化多跑幾次,總不能換一個數(shù)據(jù)(手工測試要用到等價類、邊界值或者其他很多正常數(shù)據(jù)),就改一次代碼吧?還有,結(jié)果得計算機通過腳本自動的判斷,如果沒有,那還叫什么自動化?
當(dāng)我們確定好了這幾個內(nèi)容之后,就可以開始寫代碼了。(確保Python、Selenium都安裝成功)。
# 導(dǎo)入Selenium包和time包
from selenium import webdriver
from time import sleep
# 定義函數(shù)
def test_qq_reg():
# 定義瀏覽器驅(qū)動
driver = webdriver.Firefox()
# 打開頁面
driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
# 休眠2秒鐘
sleep(2)
# 在昵稱文本框輸入 “測試凱哥”
driver.find_element_by_id("nickname").send_keys("測試凱哥")
sleep(2)
# 在密碼文本框 輸入“TestKai2020”
driver.find_element_by_id("password").send_keys("TestKai2020")
sleep(2)
# 在手機號文本框輸入 “13366244232”
driver.find_element_by_id("phone").send_keys("13366244232")
sleep(2)
# 點擊 發(fā)送短信驗證碼 按鈕
driver.find_element_by_id("send-sms").click()
sleep(2)
# 在短信驗證碼文本框輸入 321234
driver.find_element_by_id("code").send_keys("321234")
sleep(2)
# 點擊 立即注冊 按鈕
driver.find_element_by_id("get_acc").click()
sleep(2)
# 判斷注冊后頁面是否跳轉(zhuǎn)到 成功頁(預(yù)期結(jié)果)
exp_url = "https://ssl.zc.qq.com/v3/success.html"
sleep(2)
# 瀏覽器獲取頁面url地址
real_url = driver.current_url
# 判斷實際結(jié)果和預(yù)期結(jié)果是否相同 相同就輸出 success
# 如果不同就截圖保存
if exp_url == real_url:
print("success")
else:
driver.get_screenshot_as_file("./test_qq.png")
# 調(diào)用函數(shù),運行腳本
test_qq_reg()
以上內(nèi)容就是把我們手工測試用例中的內(nèi)容完全使用自動化腳本去實現(xiàn),不要崇拜我哦!只要好好學(xué)了,都能學(xué)會!
但這還只是開始,剛才我們就說了,如果要改變測試數(shù)據(jù),難道要我去改代碼么?那還不如手工測試呢!接下來,我們就看看如何實現(xiàn)自動化腳本迭代運行。
我們使用CSV表格進(jìn)行測試數(shù)據(jù)的構(gòu)建和保存。
然后,在腳本中導(dǎo)入數(shù)據(jù)。下面直接看代碼:
# 導(dǎo)入Selenium包和time包
from selenium import webdriver
from time import sleep
# 導(dǎo)入csv包
import csv
# 定義函數(shù)
def test_qq_reg():
# 讀取csv中的數(shù)據(jù)(默認(rèn)會以列表嵌套的形式保存數(shù)據(jù)到腳本的變量中)
data = csv.reader(open('reg_qq.csv','r'))
# 定義瀏覽器驅(qū)動
driver = webdriver.Firefox()
# 使用循環(huán)獲取data中的列表數(shù)據(jù)
for info in data :
# 定義昵稱變量,獲取列表中的用戶名
name = info[0]
# 定義密碼變量,獲取列表中的密碼
passwd = info[1]
# 定義手機號變量,獲取列表中的手機號
phone = info[2]
# 定義驗證碼變量,獲取列表中的驗證碼
code = info[3]
'''
將代碼中輸入數(shù)據(jù)的地方都用上面的變量代替
'''
# 打開頁面
driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
# 休眠2秒鐘
sleep(2)
# 在昵稱文本框輸入 “測試凱哥”
driver.find_element_by_id("nickname").send_keys(name)
sleep(2)
# 在密碼文本框 輸入“TestKai2020”
driver.find_element_by_id("password").send_keys(passwd)
sleep(2)
# 在手機號文本框輸入 “13366244232”
driver.find_element_by_id("phone").send_keys(phone)
sleep(2)
# 點擊 發(fā)送短信驗證碼 按鈕
driver.find_element_by_id("send-sms").click()
sleep(2)
# 在短信驗證碼文本框輸入 321234
driver.find_element_by_id("code").send_keys(code)
sleep(2)
# 點擊 立即注冊 按鈕
driver.find_element_by_id("get_acc").click()
sleep(2)
# 判斷注冊后頁面是否跳轉(zhuǎn)到 成功頁(預(yù)期結(jié)果)
exp_url = "https://ssl.zc.qq.com/v3/success.html"
sleep(2)
# 瀏覽器獲取頁面url地址
real_url = driver.current_url
# 判斷實際結(jié)果和預(yù)期結(jié)果是否相同 相同就輸出 success
# 如果不同就截圖保存
if exp_url == real_url:
print("success")
else:
driver.get_screenshot_as_file("./test_qq.png")
sleep(2)
# 調(diào)用函數(shù),運行腳本
test_qq_reg()
然后可能還有網(wǎng)友說,那用到了框架怎么辦呢?我們上面的代碼,沒有使用任何框架,可以理解為就是個人行為,但是企業(yè)里面的代碼是要統(tǒng)一管理的,各自寫各自的,沒有統(tǒng)一標(biāo)準(zhǔn)那怎么行啊?于是就有了unittest這樣的框架,進(jìn)行代碼編寫和組合的規(guī)范化,還有了像HTMLTestRunner這樣能夠生成網(wǎng)頁版測試報告的外部庫和包(也稱為框架)。所以我們的代碼又可以強化了:
# 導(dǎo)入Selenium包和time包
from selenium import webdriver
from time import sleep
# 導(dǎo)入csv包
import csv
# 導(dǎo)入unittest包
import unittest
#導(dǎo)入生成HTML測試報告的包
from HTMLTestRunner import HTMLTestRunner
# 定義測試類,繼承unittest
class QQ(unittest.TestCase):
# 定義函數(shù)
def test_qq_reg(self):
# 讀取csv中的數(shù)據(jù)(默認(rèn)會以列表嵌套的形式保存數(shù)據(jù)到腳本的變量中)
data = csv.reader(open('reg_qq.csv','r'))
# 定義瀏覽器驅(qū)動
driver = webdriver.Firefox()
# 使用循環(huán)獲取data中的列表數(shù)據(jù)
for info in data :
# 定義昵稱變量,獲取列表中的用戶名
name = info[0]
# 定義密碼變量,獲取列表中的密碼
passwd = info[1]
# 定義手機號變量,獲取列表中的手機號
phone = info[2]
# 定義驗證碼變量,獲取列表中的驗證碼
code = info[3]
'''
將代碼中輸入數(shù)據(jù)的地方都用上面的變量代替
'''
# 打開頁面
driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
# 休眠2秒鐘
sleep(2)
# 在昵稱文本框輸入 “測試凱哥”
driver.find_element_by_id("nickname").send_keys(name)
sleep(2)
# 在密碼文本框 輸入“TestKai2020”
driver.find_element_by_id("password").send_keys(passwd)
sleep(2)
# 在手機號文本框輸入 “13366244232”
driver.find_element_by_id("phone").send_keys(phone)
sleep(2)
# 點擊 發(fā)送短信驗證碼 按鈕
driver.find_element_by_id("send-sms").click()
sleep(2)
# 在短信驗證碼文本框輸入 321234
driver.find_element_by_id("code").send_keys(code)
sleep(2)
# 點擊 立即注冊 按鈕
driver.find_element_by_id("get_acc").click()
sleep(2)
# 判斷注冊后頁面是否跳轉(zhuǎn)到 成功頁(預(yù)期結(jié)果)
exp_url = "https://ssl.zc.qq.com/v3/success.html"
sleep(2)
# 瀏覽器獲取頁面url地址
real_url = driver.current_url
# 判斷實際結(jié)果和預(yù)期結(jié)果是否相同 相同就輸出 success
# 如果不同就截圖保存
if exp_url == real_url:
print("success")
else:
driver.get_screenshot_as_file("./test_qq.png")
sleep(2)
#生成單元測試流程
testunit = unittest.TestSuite()
#加載測試用例,可以把多人的測試用例導(dǎo)入進(jìn)來,放在一起:
testunit.addTest(QQ("test_qq_reg"))
#創(chuàng)建測試報告
fp=open('./result.html','wb')
runner = HTMLTestRunner(stream=fp,
title="QQ注冊測試",
description="用例執(zhí)行情況:")
runner.run(testunit)
fp.close()
好看到這里,希望能夠消除大家對自動化測試實現(xiàn)過程的恐懼,真的沒有那么多難點!如果大家還有什么疑惑,可以找我深入溝通和交流哦!
最后感謝每一個認(rèn)真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:【文末領(lǐng)取】
????????????? 【下面是我整理的2023年最全的軟件測試工程師學(xué)習(xí)知識架構(gòu)體系圖】
一、Python編程入門到精通
二、接口自動化項目實戰(zhàn)??
三、Web自動化項目實戰(zhàn)
四、App自動化項目實戰(zhàn)??
五、一線大廠簡歷
六、測試開發(fā)DevOps體系??
七、常用自動化測試工具
八、JMeter性能測試??
九、總結(jié)(文末尾部小驚喜)
生命不息,奮斗不止。每一份努力都不會被辜負(fù),只要堅持不懈,終究會有回報。珍惜時間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!
生命短暫,時間寶貴,我們無法預(yù)知未來會發(fā)生什么,但我們可以掌握當(dāng)下。珍惜每一天,努力奮斗,讓自己變得更加強大和優(yōu)秀。堅定信念,執(zhí)著追求,成功終將屬于你!
只有不斷地挑戰(zhàn)自己,才能不斷地超越自己。堅持追求夢想,勇敢前行,你就會發(fā)現(xiàn)奮斗的過程是如此美好而值得。相信自己,你一定可以做到!文章來源:http://www.zghlxwxcb.cn/news/detail-649538.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-649538.html
到了這里,關(guān)于軟件測試工程師面試如何描述自動化測試是怎么實現(xiàn)的?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!