pytest簡介及jenkins整合
-
pytest介紹
- pytest介紹 - unittest\nose
- pytest:基於unittest之上的單元測試框架
- 自動發現測試模組和測試方法
- 斷言使用assert+表示式即可
- 可以設定測試會話級、模組級、類級、函式級的fixtures 資料準備 + 清理工作
- unittest:setUp、teardown、setUpClass、tearDownClass
- 共享前置後置 -- conftest.py
- 有豐富的外掛庫,目前在900個以上 allure
- 安裝命令
- pip install pytest
- 安裝html報告的外掛
- pip install pytest-html
- pytest外掛地址
- pytest:基於unittest之上的單元測試框架
- pytest介紹 - unittest\nose
-
pytest之mark功能
-
pytest - 收集測試用例
- pytest收集測試用例的規則
- 預設從當前目錄中搜集測試用例,即在哪個目錄下執行pytest命令,則從哪個目錄當中搜尋
- 搜尋規則
- 符合命名規則 test_*.py 或者 *_test.py的檔案
- 以test開頭的函式名
- 以Test開頭的測試類(沒有__init__函式)當中,以test_開頭的函式
- pytest收集測試用例的規則
-
對測試用例打標籤。在執行測試用例的時候,可根據標籤名來過濾要執行的用例
-
使用方法
- 註冊標籤名
- 在測試用例/測試前面加上:@pytest.mark.已註冊的標記名
-
註冊方式
-
建立pytest.ini檔案,在檔案中按如下形式新增標籤名:
-
[pytest] markers= slow:marks tests as slow(deselect with '-m "not slow"') serial
-
注:冒號之後是可選的描述資訊
-
-
在conftest.py檔案當中,通過hook註冊
-
def pytest_configure(config): config.addinivalue_line("markers","smoke1:標記只執行冒煙用例") config.addinivalue_line("markers","demo1:示例執行")
-
-
-
給用例打標記
-
方式1
- 打標記範圍:測試用例、測試類、模組檔案
- 在測試用例/測試類前面加上:@pytest.mark.標記名
- @pytest.mark.slow
- 可在一個用例上打多個標籤,多次使用@pytest.mark.標記名即可
- @pytest.mark.slow
- @pytest.mark.serial
-
方式2
-
打標記範圍:測試用例、測試類、模組檔案
-
在測試類裡,使用以下申明(測試類下,所有用例都被打上該標籤)
-
class TestClass(object): pytestmark = pytest.mark.已註冊標籤名 pytestmark = [pytest.mark.標籤1, pytest.mark.標籤2] # 多標籤模式
-
-
在模組檔案裡,同理(py檔案下,所有測試函式和測試類裡的測試函式,都有該標籤)
-
import pytest pytestmark = pytest.mark.已註冊標籤名 pytestmark = [pytest.mark.標籤1, pytest.mark.標籤2] # 多標籤模式
-
-
-
-
-
-
pytest之命令列執行用例
-
安裝後,pytest.exe在python安裝目錄的Scripts目錄下,因為配置了環境變數後,可以之間執行pytest
-
腳本里面是,效果通命令列
-
import pytest if __name__ == '__main__': pytest.main()
-
-
只執行某個標記
- pytest -m slow
- pytest -m slow -s -v # 詳細輸出
-
-
pytest之fixture功能
-
pytest之fixture引數化 - 多執行、pytest層級覆蓋。測試用例與其同級或者在其子目錄
-
共享前置後置 -- conftest.py
-
檔名不可更改,不需要引入就可以使用其中的fixture
-
一個函式:前置+後置
-
yield分隔前置後置
-
設定作用域:中間的夾的是什麼,預設"function"
-
@pytest.fixture def init_driver(): # 前置 pass # 分隔線 yield 返回值寫在這 # 後置 pass
-
-
-
-
呼叫fixture的三種方式
-
在測試用例中直接呼叫它
-
將fixture的函式名作為測試用例的引數
-
如果fixture有返回值,那麼測試用例中的fixture函式名字就接收返回值
-
eg
-
def test_xxx(self,myfixture): myfixture.find_element_by_xpath("xxx") # 函式名代表了fixture的返回值,即driver
-
-
-
用fixture裝飾器呼叫fixture
-
在測試用例/測試類前面加上@pytest.mark.usefixtures("fixture函式名字")
-
ps:定義conftest.py檔案,在此檔案中可定義多個fixture,pytest會自動搜尋此檔案
-
@pytest.mark.usefixtures("init_driver") class TestLogin: @pytest.mark.slow def test_login_success(self, init_driver): init_driver[1]. #返回值直接用,這裡返回元組
-
-
用autos呼叫fixture
- 在定義fixture時,有一個引數是autouse,預設設定為False
- 當預設為False,就可以選擇用上面兩種方式來試用fixture
- 當設定為True時,在一個session內的所有test都會自動呼叫這個fixture(許可權大,責任也大,所以用該功能時也要謹慎小心)
-
-
-
pytest之引數化
-
在測試用例的前面加上
- @pytest.mark.parametrize("引數名",列表資料)
- 引數名:用來接收每一項資料,並作為測試用例的引數
- 列表資料:一組測試資料
- @pytest.mark.parametrize("引數1,引數2",[(資料1,資料2),(資料1,資料2)])
-
示例
-
@pytest.mark.parametrize("aa,b,c", [(1, 3, 4), (10, 35, 45), (22.22, 22.22, 44.44)]) def test_add(self, a, b, c): res = a + b assert res == c
-
-
組合引數化:多組引數,依次組合
-
使用多個@pytest.mark.parametrize
-
示例
-
@pytest.mark.parametrize("x",[1,2]) @pytest.mark.parametrize("y",[2,3]) def test_foo(x,y): pass
-
用例有四個1,2/1,3/2,2/2,3 笛卡爾積
-
-
-
-
pytest之重執行
- pytest提供了失敗重試機制
- 外掛名稱rerunfailures
- 安裝方法
- pip install pytest-rerunfailures
- 使用方式
- 命令列引數形式
- 命令:pytest --reruns 重試次數
- 比如:pytest --reruns 2 表示:執行失敗的用例可以重新執行2次
- 命令:pytest --reruns 重試次數 --reruns-delay 次數之間的延時設定(單位:秒)
- pytest --reruns 2 --reruns-delay5
- 表示失敗的用例可以重新執行2次,第一次和第二次的間隔時間為5秒鐘
- 命令:pytest --reruns 重試次數
- 命令列引數形式
-
pytest之html測試報告
-
需要安裝pytest-html外掛
-
pytest可以生成多種樣式的結果
- 生成JunitXML格式的測試報告,命令
- --junitxml=path
- 生成result log格式的測試報告,命令
- --resultlog=report\log.txt
- 生成html格式的測試報告,命令
- --html=report\test_one_func.html(相對路徑)
- 生成JunitXML格式的測試報告,命令
-
import pytest if __name__ == '__main__': pytest.main(["--reruns", "3", "--reruns-delay", "5", "-m", "fail", "--html=Reports\\report.html", "--junitxml=Reports\\report.xml"])
-
-
pytest之allure測試報告
- 安裝allure
- 下載allure.zip
- 下載地址
- alure-github:https://github.com/allure-framework/allure2
- 解壓到本地目錄,配置allure.bat的環境變數ALLURE_HOME
- 在命令列中執行allure,確認環境變數配置成功
- pytest外掛安裝
- pip install allure-pytest
- pytest生成allure測試報告的命令引數
- --alluredir=/XXX/my_allure_results
- 檢視allure的測試報告命令
- allure serve allure報告目錄 相對/絕對
- eg:allure serve D:\reports\allure
- 安裝allure
-
pytest之jenkins整合
-
安裝外掛Allure Jenkins Plugin
-
配置工具路徑D:\allure-2.13.5
-
配置時構建後操作生成allure報告,選擇allure report並配置路徑(相對)
-
分散式
- master/slave模式
- 分擔jenkins伺服器的壓力,任務分配到其它執行機來執行
- master:jenkins伺服器
- slave:執行機(奴隸機),執行master分配的任務,並返回任務的進度和結果
- master
- 管理節點
- 分配任務
- slave
- 反饋狀態
- 反饋任務進度
- 反饋任務結果
- master/slave
- slave向master註冊
- slave的狀態,空閒/忙碌
- slave的能力,可並行執行任務
- master/slave模式
-
配置
- 節點管理新建節點
- 全域性設定--代理--選擇”隨機選取“
- 節點管理新建節點
- 名字 - 可以唯一指定
- 執行器數量 - 可以同時執行的任務數
- 遠端工作目錄 - 執行機的目錄,會自動在該目錄下建立workspace,並建相應的job目錄
- 標籤 - 可以指定一組中隨機一個執行
- 用法 - 指定
- 啟動方式 - Launch agent by connecting it to the master(利用java web連線)
- 可用性 - 儘可能使用
- 節點屬性
- 可以設定執行機的環境變數和工具
- 連線
- 連線處下載slave-agent.jnlp直接在執行機執行
- 可以安裝為系統服務,這樣的化可以靜默執行
- 連線後就可以運行了
- 或者在命令列中啟動節點
- 連線處下載slave-agent.jnlp直接在執行機執行
- 可以執行了
-