Python測(cè)試線程應(yīng)用程序過(guò)程解析
這篇文章主要介紹了Python測(cè)試線程應(yīng)用程序過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在本章中,我們將學(xué)習(xí)線程應(yīng)用程序的測(cè)試。我們還將了解測(cè)試的重要性。
為什么要測(cè)試?
在我們深入討論測(cè)試的重要性之前,我們需要知道測(cè)試的內(nèi)容。一般來(lái)說(shuō),測(cè)試是一種了解某些東西是如何運(yùn)作的技術(shù)。另一方面,特別是如果我們談?wù)撚?jì)算機(jī)程序或軟件,那么測(cè)試就是訪問(wèn)軟件程序功能的技術(shù)。
在本節(jié)中,我們將討論軟件測(cè)試的重要性。在軟件開(kāi)發(fā)中,必須在向客戶(hù)端發(fā)布軟件之前進(jìn)行雙重檢查。這就是由經(jīng)驗(yàn)豐富的測(cè)試團(tuán)隊(duì)測(cè)試軟件非常重要的原因。請(qǐng)考慮以下幾點(diǎn)來(lái)理解軟件測(cè)試的重要性
提高軟件質(zhì)量
當(dāng)然,沒(méi)有公司想要提供低質(zhì)量的軟件,也沒(méi)有客戶(hù)想購(gòu)買(mǎi)低質(zhì)量的軟件。測(cè)試通過(guò)查找和修復(fù)其中的錯(cuò)誤來(lái)提高軟件的質(zhì)量。
客戶(hù)滿意度
任何業(yè)務(wù)中最重要的部分是客戶(hù)的滿意度。通過(guò)提供無(wú)錯(cuò)誤和優(yōu)質(zhì)軟件,公司可以實(shí)現(xiàn)客戶(hù)滿意度。
減輕新功能的影響
假設(shè)我們已經(jīng)建立了一個(gè)10000行的軟件系統(tǒng),我們需要添加一個(gè)新功能,然后開(kāi)發(fā)團(tuán)隊(duì)就會(huì)擔(dān)心這個(gè)新功能對(duì)整個(gè)軟件的影響。此外,測(cè)試也起著至關(guān)重要的作用,因?yàn)槿绻麥y(cè)試團(tuán)隊(duì)已經(jīng)完成了一系列測(cè)試,那么它可以使我們免于任何潛在的災(zāi)難性中斷。
用戶(hù)體驗(yàn)
任何業(yè)務(wù)中另一個(gè)最重要的部分是該產(chǎn)品用戶(hù)的體驗(yàn)。只有測(cè)試可以確保最終用戶(hù)發(fā)現(xiàn)它簡(jiǎn)單易用。
減少開(kāi)支
測(cè)試可以通過(guò)在開(kāi)發(fā)的測(cè)試階段找到并修復(fù)錯(cuò)誤而不是在交付后修復(fù)它來(lái)降低軟件的總成本。如果在交付軟件后出現(xiàn)重大錯(cuò)誤,那么就客戶(hù)不滿意,公司負(fù)面聲譽(yù)等方面的費(fèi)用和無(wú)形成本而言,會(huì)增加其實(shí)際成本。
測(cè)試什么?
始終建議您對(duì)要測(cè)試的內(nèi)容有適當(dāng)?shù)牧私?。在本?jié)中,我們將首先了解測(cè)試任何軟件時(shí)測(cè)試人員的主要?jiǎng)訖C(jī)。代碼覆蓋率,即我們的測(cè)試套件在測(cè)試時(shí)會(huì)遇到多少行代碼,應(yīng)該避免。這是因?yàn)?,在測(cè)試時(shí),僅關(guān)注代碼行數(shù)對(duì)我們的系統(tǒng)沒(méi)有任何實(shí)際價(jià)值??赡苋匀淮嬖谝恍╁e(cuò)誤,即使在部署之后,這些錯(cuò)誤也會(huì)在稍后階段反映出來(lái)。
考慮以下與測(cè)試內(nèi)容相關(guān)的重要觀點(diǎn)
我們需要專(zhuān)注于測(cè)試代碼的功能而不是代碼覆蓋率。
我們需要首先測(cè)試代碼中最重要的部分,然后轉(zhuǎn)向代碼中不太重要的部分。這肯定會(huì)節(jié)省時(shí)間。
測(cè)試人員必須具有多種不同的測(cè)試,可以將軟件推向極限。
測(cè)試并發(fā)軟件程序的方法
由于能夠利用多核架構(gòu)的真正能力,并發(fā)軟件系統(tǒng)正在取代順序系統(tǒng)。最近,并發(fā)系統(tǒng)程序被用于從手機(jī)到洗衣機(jī),從汽車(chē)到飛機(jī)等各種各樣的系統(tǒng)程序。我們需要更加謹(jǐn)慎地測(cè)試并發(fā)軟件程序,因?yàn)槿绻覀円呀?jīng)為單線程應(yīng)用程序添加了多個(gè)線程已經(jīng)是一個(gè)錯(cuò)誤,那么我們最終會(huì)遇到多個(gè)錯(cuò)誤。
并發(fā)軟件程序的測(cè)試技術(shù)廣泛關(guān)注于選擇交錯(cuò),這種交錯(cuò)暴露了可能有害的模式,如競(jìng)爭(zhēng)條件,死鎖和違反原子性。以下是測(cè)試并發(fā)軟件程序的兩種方法
系統(tǒng)探索
該方法旨在盡可能廣泛地探索交錯(cuò)的空間。這種方法可以采用蠻力技術(shù),其他方法采用偏序降階技術(shù)或啟發(fā)式技術(shù)來(lái)探索交織空間。
房產(chǎn)驅(qū)動(dòng)
屬性驅(qū)動(dòng)的方法依賴(lài)于觀察到并發(fā)錯(cuò)誤更可能發(fā)生在暴露特定屬性(例如可疑內(nèi)存訪問(wèn)模式)的交錯(cuò)下。不同的屬性驅(qū)動(dòng)方法針對(duì)不同的錯(cuò)誤,如競(jìng)爭(zhēng)條件,死鎖和違反原子性,這進(jìn)一步取決于一個(gè)或其他特定屬性。
測(cè)試策略
測(cè)試策略也稱(chēng)為測(cè)試方法。該策略定義了如何進(jìn)行測(cè)試。測(cè)試方法有兩種技術(shù) -
主動(dòng)
一種方法,盡可能早地啟動(dòng)測(cè)試設(shè)計(jì)過(guò)程,以便在創(chuàng)建構(gòu)建之前找到并修復(fù)缺陷。
反應(yīng)
一種方法,在開(kāi)發(fā)過(guò)程完成之前,測(cè)試不會(huì)開(kāi)始。
在對(duì)python程序應(yīng)用任何測(cè)試策略或方法之前,我們必須對(duì)軟件程序可能具有的錯(cuò)誤類(lèi)型有一個(gè)基本的想法。錯(cuò)誤如下
語(yǔ)法錯(cuò)誤
在程序開(kāi)發(fā)期間,可能會(huì)出現(xiàn)許多小錯(cuò)誤。錯(cuò)誤主要是由于輸入錯(cuò)誤。例如,缺少冒號(hào)或關(guān)鍵字的拼寫(xiě)錯(cuò)誤等。此類(lèi)錯(cuò)誤是由于程序語(yǔ)法錯(cuò)誤而非邏輯錯(cuò)誤造成的。因此,這些錯(cuò)誤稱(chēng)為語(yǔ)法錯(cuò)誤。
語(yǔ)義錯(cuò)誤
語(yǔ)義錯(cuò)誤也稱(chēng)為邏輯錯(cuò)誤。如果軟件程序中存在邏輯或語(yǔ)義錯(cuò)誤,則語(yǔ)句將正確編譯并運(yùn)行,但由于邏輯不正確,因此無(wú)法提供所需的輸出。
單元測(cè)試
這是測(cè)試python程序最常用的測(cè)試策略之一。此策略用于測(cè)試代碼的單元或組件。按單位或組件,我們指的是代碼的類(lèi)或函數(shù)。單元測(cè)試通過(guò)測(cè)試“小”單元簡(jiǎn)化了大型編程系統(tǒng)的測(cè)試。借助于上述概念,單元測(cè)試可以被定義為一種方法,其中測(cè)試各個(gè)源代碼單元以確定它們是否返回所需的輸出。
在隨后的章節(jié)中,我們將了解用于單元測(cè)試的不同Python模塊。
unittest模塊
單元測(cè)試的第一個(gè)模塊是unittest模塊。它受JUnit的啟發(fā),默認(rèn)情況下包含在Python3.6中。它支持測(cè)試自動(dòng)化,共享測(cè)試的設(shè)置和關(guān)閉代碼,將測(cè)試聚合到集合中,以及測(cè)試與報(bào)告框架的獨(dú)立性。
以下是unittest模塊支持的一些重要概念
文字夾具
它用于設(shè)置測(cè)試,以便在開(kāi)始測(cè)試之前運(yùn)行并在測(cè)試結(jié)束后拆除。它可能涉及在開(kāi)始測(cè)試之前創(chuàng)建臨時(shí)數(shù)據(jù)庫(kù),目錄等。
測(cè)試用例
測(cè)試用例檢查所需的響應(yīng)是否來(lái)自特定的輸入集。unittest模塊包含一個(gè)名為T(mén)estCase的基類(lèi),可用于創(chuàng)建新的測(cè)試用例。它包含兩個(gè)默認(rèn)方法 -
setUp() - 一種用于在運(yùn)行之前設(shè)置測(cè)試夾具的鉤子方法。 在調(diào)用實(shí)現(xiàn)的測(cè)試方法之前調(diào)用它。
tearDown( - 用于在類(lèi)中運(yùn)行所有測(cè)試后解構(gòu)類(lèi)夾具的鉤子方法。
測(cè)試套件
它是測(cè)試套件,測(cè)試用例或兩者的集合。
試驗(yàn)跑步者
它控制測(cè)試用例或套裝的運(yùn)行,并為用戶(hù)提供結(jié)果。它可以使用GUI或簡(jiǎn)單的文本界面來(lái)提供結(jié)果。
例
以下Python程序使用unittest模塊來(lái)測(cè)試名為 Fibonacci
的模塊。該程序有助于計(jì)算一個(gè)數(shù)字的斐波那契數(shù)列。在此示例中,我們創(chuàng)建了一個(gè)名為Fibo_test的類(lèi),以使用不同的方法定義測(cè)試用例。這些方法繼承自u(píng)nittest.TestCase。我們使用兩種默認(rèn)方法 setUp()和tearDown()。我們還定義了testfibocal方法。必須使用字母測(cè)試開(kāi)始測(cè)試的名稱(chēng)。在最后一個(gè)塊中,unittest.main()為測(cè)試腳本提供了一個(gè)命令行界面。
import unittest
def fibonacci(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
class Fibo_Test(unittest.TestCase):
def setUp(self):
print("This is run before our tests would be executed")
def tearDown(self):
print("This is run after the completion of execution of our tests")
def testfibocal(self):
self.assertEqual(fib(0), 0)
self.assertEqual(fib(1), 1)
self.assertEqual(fib(5), 5)
self.assertEqual(fib(10), 55)
self.assertEqual(fib(20), 6765)
if __name__ == "__main__":
unittest.main()
從命令行運(yùn)行時(shí),上面的腳本會(huì)生成一個(gè)如下所示的輸出 -
輸出
This runs before our tests would be executed. This runs after the completion of execution of our tests. . ---------------------------------------------------------------------- Ran 1 test in 0.006s OK
現(xiàn)在,為了更清楚,我們正在改變我們的代碼,這有助于定義Fibonacci模塊。
以下面的代碼塊為例
def fibonacci(n): a, b = 0, 1 for i in range(n): a, b = b, a + b return a
對(duì)代碼塊進(jìn)行了一些更改,如下所示 -
def fibonacci(n): a, b = 1, 1 for i in range(n): a, b = b, a + b return a
現(xiàn)在,在使用更改的代碼運(yùn)行腳本后,我們將獲得以下輸出
This runs before our tests would be executed. This runs after the completion of execution of our tests. F ====================================================================== FAIL: testCalculation (__main__.Fibo_Test) ---------------------------------------------------------------------- Traceback (most recent call last): File "unitg.py", line 15, in testCalculation self.assertEqual(fib(0), 0) AssertionError: 1 != 0 ---------------------------------------------------------------------- Ran 1 test in 0.007s FAILED (failures = 1)
上面的輸出顯示模塊未能提供所需的輸出。
Docktest模塊
docktest模塊還有助于單元測(cè)試。它還預(yù)先包裝了python。它比unittest模塊更容易使用。unittest模塊更適合復(fù)雜的測(cè)試。要使用doctest模塊,我們需要導(dǎo)入它。相應(yīng)函數(shù)的docstring必須具有交互式python會(huì)話及其輸出。
如果我們的代碼中的一切都很好,那么docktest模塊就沒(méi)有輸出; 否則,它將提供輸出。
例
以下Python示例使用docktest模塊測(cè)試名為Fibonacci的模塊,該模塊有助于計(jì)算數(shù)字的Fibonacci系列。
import doctest def fibonacci(n): """ Calculates the Fibonacci number >>> fibonacci(0) 0 >>> fibonacci(1) 1 >>> fibonacci(10) 55 >>> fibonacci(20) 6765 >>> """ a, b = 1, 1 for i in range(n): a, b = b, a + b return a if __name__ == "__main__": doctest.testmod()
我們可以看到名為fib的相應(yīng)函數(shù)的docstring具有交互式python會(huì)話以及輸出。如果我們的代碼沒(méi)問(wèn)題,那么doctest模塊就沒(méi)有輸出。但要了解它是如何工作的,我們可以使用-v選項(xiàng)運(yùn)行它。
(base) D:\ProgramData>python dock_test.py -v Trying: fibonacci(0) Expecting: 0 ok Trying: fibonacci(1) Expecting: 1 ok Trying: fibonacci(10) Expecting: 55 ok Trying: fibonacci(20) Expecting: 6765 ok 1 items had no tests: __main__ 1 items passed all tests: 4 tests in __main__.fibonacci 4 tests in 2 items. 4 passed and 0 failed. Test passed.
現(xiàn)在,我們將更改有助于定義Fibonacci模塊的代碼
以下面的代碼塊為例
def fibonacci(n): a, b = 0, 1 for i in range(n): a, b = b, a + b return a
以下代碼塊有助于更改
def fibonacci(n): a, b = 1, 1 for i in range(n): a, b = b, a + b return a
在沒(méi)有-v選項(xiàng)的情況下運(yùn)行腳本后,使用更改的代碼,我們將獲得如下所示的輸出。
輸出
(base) D:\ProgramData>python dock_test.py ********************************************************************** File "unitg.py", line 6, in __main__.fibonacci Failed example: fibonacci(0) Expected: 0 Got: 1 ********************************************************************** File "unitg.py", line 10, in __main__.fibonacci Failed example: fibonacci(10) Expected: 55 Got: 89 ********************************************************************** File "unitg.py", line 12, in __main__.fibonacci Failed example: fibonacci(20) Expected: 6765 Got: 10946 ********************************************************************** 1 items had failures: 3 of 4 in __main__.fibonacci ***Test Failed*** 3 failures.
我們可以在上面的輸出中看到三個(gè)測(cè)試都失敗了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python基于聚類(lèi)算法實(shí)現(xiàn)密度聚類(lèi)(DBSCAN)計(jì)算【測(cè)試可用】
這篇文章主要介紹了Python基于聚類(lèi)算法實(shí)現(xiàn)密度聚類(lèi)(DBSCAN)計(jì)算,結(jié)合實(shí)例形式分析了聚類(lèi)算法的相關(guān)概念、原理及使用聚類(lèi)算法進(jìn)行密度聚類(lèi)計(jì)算的相關(guān)操作技巧,需要的朋友可以參考下2018-12-12
python帶參數(shù)裝飾器的兩種寫(xiě)法示例代碼
裝飾器是 Python 中非常有用的語(yǔ)法特性,可以用于包裝或者修改函數(shù)的行為,本文介紹了python帶參數(shù)裝飾器的兩種寫(xiě)法,需要的朋友可以參考下2023-08-08
在Python的Django框架中更新數(shù)據(jù)庫(kù)數(shù)據(jù)的方法
這篇文章主要介紹了在Python的Django框架中更新數(shù)據(jù)庫(kù)數(shù)據(jù),對(duì)此Django框架中提供了便利的插入和更新方法,需要的朋友可以參考下2015-07-07
python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之多元線性回歸
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之多元線性回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
Python利用appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)操控的操作
Appium 是一個(gè)開(kāi)源、跨平臺(tái)的自動(dòng)化測(cè)試工具,用于測(cè)試原生和輕量移動(dòng)應(yīng)用,支持 iOS, Android 和 FirefoxOS 平臺(tái)。本文將利用appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)操控的操作,感興趣的可以了解一下2022-07-07
Python中使用第三方庫(kù)xlrd來(lái)讀取Excel示例
這篇文章主要介紹了Python中使用第三方庫(kù)xlrd來(lái)讀取Excel示例,本文講解了安裝xlrd、xlrd的API、使用xlrd讀取Excel代碼示例,需要的朋友可以參考下2015-04-04
基于virtualenv創(chuàng)建python虛擬環(huán)境過(guò)程圖解
這篇文章主要介紹了基于virtualenv創(chuàng)建python虛擬環(huán)境過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Python連接數(shù)據(jù)庫(kù)并批量插入包含日期記錄的操作
這篇文章主要介紹了Python連接數(shù)據(jù)庫(kù)并批量插入包含日期記錄的操作,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06

