pytest 是一個用于 Python 的強大的測試框架。它支持功能測試、單元測試和模擬等測試需求,通常與 Flask(輕量級的 Python web 框架)一起使用。
## pytest 特點
* 入門簡單,文檔豐富
* 支持參數化,可以從教細的力度控制測試用例
* 能夠支持簡單的單元測試和復雜的功能測試
* 支持測試跳過,失敗case標記
* 支持失敗重試
* 支持由nose,unittest編寫的測試用例
* 支持HTML報告,eport框架----allure 也支持了pytest
* 和jenkins持續集成很方便
* 具有很多第三方插件,并且可以自定義擴展
## pytest 測試用例設計原則
* 所有的包必須要有__init__.py文件
* 文件名必須以*_test.py或者test_*.py命名
* 測試類必須以Test開頭,并且不能包含__init__方法
* 測試函數必須以test開頭
* 測試類里以test_開頭的方法
## pytest + allure 測試報表
## allure-behave
通過指定`allure_behave.formatter:AllureFormatter`作為格式化器和輸出目錄,來運行`behave`:
```
behave -f allure_behave.formatter:AllureFormatter -o %allure_result_folder% ./features
```
* 將測試結果存放在`%allure_result_folder%`中,而不是直接生成報告。
然后通過 Allure 命令行(需要另外安裝)來生成報告:
```
allure serve %allure_result_folder%
```
這將會生成本地的 Allure 報告,并自動在默認瀏覽器中打開。
另外,需要注意的是,Allure 提供了很多額外的功能(例如添加附件、與測試用例關聯的問題等),要利用這些功能,你需要在你的步驟定義中使用 Allure 的 Python 庫 (`allure-python-commons`) 提供的裝飾器和函數。
## allure
Allure 是一款開源的測試報告生成工具,可以生成清晰、形象的測試報告,以可視化的形式展示測試執行結果。Allure 內置了許多特性,如測試案例追蹤、測試時長趨勢、失敗情況分析等。
安裝并使用 Allure 的過程如下:
1. **安裝 Allure**:首先需要在電腦上安裝 Allure。如果你使用的是 macOS,可以通過 Homebrew 安裝:
~~~
bashCopy codebrew install allure
~~~
For Windows, you can download it from the Allure Framework's GitHub page and add it to your path.
2. **生成 Allure 結果**:在你的測試框架里進行設置,使其在運行測試時能生成 Allure 原始結果。這需要額外的插件或庫。例如,如果你使用的是 pytest,你需要安裝`pytest-allure-adaptor`插件:
~~~
pip install pytest-allure-adaptor
~~~
并在運行 pytest 時用`--alluredir`參數指定結果輸出的目錄:
~~~
pytest --alluredir=result_directory
~~~
3. **生成報告**:使用 Allure 命令行工具處理輸出的結果,并生成 HTML 格式的報告:
~~~
allure serve result_directory
~~~
這條命令將啟動一個本地 Web 服務器,自動打開瀏覽器顯示生成的報告。你可以看到各種可視化的統計信息,覆蓋率,失敗的用例等。
注意,使用 Allure 可能需要你稍微改變寫測試用例的方式,以便提供更多測試細節。例如,你需要增加一些注解來提供測試步驟的描述或測試案例的元數據。
##
Allure 是一種易于生成的、易于閱讀的測試報告框架。它支持多種測試工具和庫,并以跨平臺的可視化方式展示測試結果。下面我們來看看
要查看 Allure 報告,請安裝 Allure 命令行工具,并使用`allure serve`命令 (如`allure serve %allure_result_folder%`) 生成報告。報告將在默認瀏覽器中打開,展示你的測試結果和相關詳細信息。
##
### pytest + Allure
以 pytest 為例,你可以通過下面的方式使用 Allure:
安裝 Allure:
Allure 命令行工具可以通過以下方式獲取:
對于 macOS 系統,可以使用 Homebrew 進行安裝:
bash
Copy code
brew install allure
對于 Windows 系統,可以下載安裝包并正確設置環境變量,詳見 Allure Framework 官網安裝指南。
安裝pytest插件:
你需要在 Python 項目中安裝 pytest-allure-adaptor 插件:
bash
Copy code
pip install allure-pytest
運行測試并生成報告:
運行 pytest 時,加上 --alluredir 參數,指定一個目錄來存儲測試結果:
bash
Copy code
pytest --alluredir=/path/to/results/directory
當測試運行完成后,用 Allure 命令行工具生成報告:
bash
Copy code
allure serve /path/to/results/directory
這將會在默認瀏覽器中打開一份詳細的測試報告,包括測試覆蓋率、失敗的測試以及它們的堆棧跟蹤等信息.
如果你使用的是其他測試框架,你也可以找到相應的 Allure 插件或庫來生成測試報告。注意,使用 Allure 可能需要你改變一些測試寫法,以便提供更多測試細節(例如,增加裝飾器來標注用例的優先級和嚴重程度、增加步驟的描述等)。
## pytest 如何輸出
在 Python 中,可以以多種方式連接(或拼接)字符串。以下是幾種常見的字符串連接方法:
1. 使用加號 (+) 操作符:
~~~
pythonCopy codestring1 = "Hello"
string2 = "World"
result = string1 + " " + string2 # 結果將是 "Hello World"
~~~
2. 使用 join() 方法:
~~~
pythonCopy codestrings = ["Hello", "World"]
result = " ".join(strings) # 結果將是 "Hello World"
~~~
`join()`是非常有效的方法,尤其是當你有許多字符串需要連接時。
3. 使用格式化字符串 (f-string,Python 3.6+):
~~~
pythonCopy codename = "World"
result = f"Hello {name}" # 結果將是 "Hello World"
~~~
4. 使用格式化方法 format():
~~~
pythonCopy coderesult = "{} {}".format("Hello", "World") # 結果將是 "Hello World"
~~~
5. 使用百分號 (%) 格式化(不建議使用,因為它是較舊的格式化方法):
~~~
pythonCopy coderesult = "%s %s" % ("Hello", "World") # 結果將是 "Hello World"
~~~
在大多數情況下,加號 (+) 是最直觀的方式,但如果涉及到多個字符串的復雜連接操作,`join()`或格式化字符串可能更有效、更易讀。
pytest print 無效嗎

在默認情況下,當運行`pytest`時,標準輸出(`print`語句的結果)不會顯示在控制臺上,除非測試失敗。這是因為`pytest`捕獲了輸出,以便在測試失敗時只顯示相關的輸出信息。
但是,如果你希望在測試執行時看到輸出,你可以使用以下幾種方法之一:
1. **\-s或--capture=no參數**: 運行`pytest`時加上`-s`選項,這將禁用所有的輸出捕獲。
~~~
bashCopy codepytest -s
~~~
使用該選項后,所有的`print`調用都會正常輸出到控制臺。
2. **使用logging**: 在測試中使用`logging`模塊而不是`print`是一個更加標準的做法。在配置了日志處理器后,即使在沒有指定`-s`參數的情況下,日志輸出也會顯示在控制臺上。
首先設置logger:
~~~
pythonCopy codeimport logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
~~~
然后在你的測試中使用它:
~~~
pythonCopy codelogger.info("Your log message")
~~~
3. **pytest的詳細模式**: 運行`pytest`時加上`-v`選項,它將開啟詳細模式,雖然這并不會顯示所有的輸出,但它可以在測試報告中提供更多信息。
~~~
bashCopy codepytest -v
~~~
選擇哪種方法取決于你想從測試運行中獲取什么樣的輸出。如果你想看到測試執行過程中的實時打印輸出,使用`-s`參數是最簡單直接的方式。如果你想要更加結構化的日志輸出,那么使用`logging`模塊會更好。
## 參考
* https://docs.pytest.org/en/latest/contents.html
* https://docs.pytest.org/en/7.1.x/reference/customize.html
- 前言
- 1.入門篇
- Python介紹
- 安裝與使用
- Python開發利器之VS Code
- 模塊安裝
- 命令行
- 一次Python無法安裝模塊的問題探索與解決之旅
- 命令運行
- Conda
- 下載地址
- 2.基礎篇
- 基礎語法
- 輸入與輸出
- with as的用法
- 注釋
- Python命令行參數
- 編碼
- 變量類型
- 列表遍歷
- 運算符
- 表達式語句
- 條件
- 循環
- 日期和時間
- 函數
- 高級語法
- @符號-裝飾器
- 模塊和包
- name
- init.py
- 錯誤和異常
- 面向對象
- 3.專題篇
- 常用功能
- Python 字符串連接
- python web
- Python CGI編程
- Python OAuth2
- 認證 Flask-HTTPAuth
- 常用命令
- 內置函數
- dir()
- print(f)
- 標準模塊
- sys
- pickle-數據序列化
- os
- IO(輸入輸出)
- 鍵盤輸入
- 文件讀寫
- 測試
- Python測試框架之pytest快速入門
- pytest-bdd快速示例和問題解決
- 基于pytest-bdd的項目目錄結構和命名規范
- python BDD 的相關概念
- Behave介紹和快速示例
- Python BDD之Behave測試報告
- Python BDD 框架比較之 pytest-bdd vs behave
- pytest進階
- Flask + pytest測試
- 參考網址
- pytest-bdd進階
- hehave進階
- 測試路徑
- python + selunium
- HTML 根據多層CSS 查找元素
- 等待執行
- 使用text 查找 span
- pytest如何在控制臺輸出
- 4.問題篇
- pip pip3 及區別
- TypeError: can only concatenate str (not "NoneType") to str
- 5.實戰篇
- matplotlib-繪圖包
- 導入類
- 命名規范
- 模塊查找
- 6.進階篇
- Flask
- Flask介紹
- Flask擴展模塊
- Flask-Login
- 問題
- Jinja2
- Flask-RESTful
- Flask-JWT-Extended
- WSGI
- Flask-SQLAlchemy
- 部署
- Flask VS Django
- Flask Web
- Flask + Vue
- Flask實戰
- Flask 標準目錄結構
- Blueprints
- 參考
- FastAPI 測試
- https 證書 Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate