當前位置:首頁 » 編程語言 » python最佳實踐

python最佳實踐

發布時間: 2024-10-17 23:46:49

python中條件語句的使用

1.if條件語句的基本用法:
if 判斷條件:
執行語句……
else:
執行語句……
其中"判斷條件"成立時(非零),則執行後面的語句,而執行內容可以多行,以縮進來區分表示同一范圍。
else 為可選語句,當需要在條件不成立時執行內容則可以執行相關語句。
2.if條件語句的嵌套方式一:
if 語句的判斷條件可以用>(大於)、<(小於)、==(等於)、>=(大於等於)、<=(小於等於)來表示其關系。
當判斷條件為多個值時,可以使用以下形式:
if 判斷條件1:
執行語句1……
elif 判斷條件2:
執行語句2……
elif 判斷條件3:
執行語句3……
else:
執行語句4……

Ⅱ 如何從零開始學python

1、學習的時候,我們都是要從Python的基礎語法開始學習 ,了解什麼是Python的變數 什麼是循環 什麼是函數,什麼是模塊。類等等。總之,基礎是學習以後高級開發的基石。
這個階段可以,選擇一些經典書籍或者視頻進行學習。
書籍可以看看《python快樂編程—基礎入門》這本書,是針對零基礎學生來編寫的書。

2、在學習完基礎語法的時候,你也對python有了一定程度的了解了,也知道Python有很多的學習方向,比如說數據採集方向(爬蟲),或者Web開發方向,也可能是最近特別火熱的人工智慧方向。每個方向所需要的技術都是不盡相同的,所以在我們學習完成Python的基礎語法之後,一定要慎重選擇自己之後的進階方向。
3、在進階階段,建議以最新的python視頻學習為主,相關書籍為輔,這個階段主要是學的技術是最新的,不要給自己留一個學完之後技術已經過時的慘敗後果。
此外還有一些小小的學習技巧分享給大家,希望大家調整好心態,堅持下去!
1.作為小白剛接觸編程,理解起來慢很正常。不能理解的東西,也不要死磕太久,在不斷的練習中,你對代碼的理解會越來越深。
2.個人認為,人按學習能力可以暴力分為:上手快&忘得快,上手慢&理解深,上手快&理解深。好了,第三類人我就不想多說什麼了。。。相信很多小夥伴都是第二類人!
3. 遇到問題,別死磕,多用搜索引擎,多看大牛的博客。
4. 覺得某個知識點時間花得久了,無非是想短時間投入,獲得較大的成就感,或者說想一帆風順敲代碼,別遇到什麼bug。不存在的。而且,一般情況下,花越多時間理解的知識點,花越多時間改好的bug,不是會獲得越大的成就感才對嘛?!

Ⅲ 學python最想要提升的是哪些地方

Python是一門編程語言,是一個較為方便地解決問題的工具。那麼具體提升取決於你未來的崗位。

後台工程師/架構師

如果你的崗位是後台工程師,那麼你要提升的是後台整體技術棧(mysql,redis,消息隊列,多線程),系統設計和針對具體問題提出解決方案的能力。同時你要掌握工程的最佳實踐,例如ci/cd等等。

數據工程師

如果你的崗位是數據工程師,那你需要把python數據處理的常見庫做到精通,你需要了解各個領域的數據處理流程和特性,你需要掌握最近的技術進展

演算法工程師

如果你是演算法工程師,此時Python只是眾多工具中的一個工具而已。如果你是科研方向,你要研究模型和理論本身,此時和語言沒關系了。如果是應用向,即用演算法解決具體的問題,那麼你要提升的是對問題的理解和建模能力,需要提升的是對每一個模型或者演算法的理解深度,在解決實際問題時,要能夠用最合適的演算法解決具體問題。

綜上,Python只是一個具體的工具,本質上要提升的是學習和解決問題的能力。

希望對你有用。

Ⅳ Python - pytest

目錄

pytest是Python的單元測試框架,同自帶的unittest框架類似,但pytest框架使用起來更簡潔,效率更高。

pytest特點

安裝

測試

在測試之前要做的准備

我的演示腳本處於這樣一個的目錄中:

踩坑:你創建的pytest腳本名稱中不允許含有 . ,比如 1.簡單上手.py ,這樣會報錯。當然,可以這么寫 1-簡單上手.py

demo1.py :

上例中,當我們在執行(就像Python解釋器執行普通的Python腳本一樣)測試用例的時候, pytest.main(["-s", "demo1.py"]) 中的傳參需要是一個元組或者列表(我的pytest是5.2.2版本),之前的版本可能需要這么調用 pytest.main("-s demo1.py") ,傳的參數是str的形式,至於你使用哪種,取決於報不報錯:

遇到上述報錯,就是參數需要一個列表或者元組的形式,而我們使用的是str形式。

上述代碼正確的執行結果是這樣的:

大致的信息就是告訴我們:

pytest.main(["-s", "demo1.py"])參數說明

除了上述的函數這種寫法,也可以有用例類的寫法:

用法跟unittest差不多,類名要以 Test 開頭,並且其中的用例方法也要以 test 開頭,然後執行也一樣。

執行結果:

那麼,你這個時候可能會問,我記得unittest中有setup和teardown的方法,難道pytest中沒有嘛?你怎麼提都不提?穩住,答案是有的。

接下來,我們來研究一下pytest中的setup和teardown的用法。

我們知道,在unittest中,setup和teardown可以在每個用例前後執行,也可以在所有的用例集執行前後執行。那麼在pytest中,有以下幾種情況:

來一一看看各自的用法。

模塊級別setup_mole/teardown_mole

執行結果:

類級別的setup_class/teardown_class

執行結果:

類中方法級別的setup_method/teardown_method

執行結果:

函數級別的setup_function/teardown_function

執行結果:

小結

該腳本有多種運行方式,如果處於PyCharm環境,可以使用右鍵或者點擊運行按鈕運行,也就是在pytest中的主函數中運行:

也可以在命令行中運行:

這種方式,跟使用Python解釋器執行Python腳本沒有什麼兩樣。也可以如下面這么執行:

當然,還有一種是使用配置文件運行,來看看怎麼用。

在項目的根目錄下,我們可以建立一個 pytest.ini 文件,在這個文件中,我們可以實現相關的配置:

那這個配置文件中的各項都是什麼意思呢?

首先, pytest.ini 文件必須位於項目的根目錄,而且也必須叫做 pytest.ini 。

其他的參數:

OK,來個示例。

首先,(詳細目錄參考開頭的目錄結構)在 scripts/test_case_01.py 中:

在 scripts/test_case_dir1/test_case02.py 中:

那麼,在不同的目錄或者文件中,共有5個用例將被執行,而結果則是兩個失敗三個成功。來執行驗證一下,因為有了配置文件,我們在終端中(前提是在項目的根目錄),直接輸入 pytest 即可。

由執行結果可以發現, 2 failed, 3 passed ,跟我們的預期一致。

後續執行相關配置都來自配置文件,如果更改,會有相應說明,終端都是直接使用 pytest 執行。

我們知道在unittest中,跳過用例可以用 skip ,那麼這同樣是適用於pytest。

來看怎麼使用:

跳過用例,我們使用 @pytest.mark.skipif(condition, reason) :

然後將它裝飾在需要被跳過用例的的函數上面。

效果如下:

上例執行結果相對詳細,因為我們在配置文件中為 addopts 增加了 -v ,之前的示例結果中,沒有加!
另外,此時,在輸出的控制台中, 還無法列印出 reason 信息,如果需要列印,則可以在配置文件中的 addopts 參數的 -s 變為 -rs :

如果我們事先知道測試函數會執行失敗,但又不想直接跳過,而是希望顯示的提示。

Pytest 使用 pytest.mark.xfail 實現預見錯誤功能::

需要掌握的必傳參數的是:

那麼關於預期失敗的幾種情況需要了解一下:

結果如下:

pytest 使用 x 表示預見的失敗(XFAIL)。

如果預見的是失敗,但實際運行測試卻成功通過,pytest 使用 X 進行標記(XPASS)。

而在預期失敗的兩種情況中,我們不希望出現預期失敗,結果卻執行成功了的情況出現,因為跟我們想的不一樣嘛,我預期這條用例失敗,那這條用例就應該執行失敗才對,你雖然執行成功了,但跟我想的不一樣,你照樣是失敗的!

所以,我們需要將預期失敗,結果卻執行成功了的用例標記為執行失敗,可以在 pytest.ini 文件中,加入:

這樣就就把上述的情況標記為執行失敗了。

pytest身為強大的單元測試框架,那麼同樣支持DDT數據驅動測試的概念。也就是當對一個測試函數進行測試時,通常會給函數傳遞多組參數。比如測試賬號登陸,我們需要模擬各種千奇百怪的賬號密碼。

當然,我們可以把這些參數寫在測試函數內部進行遍歷。不過雖然參數眾多,但仍然是一個測試,當某組參數導致斷言失敗,測試也就終止了。

通過異常捕獲,我們可以保證程所有參數完整執行,但要分析測試結果就需要做不少額外的工作。

在 pytest 中,我們有更好的解決方法,就是參數化測試,即每組參數都獨立執行一次測試。使用的工具就是 pytest.mark.parametrize(argnames, argvalues) 。

使用就是以裝飾器的形式使用。

只有一個參數的測試用例

來看(重要部分)結果::

可以看到,列表內的每個手機號,都是一條測試用例。

多個參數的測試用例

(重要部分)結果:

可以看到,每一個手機號與每一個驗證碼都組合一起執行了,這樣就執行了4次。那麼如果有很多個組合的話,用例數將會更多。我們希望手機號與驗證碼一一對應組合,也就是只執行兩次,怎麼搞呢?

在多參數情況下,多個參數名是以 , 分割的字元串。參數值是列表嵌套的形式組成的。

固件(Fixture)是一些函數,pytest 會在執行測試函數之前(或之後)載入運行它們,也稱測試夾具。

我們可以利用固件做任何事情,其中最常見的可能就是資料庫的初始連接和最後關閉操作。

Pytest 使用 pytest.fixture() 定義固件,下面是最簡單的固件,訪問主頁前必須先登錄:

結果:

在之前的示例中,你可能會覺得,這跟之前的setup和teardown的功能也類似呀,但是,fixture相對於setup和teardown來說更靈活。pytest通過 scope 參數來控制固件的使用范圍,也就是作用域。

比如之前的login固件,可以指定它的作用域:

很多時候需要在測試前進行預處理(如新建資料庫連接),並在測試完成進行清理(關閉資料庫連接)。

當有大量重復的這類操作,最佳實踐是使用固件來自動化所有預處理和後處理。

Pytest 使用 yield 關鍵詞將固件分為兩部分, yield 之前的代碼屬於預處理,會在測試前執行; yield 之後的代碼屬於後處理,將在測試完成後執行。

以下測試模擬資料庫查詢,使用固件來模擬資料庫的連接關閉:

結果:

可以看到在兩個測試用例執行前後都有預處理和後處理。

pytest中還有非常多的插件供我們使用,我們來介紹幾個常用的。

先來看一個重要的,那就是生成測試用例報告。

想要生成測試報告,首先要有下載,才能使用。

下載

如果下載失敗,可以使用PyCharm下載,怎麼用PyCharm下載這里無需多言了吧。

使用

在配置文件中,添加參數:

效果很不錯吧!

沒完,看我大招

Allure框架是一個靈活的輕量級多語言測試報告工具,它不僅以web的方式展示了簡潔的測試結果,而且允許參與開發過程的每個人從日常執行的測試中最大限度的提取有用信息。
從開發人員(dev,developer)和質量保證人員(QA,Quality Assurance)的角度來看,Allure報告簡化了常見缺陷的統計:失敗的測試可以分為bug和被中斷的測試,還可以配置日誌、步驟、fixture、附件、計時、執行 歷史 以及與TMS和BUG管理系統集成,所以,通過以上配置,所有負責的開發人員和測試人員可以盡可能的掌握測試信息。
從管理者的角度來看,Allure提供了一個清晰的「大圖」,其中包括已覆蓋的特性、缺陷聚集的位置、執行時間軸的外觀以及許多其他方便的事情。allure的模塊化和可擴展性保證了我們總是能夠對某些東西進行微調。

少扯點,來看看怎麼使用。

Python的pytest中allure下載

但由於這個 allure-pytest 插件生成的測試報告不是 html 類型的,我們還需要使用allure工具再「加工」一下。所以說,我們還需要下載這個allure工具。

allure工具下載

在現在allure工具之前,它依賴Java環境,我們還需要先配置Java環境。

注意,如果你的電腦已經有了Java環境,就無需重新配置了。

配置完了Java環境,我們再來下載allure工具,我這里直接給出了網路雲盤鏈接,你也可以去其他鏈接中自行下載:

下載並解壓好了allure工具包之後,還需要將allure包內的 bin 目錄添加到系統的環境變數中。

完事後打開你的終端測試:

返回了版本號說明安裝成功。

使用

一般使用allure要經歷幾個步驟:

來看配置 pytest.ini :

就是 --alluredir ./report/result 參數。

在終端中輸入 pytest 正常執行測試用例即可:

執行完畢後,在項目的根目下,會自動生成一個 report 目錄,這個目錄下有:

接下來需要使用allure工具來生成HTML報告。

此時我們在終端(如果是windows平台,就是cmd),路徑是項目的根目錄,執行下面的命令。

PS:我在pycharm中的terminal輸入allure提示'allure' 不是內部或外部命令,也不是可運行的程序或批處理文件。但windows的終端沒有問題。

命令的意思是,根據 reportresult 目錄中的數據(這些數據是運行pytest後產生的)。在 report 目錄下新建一個 allure_html 目錄,而這個目錄內有 index.html 才是最終的allure版本的HTML報告;如果你是重復執行的話,使用 --clean 清除之前的報告。

結果很漂亮:

allure open
默認的,allure報告需要HTTP伺服器來打開,一般我們可以通過pycharm來完成,另外一種情況就是通過allure自帶的open命令來完成。

allure的其他用法
當然,故事還是沒有完!在使用allure生成報告的時候,在編寫用例階段,還可以有一些參數可以使用:

allure.title與allure.description

feature和story

由上圖可以看到,不同的用例被分為不同的功能中。

allure.severity

allure.severity 用來標識測試用例或者測試類的級別,分為blocker,critical,normal,minor,trivial5個級別。

severity的默認級別是normal,所以上面的用例5可以不添加裝飾器了。

allure.dynamic

在之前,用例的執行順序是從上到下依次執行:

正如上例的執行順序是 3 1 2 。

現在,來看看我們如何手動控制多個用例的執行順序,這里也依賴一個插件。

下載

使用

手動控制用例執行順序的方法是在給各用例添加一個裝飾器:

那麼, 現在的執行順序是 2 1 3 ,按照order指定的排序執行的。

如果有人較勁傳個0或者負數啥的,那麼它們的排序關系應該是這樣的:

失敗重試意思是指定某個用例執行失敗可以重新運行。

下載

使用

需要在 pytest.ini 文件中, 配置:

給 addopts 欄位新增(其他原有保持不變) --reruns=3 欄位,這樣如果有用例執行失敗,則再次執行,嘗試3次。

來看示例:

結果:

我們也可以從用例報告中看出重試的結果:

上面演示了用例失敗了,然後重新執行多少次都沒有成功,這是一種情況。

接下來,來看另一種情況,那就是用例執行失敗,重新執行次數內通過了,那麼剩餘的重新執行的次數將不再執行。

通過 random 模塊幫助我們演示出在某次執行中出現失敗的情況,而在重新執行的時候,會出現成功的情況,看結果:

可以看到,用例 02 重新執行了一次就成功了,剩餘的兩次執行就終止了。

一條一條用例的執行,肯定會很慢,來看如何並發的執行測試用例,當然這需要相應的插件。

下載

使用

在配置文件中添加:

就是這個 -n=auto :

並發的配置可以寫在配置文件中,然後其他正常的執行用例腳本即可。另外一種就是在終端中指定,先來看示例:

結果:

pytest-sugar 改變了 pytest 的默認外觀,添加了一個進度條,並立即顯示失敗的測試。它不需要配置,只需 下載插件即可,用 pytest 運行測試,來享受更漂亮、更有用的輸出。

下載

其他照舊執行用例即可。

pytest-cov 在 pytest 中增加了覆蓋率支持,來顯示哪些代碼行已經測試過,哪些還沒有。它還將包括項目的測試覆蓋率。

下載

使用

在配置文件中:

也就是配置 --cov=./scripts ,這樣,它就會統計所有 scripts 目錄下所有符合規則的腳本的測試覆蓋率。

執行的話,就照常執行就行。

結果:

更多插件參考:https://zhuanlan.hu.com/p/50317866

有的時候,在 pytest.ini 中配置了 pytest-html 和 allure 插件之後,執行後報錯:

出現了這個報錯,檢查你配置的解釋器中是否存在 pytest-html 和 allure-pytest 這兩個模塊。如果是使用的pycharm ide,那麼你除了檢查settings中的解釋器配置之外,還需要保證運行腳本的編輯器配置是否跟settings中配置一致。

熱點內容
php重組數組 發布:2024-10-18 02:30:55 瀏覽:628
linuxmysql優化 發布:2024-10-18 02:18:41 瀏覽:206
android的layout 發布:2024-10-18 02:13:50 瀏覽:26
電腦伺服器客戶端怎麼登錄 發布:2024-10-18 02:13:42 瀏覽:265
電腦如何改路由器密碼 發布:2024-10-18 02:13:08 瀏覽:916
詳細教你如何設置路由器密碼 發布:2024-10-18 02:13:01 瀏覽:221
忘記光貓wifi密碼怎麼修改 發布:2024-10-18 01:53:55 瀏覽:986
mysql存儲函數語法 發布:2024-10-18 01:53:18 瀏覽:298
荷蘭豆存儲 發布:2024-10-18 01:49:03 瀏覽:300
被刪資料庫 發布:2024-10-18 01:48:54 瀏覽:160