當前位置:首頁 » 編程語言 » python覆蓋率

python覆蓋率

發布時間: 2023-06-29 19:43:59

『壹』 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中配置一致。

『貳』 python灰帽子講的什麼

內容簡介

《Python灰帽子》是由知名安全機構Immunity Inc的資深黑帽Justin Seitz主筆撰寫的一本關於編程語言Python如何被廣泛應用於黑客與逆向工程領域的書籍。老牌黑客,同時也是Immunity Inc的創始人兼首席技術執行官(CTO)Dave Aitel為這本書擔任了技術編輯一職。書中絕大部分篇幅著眼於黑客技術領域中的兩大經久不衰的話題:逆向工程與漏洞挖掘,並向讀者呈現了幾乎每個逆向工程師或安全研究人員在日常工作中所面臨的各種場景,其中包括:如何設計與構建自己的調試工具,如何自動化實現煩瑣的逆向分析任務,如何設計與構建自己的fuzzing工具,如何利用fuzzing 測試來找出存在於軟體產品中的安全漏洞,一些小技巧諸如鉤子與注入技術的應用,以及對一些主流Python安全工具如PyDbg、 Immunity Debugger、Sulley、IDAPython、PyEmu等的深入介紹。作者藉助於如今黑客社區中備受青睞的編程語言 Python引領讀者構建出精悍的腳本程序來一一應對上述這些問題。出現在書中的相當一部分Python代碼實例借鑒或直接來源於一些優秀的開源安全項目,諸如Pedram Amini的Paimei,由此讀者可以領略到安全研究者們是如何將黑客藝術與工程技術優雅融合來解決那些棘手問題的。

相關推薦:《Python教程》

作者簡介

Justin Seitz是一名Immunity公司的高級安全研究員,他在以往的工作中花費了大量的時間從事漏洞挖掘、逆向工程、編寫漏洞利用以及編寫Python代碼的研究。

目錄

第1章 搭建開發環境 1

1.1 操作系統要求 1

1.2 獲取和安裝Python 2.5 2

1.2.1 在Windows下安裝Python 2

1.2.2 在Linux下安裝Python 2

1.3 安裝Eclipse和PyDev 4

1.3.1 黑客摯友:ctype庫 5

1.3.2 使用動態鏈接庫 6

1.3.3 構建C數據類型 8

1.3.4 按引用傳參 9

1.3.5 定義結構體和聯合體 9

第2章 調試器原理和設計 12

2.1 通用寄存器 13

2.2 棧 15

2.3 調試事件 17

2.4 斷點 18

2.4.1 軟斷點 18

2.4.2 硬體斷點 20

2.4.3 內存斷點 22

第3章 構建自己的Windows調試器 24

3.1 Debugee,敢問你在何處 24

3.2 獲取寄存器狀態信息 33

3.2.1 線程枚舉 34

3.2.2 功能整合 35

3.3 實現調試事件處理常式 39

3.4 無所不能的斷點 44

3.4.1 軟斷點 44

3.4.2 硬體斷點 49

3.4.3 內存斷點 55

3.5 總結 59

第4章 PyDbg——Windows下的純Python調試器 60

4.1 擴展斷點處理常式 60

4.2 非法內存操作處理常式 63

4.3 進程快照 66

4.3.1 獲取進程快照 67

4.3.2 匯總與整合 70

第5章 Immunity Debugger——兩極世界的最佳選擇 74

5.1 安裝Immunity Debugger 74

5.2 Immunity Debugger 101 75

5.2.1 PyCommand命令 76

5.2.2 PyHooks 76

5.3 Exploit(漏洞利用程序)開發 78

5.3.1 搜尋exploit友好指令 78

5.3.2 「壞」字元過濾 80

5.3.3 繞過Windows 下的DEP機制 82

5.4 破除惡意軟體中的反調試常式 87

5.4.1 IsDebuugerPresent 87

5.4.2 破除進程枚舉常式 88

第6章 鉤子的藝術 90

6.1 使用PyDbg部署軟鉤子 90

6.2 使用Immunity Debugger部署硬鉤子 95

第7章 DLL注入與代碼注入技術 101

7.1 創建遠程線程 101

7.1.1 DLL注入 102

7.1.2 代碼注入 105

7.2 遁入黑暗 108

7.2.1 文件隱藏 109

7.2.2 構建後門 110

7.2.3 使用py2exe編譯Python代碼 114

第8章 Fuzzing 117

8.1 幾種常見的bug類型 118

8.1.1 緩沖區溢出 118

8.1.2 整數溢出 119

8.1.3 格式化串攻擊 121

8.2 文件Fuzzer 122

8.3 後續改進策略 129

8.3.1 代碼覆蓋率 129

8.3.2 自動化靜態分析 130

第9章 Sulley 131

9.1 安裝Sulley 132

9.2 Sulley中的基本數據類型 132

9.2.1 字元串 133

9.2.2 分隔符 133

9.2.3 靜態和隨機數據類型 134

9.2.4 二進制數據 134

9.2.5 整數 134

9.2.6 塊與組 135

9.3 行刺WarFTPD 136

9.3.1 FTP 101 137

9.3.2 創建FTP協議描述框架 138

9.3.3 Sulley會話 139

9.3.4 網路和進程監控 140

9.3.5 Fuzzing測試以及Sulley的Web界面 141

第10章 面向Windows驅動的Fuzzing測試技術 145

10.1 驅動通信基礎 146

10.2 使用Immunity Debugger進行驅動級的Fuzzing測試 147

10.3 Driverlib——面向驅動的靜態分析工具 151

10.3.1 尋找設備名稱 152

10.3.2 尋找IOCTL分派常式 153

10.3.3 搜尋有效的IOCTL控制碼 155

10.4 構建一個驅動Fuzzer 157

第11章 IDAPython——IDA PRO環境下的Python腳本編程 162

11.1 安裝IDAPython 163

11.2 IDAPython函數 164

11.2.1 兩個工具函數 164

11.2.2 段(Segment) 164

11.2.3 函數 165

11.2.4 交叉引用 166

11.2.5 調試器鉤子 166

11.3 腳本實例 167

11.3.1 搜尋危險函數的交叉代碼 168

11.3.2 函數覆蓋檢測 169

11.3.3 檢測棧變數大小 171

第12章 PYEmu——腳本驅動式模擬器 174

12.1 安裝PyEmu 174

12.2 PyEmu概覽 175

12.2.1 PyCPU 175

12.2.2 PyMemory 176

12.2.3 PyEmu 176

12.2.4 指令執行 176

12.2.5 內存修改器與寄存器修改器 177

12.2.6 處理常式(Handler) 177

12.3 IDAPyEmu 182

12.3.1 函數模擬 184

12.3.2 PEPyEmu 187

12.3.3 可執行文件加殼器 188

12.3.4 UPX加殼器 188

12.3.5 利用PEPyEmu脫UPX殼 189

『叄』 Python中的網路爬蟲指的是什麼

網路爬蟲(又稱為網頁蜘蛛,網路機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。

隨著網路的迅速發展,萬維網成為大量信息的載體,如何有效地提取並利用這些信息成為一個巨大的挑戰。搜索引擎(Search Engine),例如傳統的通用搜索引擎AltaVista,Yahoo!和Google等,作為一個輔助人們檢索信息的工具成為用戶訪問萬維網的入口和指南。但是,這些通用性搜索引擎也存在著一定的局限性,如:

(1)不同領域、不同背景的用戶往往具有不同的檢索目的和需求,通過搜索引擎所返回的結果包含大量用戶不關心的網頁。

(2)通用搜索引擎的目標是盡可能大的網路覆蓋率,有限的搜索引擎伺服器資源與無限的網路數據資源之間的矛盾將進一步加深。

(3)萬維網數據形式的豐富和網路技術的不斷發展,圖片、資料庫、音頻、視頻多媒體等不同數據大量出現,通用搜索引擎往往對這些信息含量密集且具有一定結構的數據無能為力,不能很好地發現和獲取。

(4)通用搜索引擎大多提供基於關鍵字的檢索,難以支持根據語義信息提出的查詢。

相對於通用網路爬蟲,聚焦爬蟲還需要解決三個主要問題:

(1) 對抓取目標的描述或定義;

(2) 對網頁或數據的分析與過濾;

(3) 對URL的搜索策略。

網路-網路爬蟲

熱點內容
免費ftp服務軟體 發布:2025-02-11 15:58:06 瀏覽:865
大櫻桃建園為什麼要配置授粉樹 發布:2025-02-11 15:58:00 瀏覽:628
五菱宏光s頂配有哪些配置 發布:2025-02-11 15:50:57 瀏覽:286
華為8加128配置有哪些 發布:2025-02-11 15:48:20 瀏覽:579
壓縮機三轉子 發布:2025-02-11 15:45:54 瀏覽:827
linux操作系統shell 發布:2025-02-11 15:45:53 瀏覽:338
安卓模擬器如何選擇安裝 發布:2025-02-11 15:34:26 瀏覽:176
安卓手機和華為哪個好用 發布:2025-02-11 15:32:11 瀏覽:555
大眾車載dv設置密碼多少 發布:2025-02-11 15:26:06 瀏覽:413
sqlserver連接超時 發布:2025-02-11 15:24:25 瀏覽:741