本文目錄一覽:
- 1、剛面完的位元組跳動Python軟體測試用例編寫(含思路)
- 2、python+appium自動化測試-重複執行測試用例
- 3、用 Python 為介面測試自動生成用例
- 4、python測試框架:如何執行pytest測試用例
- 5、如何在Python中編寫並發程序
- 6、python 自動化,如何添加測試用例
剛面完的位元組跳動Python軟體測試用例編寫(含思路)
軟體測試編寫是軟體測試的基本技能;也有很多人認為測試用例是軟體測試的核心;軟體測試中最重要的是設計和生成有效的測試用例;測試用例是測試工作的指導,是軟體測試的必須遵守的準則。
在這裡我們不討論以上的各種觀點,但是綜上所述,大家可以看出,測試用例編寫這項軟技能非常重要且是測試人的必備技能,相信很多人沒有質疑。
下面我們介紹下測試用例編寫。
我們將用例編寫分為黑盒用例編寫和白盒用例編寫兩大類。
黑盒測試用例(優先)+白盒測試用例(補充)=完整測試用例
總體編寫策略:
對於測試用例編寫來說,常用的四種方法基本就夠用了,等價類、邊界值、正交實驗法、錯誤推斷法,輔以場景測試法、需求/設計轉換法、探索式測試思想,可以應付絕大多數產品的測試。個別的產品還需要在某一點細化和擴充,需要就事論事。
使用各種編寫方法的綜合設計策略;
1)在任何情況下都必須使用邊界值分析方法,經驗表明用這種方法設計出測試用例發現程序錯誤的能力最強。
2)必要時用等價類劃分方法補充一些測試用例,尤其注意無效等價類情況。
3)如果程序的功能說明中含有輸入條件的組合情況,則一開始就可選用因果圖法(或判定表法、正交試驗法)。
4)用錯誤推測法再追加一些測試用例,主要是利用測試經驗。
5)對照程序邏輯,檢查已設計出的測試用例的邏輯覆蓋程度,如果沒有達到要求的覆蓋標準,應當再補充足夠的測試用例;參照白盒用例編寫。
6)對程序的應用場景進行研究和思考,增加不同場景下的測試用例;用戶場景測試必須重視,很大一部分程序錯誤就是因為測試場景與用戶真實場景的差異性帶來的。
7)對業務和程序有更深的理解之後,可以充分發揮發散思維和探索式想法;大家不要誤解探索式測試就是漫無目的的測試,其實探索式測試有非常詳細的測試指導思路。
常見的方法如下:
(1)等價類
(2)邊界值
(3)因果圖
(4)判定表驅動法
(5)正交實驗法
(6)功能圖法
(7)場景實驗法
(8)錯誤推斷法
(9)需求轉化
(10)設計文檔
(11)探索式測試
等價類:選取少數有代表性的數據,這一類數據等價於這一類的其它值;找出最小的子集,可以發現最多的錯誤;
兩大特性:必須設計的用例;涵蓋了大部分情況;
兩類情況:有效等價類;無效等價類;
轉化為測試用例
1、按照輸入條件、有效等價類、無效等價類建立等價類列表,列出所有的等價類;
2、為每一個等價類固定一個編號;
3、設計一個測試用例,使其覆蓋一個或多個有效的等價類;
4、設計一個或更多的測試用例以覆蓋剩餘的有效等價類;
使用場景:輸入條件(取值範圍/值個數;必須值集合;布爾值;一組處理值;必須遵守的規則;再細分更小等價類;)
等價類舉例:
以三角形測試為例:輸入3個整數做為三角形的三個邊,通過程序判定三角形的類型。
邊界值:所謂邊界條件,是指輸入和輸出等價類中那些恰好處於邊界、超過邊界、或在邊界以下的狀態 ;
兩個特徵:選擇一個或多個元素,以便等價類的每一個邊界都經過了測試;與僅僅關注輸入條件不同,還需要考慮結果空間(輸出等價類)設計測試用例;
邊界條件可能非常微妙,因此把他們確定下來煞費心思;
使用場景:輸入+輸出都需要考慮(值的範圍;值個數;有序集合;內部數據結構;分析規格說明;)
邊界值舉例:
以三角形測試為例:輸入3個整數做為三角形的三個邊,1a、b、c10,通過程序判定三角形的類型;
因果圖:輸入條件的組合進行分析。用一個系統的方法選擇出高效的測試用例集;
分析思路:
1、分析規格說明描述,確定原因和結果,並賦予標識符;
2、分析規格說明語義,找出原因與原因之間,原因與結果之間關係,畫出因果圖;
3、有些原因與原因之間,原因與結果之間組合不會出現,用記號表明約束或限制條件;
4、因果圖轉換為判定表;
5、判定表的每一列作為依據,設計測試用例;
使用場景:必須考慮輸入條件的各種組合(一種適合於描述多種條件的組合、相應產生多個動作的形式來進行設計);
4、黑盒-判定表
判定表:分析和表達多邏輯條件下執行不同操作的情況的工具 ;略過因果圖的繪製,直接列出所有組合進行篩選;
分析思路:判定表通常有四個部分組成:條件樁、動作樁、條件項、動作項;
判定表的建立步驟:(根據軟體規格說明)
確定規則個數;列出所有條件樁和動作樁;填入條件項;填入動作項,得到初始判定表;簡化合併相似規則;
使用場景:控制類和遊戲。優點是能把複雜的問題按各種可能的情況一一列舉出來,簡明而易於理解,也可避免遺漏。缺點是不能表達重複執行的動作,例如循環結構。
5、黑盒-正交試驗法
正交實驗法:利用因果圖來設計測試用例時, 輸入原因與輸出結果之間的因果關係,有時很難從軟體需求規格說明中得到;往往因果關係非常龐大,以至於測試用例數目巨大,為了有效地、合理地減少測試的工時與費用,可利用正交實驗設計方法進行測試用例的設計。
分析思路:
(1)提取功能說明,構造因子–狀態表 ;
(2)加權篩選,生成因素分析表 ;
(3)利用正交表構造測試數據集 ;
使用場景:必須考慮輸入條件的各種組合(從大量的數據中挑取適量、有代表性的點,合理有效的測試);
6、黑盒-場景實驗法
場景實驗法:軟體幾乎都是由事件觸發來控制流程的,事件觸發時的情景便形成了場景,而同一事件不同的觸發順序和處理結果形成事件流;生動的描繪出事件觸發時的情景,有利於設計用例,同時測試用例也更容易的得到理解和執行。
分析思路:
每條路徑都反映了基本流和備選流;基本流是最簡單的路徑;備選流自基本流開始,會有特定條件下加入並執行,可能有多種情況;
使用場景(0代表基本流):0;0+1;0+1+2;0+3;0+3+1;0+3+1+2;0+4;0+3+4;…
7、錯誤推斷法
錯誤推斷法:基於經驗和直覺推測程序中所有可能存在的各種錯誤,從而有針對性的設計測試用例的方法;更多的與用戶的使用習慣及測試程序中的常見問題為主。
分析思路:
(1)列舉出程序中所有可能有的錯誤和容易發生錯誤的特殊情況,根據這些情況選擇測試用例;
(2)注意積累與分享;
使用場景:任何測試、任何情景下都會用到的方法。
有常用的測試用例集,可以參照。
舉例:數字輸入驗證,分別輸入數字(正數、負數、零值、單精度、雙精度)、字元串、空白值、空值、臨界數值;不合法的輸入,系統給出必要的判斷提示信息;
8、黑盒-需求轉換法
需求轉換法:根據需求,執行需求分析,並編寫測試用例。
分析思路:
(1)將需求轉換為思維導圖;
(2)仔細推敲每一個字的含義;
(3)與用戶的使用場景和目的結合;
(4)嚴格設計每一個用例;
(5)可以建立一種模型,進行需求轉換;
使用場景:任何測試、任何情景下都會用到的方法。
注意:需求的變更帶來的影響;需求理解偏差帶來的影響;需求含糊不清帶來的影響等;
9、黑盒-設計文檔
設計文檔:參照設計文檔,可以理解軟體系統內部設計流程及處理機制,對比寫好的測試用例,可以在對應功能及模塊處新增;
分析思路:
(1)仔細閱讀設計文檔;
(2)與相關人員溝通實現機制;
(3)結合測試用例編寫方法,對比之前寫好的用例;
使用場景:任何測試、任何情景下都會用到的方法。
注意:設計文檔的編寫正確性;設計文檔的理解偏差;
10、黑盒-探索式測試法
探索式測試法:無限創意的測試點,永無止境的探索測試;我們要在測試的最前沿發揮洞察力、技術及應變措施,找出產品的缺陷;
分析思路:
局部探索式測試;全局探索式測試;混合探索式測試;
使用場景:任何測試、任何情景下都會用到的方法。像漫遊一樣,自由地尋找軟體中的缺陷,軟體測試的未來必然有探索式測試。
基本思路:
第一步需要繪製流程圖;
第二步根據路徑分析法確定測試用例;
第三步使用等價類/邊界值的方法確定測試用例的數據
第四步根據實際情況補充(如默認流程、特殊流程等)
基本策略:
1、語句覆蓋準則基本上沒啥用,比較強的邏輯覆蓋準則是判定覆蓋或者條件覆蓋;通常判定覆蓋可以滿足語句覆蓋;語句覆蓋判定覆蓋條件覆蓋;
2、循環覆蓋來說,完全的路徑測試並不符合實際;
若你想深入學習軟體測試,但是卻苦於沒有資源,現在就給大家奉上一份13G的超實用乾貨測試學習資源,涉及的內容非常全面。 需要點擊鏈接免費領取喔
包括測試軟體學習路線圖,50多天的測試上課視頻、16個突擊實戰測試項目,80餘個軟體測試用軟體,37份測試文檔,70個軟體測試相關問題,40篇測試經驗級文章,上千份測試真題分享,還有2022年軟體測試面試寶典,還有軟體測試求職的各類精選簡歷,希望對大家有所幫助……
python+appium自動化測試-重複執行測試用例
來自APP Android端自動化測試初學者的筆記,寫的不對的地方大家多多指教哦。
在功能測試過程中,經常會遇到一些偶然出現的Bug,需要通過重複執行用例來複現問題,那麼,在自動化測試的過程中,對於一些偶然出現的Bug,也可以針對單個用例,或者針對某個模塊的用例重複執行多次來複現。
重複執行測試用例的方法這邊主要總結了三個:
①重複運行單條或全部測試用例
②測試用例運行失敗後重新運行
③測試用例重複運行直到第一次失敗後停止
要重複執行測試用例,需要先安裝pytest-repeat插件
全局安裝: 即安裝在全局環境中,新創建的工程導入全局環境時會將該包導入,cmd輸入:pip install pytest -repeat,安裝成功後會顯示repeat版本號
局部安裝: 即安裝在當前項目的環境下,新創建的工程不會同步該包,在PyCharm→File→setting,搜索pytest intrepreter,點擊「+」號,如下圖所示:
再搜索pytest-repeat,點擊install package安裝
出現下圖表示安裝成功:
重複執行測試用例的方法有多種,比如:方法一的重複執行單條測試用例;方法二的重複執行每條測試用例;方法三的每條測試用例執行一次,共執行N遍。
在測試用例前添加註解@pytest.mark.repeat(value),value表示重複的次數,來實現單條用例的重複執行。
運行結果為:被裝飾的測試用例test_one會連續執行兩次,再執行test_two,即按照順序,第一個測試用例執行N次,再執行下一個測試用例
在終端傳入-count的方式實現重複執行測試用例
運行結果為:測試用例test_one會連續執行兩次,再執行兩次test_two,即按照執行順序,每一個測試用例都執行N次
注意:-s:表示輸出用例中的調式信息,比如print的列印信息等。
-repeat-scope類似於pytest fixture的scope參數,在終端輸入,-repeat-scope有四個參數:
重運行機制使用到了pytest的插件,插件名稱為:rerunfailures,要使用它,需要先安裝此插件
出現下圖表示安裝成功:
運行結果如下:
注意:
運行結果如下:
將pytest的 -x 選項與pytest-repeat結合使用,可以實現在重複運行測試用例的過程中,測試用例第一次失敗時就停止運行,具體實現方法如下:
運行結果如下:
用 Python 為介面測試自動生成用例
基於屬性的測試 會產生大量的、隨機的參數,特別適合為單元測試和介面測試生成測試用例
儘管早在2006年haskell語言就有了 QuickCheck 來進行」基於屬性的測試「,但是目前來看這依然是一個比較小眾的領域,參考資料有限,本文如有不足,歡迎指正。
在過去的測試實踐中,執行測試時通常需要明確的內容(Value):
這些內容可以通過」判定樹「或者」判斷表「來表示,然後測試的執行過程變成了這樣
可以稱為 基於表的測試
在最初,這給了我們測試的方向,但是缺點也非常明顯:
你要足夠多的”X-Y” 才能可能覆蓋到隱蔽的bug。
這裡請大家回答幾個問題:
如果以上問題的答案不是yes,那麼 基於屬性的測試 就是你需要掌握的東西!
基於屬性的測試和基於表的測試,最大的區別可以這樣描述:
vs
於是利用工具生成大量的X類數據,進行測試,並驗證結果是否Y類。
值得注意的是:
在不同的語言中有不同的工具來實現,比如:
本文以python為例進行演示:
假設有add函數,接收兩個類型整數參數,並返回它們的相加結果
首先寫出一個簡單的測試用例
正如前面所說,一個這樣的用例,根本沒信心覆蓋全部的場景,例如:
所以接下來怎麼辦?
改為基於屬性的測試
執行結果
由結果可知,工具根據 參數是整數 這一規範,自動生成、執行了大量的測試用例
介面測試和函數的單元測試非常相似:
此外介面文檔作為前後端、甚至測試開發的對接窗口,對參數的要求約定的更加細緻,
以OpenAPI為例,每個參數可以有以下屬性:
於是為介面生成符合要求的參數就變得可行了,舉個例子:
這是以unittest為例進行封裝的結果,只需要在TestCase中指定openapi的內容(或路徑),
啟動測試框架時,會自動讀取、解析介面文檔,並生成測試用例
下面是部分執行日誌,可以看到對介面發送了隨機參數,並獲得返回值
文章來自
python測試框架:如何執行pytest測試用例
pytest 執行目錄下所有用例
pytest 腳本名稱.py 執行某一個 py 文件下用例
pytest -m xx 執行@pytest.mark.xx 裝飾器修飾的所有測試
pytest -q 腳本名稱.py 簡單列印,只列印測試用例的執行結果
pytest -s 腳本名稱.py 詳細列印
pytest 腳本名稱.py -x 遇到錯誤時停止測試
pytest 腳本名稱.py –maxfail=X ,當用例錯誤個數達到X數量時,停止測試
pytest -s -k xx 腳本名稱.py 匹配xx用例名稱
pytest -s -k “not xx” 腳本名稱.py 匹配不包含XX的用例名稱
pytest -s -k “xxx or xx” 腳本名稱.py 同時匹配包含XX XXX的用例名稱
或者
如何在Python中編寫並發程序
多進程/多線程+Queue
一般來說,在Python中編寫並發程序的經驗是:計算密集型任務使用多進程,IO密集型任務使用多進程或者多線程.另外,因為涉及到資源共享,所以需要同步鎖等一系列麻煩的步驟,代碼編寫不直觀.另外一種好的思路是利用多進程/多線程+Queue的方法,可以避免加鎖這樣麻煩低效的方式.
現在在Python2中利用Queue+多進程的方法來處理一個IO密集型任務.
假設現在需要下載多個網頁內容並進行解析,單進程的方式效率很低,所以使用多進程/多線程勢在必行.
我們可以先初始化一個tasks隊列,裡面將要存儲的是一系列dest_url,同時開啟4個進程向tasks中取任務然後執行,處理結果存儲在一個results隊列中,最後對results中的結果進行解析.最後關閉兩個隊列.
下面是一些主要的邏輯代碼.
# -*- coding:utf-8 -*-
#IO密集型任務
#多個進程同時下載多個網頁
#利用Queue+多進程
#由於是IO密集型,所以同樣可以利用threading模塊
import multiprocessing
def main():
tasks = multiprocessing.JoinableQueue()
results = multiprocessing.Queue()
cpu_count = multiprocessing.cpu_count() #進程數目==CPU核數目
create_process(tasks, results, cpu_count) #主進程馬上創建一系列進程,但是由於阻塞隊列tasks開始為空,副進程全部被阻塞
add_tasks(tasks) #開始往tasks中添加任務
parse(tasks, results) #最後主進程等待其他線程處理完成結果
def create_process(tasks, results, cpu_count):
for _ in range(cpu_count):
p = multiprocessing.Process(target=_worker, args=(tasks, results)) #根據_worker創建對應的進程
p.daemon = True #讓所有進程可以隨主進程結束而結束
p.start() #啟動
def _worker(tasks, results):
while True: #因為前面所有線程都設置了daemon=True,故不會無限循環
try:
task = tasks.get() #如果tasks中沒有任務,則阻塞
result = _download(task)
results.put(result) #some exceptions do not handled
finally:
tasks.task_done()
def add_tasks(tasks):
for url in get_urls(): #get_urls() return a urls_list
tasks.put(url)
def parse(tasks, results):
try:
tasks.join()
except KeyboardInterrupt as err:
print “Tasks has been stopped!”
print err
while not results.empty():
_parse(results)
if __name__ == ‘__main__’:
main()
利用Python3中的concurrent.futures包
在Python3中可以利用concurrent.futures包,編寫更加簡單易用的多線程/多進程代碼.其使用感覺和Java的concurrent框架很相似(借鑒?)
比如下面的簡單代碼示例
def handler():
futures = set()
with concurrent.futures.ProcessPoolExecutor(max_workers=cpu_count) as executor:
for task in get_task(tasks):
future = executor.submit(task)
futures.add(future)
def wait_for(futures):
try:
for future in concurrent.futures.as_completed(futures):
err = futures.exception()
if not err:
result = future.result()
else:
raise err
except KeyboardInterrupt as e:
for future in futures:
future.cancel()
print “Task has been canceled!”
print e
return result
總結
要是一些大型Python項目也這般編寫,那麼效率也太低了.在Python中有許多已有的框架使用,使用它們起來更加高效.
但是自己的一些”小打小鬧”的程序這樣來編寫還是不錯的.:)
python 自動化,如何添加測試用例
1、單獨添加一個或多個用例
……
2、添加某個類下的所有用例
2.1方法一:
如Class_name類下有多個用例,則直接括弧里不寫入任何用例名,即可測試該類下所有用例。
2.2方法二
使用unittest.makeSuite(類名),將該類下所有用例添加到套件中
2.3方法三
使用 unittest.TestLoader()這個類下的loadTestsFromTestCase(類名),將該類下的所有用例加入到套件中
3、將整個文件中的用例都載入到套件中,不管有幾個用例類
使用 unittest.TestLoader()這個類下的loadTestsFromModule(文件名, pattern=None),moudle就是用例存放的文件名
原創文章,作者:DCRDC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/128462.html