1. 程式人生 > 實用技巧 >pytest框架的安裝與使用

pytest框架的安裝與使用

        pytest框架的安裝與使用

一,pytest瞭解

  pytest是python的一種單元測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,效率更高。

  優點:

  1.第一個優點肯定是簡單,靈活,易上手

  2.支援引數化,pytest直接使用@pytest.mark.parametrize裝飾器

  3.能夠支援簡單的單元測試和複雜的功能測試,還可以用來做selenium/appnium等自動化測試、介面自動化測試(pytest+requests)

  4.pytest有豐富的第三方外掛庫,比如pytest-HTML、allure外掛,專門用作與測試報告。pytest-selenium外掛,整合測試。pytest-rerunfailures外掛,用於失敗重跑。pytest-assume外掛,多重效驗。pytest-ordering設定執行順序等實用外掛。

  5.pytest斷言直接在assert 後面接表示式

  6.conftest.py 配置裡可以實現資料共享,不需要import就能自動找到一些配置,可供多個py檔案呼叫。

  7.scope="session" 以實現多個.py跨檔案使用一個session來完成多個用例

二,安裝

  1.安裝pytest

   2種安裝方法。

    1是直接通過pip安裝。安裝命令為:pip install pytest,

    檢測是否安裝成功命令:pytest --version ,如果他顯示了版本名稱,就表示已經安裝成功。

    2是通過官網直接下載然後放進python外掛庫裡。

    下載地址:

https://pypi.org/project/pytest/

  2.安裝外掛

  安裝html外掛命令:pip install pytest-html

  除開 pytest-html外掛外 ,pytest還具備豐富的外掛庫,pytest外掛彙總站點:http://plugincompat.herokuapp.com/

三,pytest執行測試需要遵循的規則(重要)

  · .py測試檔案必須以test_開頭或者_test結尾

   · 測試類必須以Test開頭,並且不能有init方法

   · 測試方法必須以test_開頭

   · 測試斷言用assert

  使用:

  1,先創一個以test_開頭的檔案

  2,建立一個Test_code

  3,建立測試方法

 # -*- coding: utf-8 -*-

 class Test_code:
def test_jian(self):
assert 520==520

執行有兩種方法:

1,是通過dos命令或者pycharm的命令視窗輸入pytest。

  我這是通過pytest 地址 指定搜尋的目錄下的檔案,直接執行檔案中所有的用例,也可以精確到類,某個用例。   還可以通過輸入pytest直接所搜用例並執行。會在預設從當前目錄中搜索用例,即在哪個目錄下執行pytest命令,則從哪個目錄中搜索。

2是通過在主函式中用程式碼執行。需要匯入pytest包。

  可以在mian()中填上哪個用例方法就執行哪個。

 

# -*- coding: utf-8 -*-
import pytest
class Test_code:
def test_jian(self):
assert 520==520 if __name__ == '__main__':
pytest.main()

四,全能的mark

  1,標籤

    我們在執行測試用例的時候,有時候不需要全部測試,那我們就可以通過給用例打標籤的方式來執行用例。

    使用:

    1,建立一個pytest.ini檔案,在檔案中按照以下格式新增標籤名:

    2,我們通過 (@pytest.mark.標籤名) 這個程式碼放在用例上面來標明。一個用例可以用多個標籤來表示

    冒號前是標籤名,冒號後面是註釋,方便明白標籤是什麼意思。

    注意:這個檔案中不能含任何中文。

[pytest]
markers=
smoke:smoke test
demo:demo test

    給用例賦予標籤,程式碼如下:

    注意:可以給類賦予標籤,也可以給用例賦予標籤

# -*- coding: utf-8 -*-
import pytest @pytest.mark.demo
class Test_code:
@pytest.mark.smoke
def test_jian(self):
assert 520==520

    執行:dos命令 pytest -m 標籤名

或者

if __name__ == '__main__':
pytest.main(['-m','demo'])

  2,fifixture功能  

  在執行測試用例前往往需要進行環境的準備,在執行完用例,將環境銷燬。在unittest中一般通過 setUp與tearDown來進行用例前的環境準備和用例後的環境銷燬。而在pytest中還有另外一種方式——fifixture。與setup和teardown相比,fifixture使用起來更加靈活,更加方便。   

  Fixture的使用   這是fixture在頁面中程式碼使用方法   使用@pytest.mark.usefixtures("環境方法名") 程式碼放在用例或者類前,放在類前就是這個類裡面的用例都會先執行環境。
# -*- coding: utf-8 -*-
import pytest
#把前置
@pytest.mark.demo
class Test_code:
 
   @pytest.mark.usefixtures("aa1") #把環境放在用例前,會在執行用例前執行這個環境aa1
@pytest.mark.smoke
def test_jian(self):
assert 520==520 @pytest.fixture() #宣告這是fixture函式,
def aa(seif):
print("先執行我,然後再執行用例方法")
aa=1+1
yield aa1 # 類似分隔符號, yield 後面接變數名 再執行後可以輸出aa
print("執行完用例後再執行我")

  多個檔案共享一個fixture

  可以可以將fixture放在指定檔案conftest.py中,來實現多個檔案共享一個fixture(檔名不可更改)

import pytest

@pytest.fixture()       #宣告這個是fixture函式
def aa(seif):
print("先執行我,然後再執行用例方法")
aa=1+1
yield aa # 類似分隔符號, yield 後面接變數名 再執行後可以輸出aa
print("執行完用例後再執行我")

  3,引數化

  pytest引數化 和unittest中的ddt相似。都是把資料放入用例中執行。

  使用@pytest.mark.parametrize() 程式碼將資料代入用例中,括號中必須宣告代入用例中的變數名,用引號引起,變數名必須一樣

list=([('741852963', '123456', '123456'),
    ('122886', '123456', '123456')])
@pytest.mark.parametrize('urer,passd,ex',list) # 代入資料程式碼
def test_shuju(self,urer,pwd,ex): #變數名要和parametrize裡面一樣
print('這個是使用者名稱'.format(urer))
print('這個是密碼{}'.format(pwd))
assert pwd==ex

  4,失敗重跑

   我們使用:pip3 install pytest-rerunfailures 程式碼來下載外掛

   使用:@pytest.mark.flaky() 程式碼放在用例前面

list=([('741852963', '123456', '123456'),
    ('122886', '123456', '123456')]) @pytest.mark.flaky(reruns=5, reruns_delay=1) # 如果失敗則延遲1s後重跑 最多跑五次
@pytest.mark.parametrize('urer,passd,ex',list)
def test_shuju(self,urer,pwd,ex):
print('這個是使用者名稱'.format(urer))
print('這個是密碼{}'.format(pwd))
assert pwd==ex