如果你還想從頭學起Pytest,可以看看這個系列的文章哦!
https://www.cnblogs.com/poloyy/category/1690628.html
前言
- 目前有兩種純測試的測試框架,pytest和unittest
- unittest應該是廣為人知,而且也是老框架了,很多人都用來做自動化,無論是UI還是接口
- pytest是基於unittest開發的另一款更高級更好用的單元測試框架
- 出去面試也好,跟別人說起來也好,pytest的逼格明顯高於unittest
為什么要用Pytest
pytest 的官方網站介紹,它具有如下特點:
- 非常容易上手,入門簡單,文檔豐富,文檔中有很多實例可以參考
- 能夠支持簡單的單元測試和復雜的功能測試
- 支持參數化
- 執行測試過程中可以將某些測試跳過(skip),或者對某些預期失敗的case標記成失敗
- 支持重復執行(rerun)失敗的 case
- 支持運行由 nose, unittest 編寫的測試 case
- 可生成 html 報告
- 方便的和持續集成工具 jenkins 集成
- 可支持執行部分用例
- 具有很多第三方插件,並且可以自定義擴展
安裝Pytest
cmd運行
pip install -U pytest pip3 install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
查看版本
pytest --version
快速開始
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = __Time__ = 2020-04-06 12:33 __Author__ = 小菠蘿測試筆記 __Blog__ = https://www.cnblogs.com/poloyy/ """ def func(x): return x + 1 def test_answer(): assert func(3) == 5 class TestClass: def test_one(self): x = "this" assert "h" in x def test_two(self): x = "hello" assert hasattr(x, "check")
然后,cmd進入當前文件目錄,直接執行
pytest
知識點
- 如果只執行 pytest ,會查找當前目錄及其子目錄下以 test_*.py 或 *_test.py 文件,找到文件后,在文件中找到以 test 開頭函數並執行
- 如果只想執行某個文件,可以 pytest start.py
- 加上-q,就是顯示簡單的結果: pytest -q start.py
Pytest用例的設計原則
用Pytest寫用例時候,一定要按照下面的規則去寫,否則不符合規則的測試用例是不會執行的
- 文件名以 test_*.py 文件和*_test.py
- 以 test_ 開頭的函數
- 以 Test 開頭的類,不能包含 __init__ 方法
- 以 test_ 開頭的類里面的方法
- 所有的包 package 必須要有__init__.py 文件
Pytest執行用例規則
注意,下面講的都是在cmd中執行pytest命令
1、某個目錄下所有的用例
pytest
2、執行某一個 py 文件下用例
pytest 腳本名稱.py
3、運行start.py 模塊里面的某個函數,或者某個類,某個類里面的方法
加v和不加-v都可以,加-v的話,打印的信息更詳細
pytest -v 08_mark.py::TestClass::test_method
pytest 08_mark.py::TestClass::test_method
pytest start.py::test_answer
4、運行start.py 模塊里面,測試類里面的某個方法
pytest start.py::TestClass::test_two
5、-m 標記表達式(后續講解)
pytest -m login
將運行用 @pytest.mark.login 裝飾器修飾的所有測試,后面再展開講標記哦
6、-q 簡單打印,只打印測試用例的執行結果
pytest -q start.py
7、-s 詳細打印
pytest -s start.py
8、-x 遇到錯誤時停止測試
pytest start.py -x
9、—maxfail=num,當用例錯誤個數達到指定數量時,停止測試
pytest start.py --maxfail=1
10、-k 匹配用例名稱
執行測試用例名稱包含http的所有用例
pytest -s -k http start.py
11、-k 根據用例名稱排除某些用例
1 pytest -s -k "not http" start.py
12、-k 同時匹配不同的用例名稱
pytest -s -k "method or weibo" start.py
Pycharm運行Pytest
平時寫代碼,咱們都在Pycharm寫的,怎么可能一直用cmd來跑用例呢,現在我們就來看看在Pycharm中如何運行Pytest
- 首先,我們先要去settings里面設置單元測試框架為Pytest
- 如果是nosetests的話,右鍵運行是以python腳本運行的哦
- 如果設置了unittest則是以unittest框架去運行
注意
pytest 是可以兼容 unittest 腳本的,之前寫的 unittest 用例也能用 pytest 框架去運行