python pytest接口自動化框架搭建

2021-03-05 測試新青年

1.首先安裝pytest

pip install pytest

2.編寫單測用例

在pytest框架中,有如下約束:

所有的單測文件名都需要滿足test_*.py格式或*_test.py格式。

在單測文件中,可以包含test_開頭的函數,也可以包含Test開頭的類。

在單測類中,可以包含一個或多個test_開頭的函數。

此時,在執行pytest命令時,會自動從當前目錄及子目錄中尋找符合上述約束的測試函數來執行。

import pytest

# content of test_sample.py
def func(x):
return x + 1
def test_answer():
assert func(3) == 5

運行 pytest  或 指定特定文件 pytest -q test_sample.py

2.1 運行pytest 則遍歷當前目錄及子目錄

看紅色圈住的部分,可以得出它是循環遍歷它當前目錄和子目錄

2.2 pytest -q test_class.py 指定文件運行

3.測試用例搜索

定義是:搜索測試文件和測試用例的過程稱為測試搜索.
想要被搜到,必須遵守pyteset的命名規則:

  

所有的單測文件名都需要滿足test_*.py格式或*_test.py格式。

在單測文件中,可以包含test_開頭的函數,也可以包含Test開頭的類。

在單測類中,可以包含一個或多個test_開頭的函數。

為了好記,測試文件和測試函數必須以 test_開頭,類是Test 開頭.

4.控制臺信息講解

 

4.1. test session starts
  這個是每次運行的分割線

4.2. platform 信息

  1.win32 代表用的是windows ,MAC 顯示的是darwin

  2.接著顯示的是Python 和 pytest的版本 , py 和pluggy是pytest包

  3.rootdir 當前的起始目錄, inifile是指配置文件,後邊章節我會詳細講解.

  4. collected 5 itemes    一共搜集了多少測試用例.

  5. test_run01.py …
    測試文件後邊的「.」 代表測試通過, F(Fail),E(error),s(skip),X(xpass)>預期失敗但是成功了
    x(xfail)>預期失敗執行也失敗了.(下邊我講解具體詳情)
  6. 4 fail,1passed in 0.06 seconds======
    表示通過的數量,沒有通過也會總結數量 ,以及花費得時間.

5.使用命令行選項
有了命令行選項使其操作我們的用例變的非常靈活。Unittest 框架如果想執行複雜的場景
變得很雞肋,這是pytest 優勝Unittest的地方.
以下列舉的是常用的命令行選項,已經可以滿足我們使用,如果個人想擴展,可以用

pytest --help 可以查到全部的命令 自己可以嘗試下,在這不截圖了

5.1 -–collect-only

從圖片可以看出 一共搜集了5 個測試用例,在執行結果 是 no tests ran 說明只是搜集並不執行。

5.2. -k 選項
重要功能是利用你使用的表達式來 指定希望運行的測試用例.
比如:你用 pytest -k 「表達式」
pytest 根據 你輸入的表達式內容進行去匹配 測試用例的名字裡是否有這個表達式內容進行過濾.
然後再運行. 如果想查找多個內容,可以用 or 進行連接 ,請看下邊的截圖:

5.3.-m 選項
m 是marker的縮寫,功能是執行自己標記的測試用例,我先講解如何標記測試用例
如果我們想執行帶有 first_case 怎麼標記呢
請看下邊的實例, 用到了@pytest.mark.first_case, 其中first_case 是裝飾器用於標記的內容.

import pytest


def inc(x):
return x + 1


def test_answer():
assert inc(3) == 5


@pytest.mark.first_case
def test_task01():
assert 1 == 1


def test_task02():
assert 1 == 1


def test_task03():
assert 1 == 1

pytest -m "first_case" --collect-only 或者

pytest -m "first_case" 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

PS E:\Python_Web\pytest-requests-allure> pytest -m "first_case" --collect-only

================================================= test session starts =================================================

platform win32 -- Python 3.7.2, pytest-4.5.0, py-1.8.0, pluggy-0.12.0

rootdir: E:\Python_Web\pytest-requests-allure

plugins: allure-pytest-2.6.3, html-1.20.0, metadata-1.8.0

collected 8 items / 6 deselected / 2 selected

<Module test_module.py>

  <Function test_task01>

  <Function test_task02>

 

================================================== warnings summary ===================================================

d:\software\python\python37\lib\site-packages\_pytest\mark\structures.py:324

  d:\software\python\python37\lib\site-packages\_pytest\mark\structures.py:324: PytestUnknownMarkWarning: Unknown pytest.mark.first_case - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/latest/mark.html

    PytestUnknownMarkWarning,

 

-- Docs: https://docs.pytest.org/en/latest/warnings.html

====================================== 6 deselected, 1 warnings in 0.11 seconds =======================================

如果想用多個marker ,可以這麼寫 「marker1 or marker2」 意思是執行 mark1 和mark2所有測試用例
也可以用not 過濾, 「marker1 and not marker2」 意思是 執行marker1 並且不包含marker2用例.

 6. -x 選項

這個選項是為debug 準備的,正常的流程 是如果斷言失敗,它會繼續執行並不會斷掉.如果想在第一個斷言失敗我就不讓繼續執行,就可以用-x選項. 遇到斷言失敗就停止執行.有利於我們查找原因.

7.–lf 選項 (lf 是 last failed 的縮寫)

這個選項用處很大,直接過濾出最後一個fail 的測試用例,有利於我們查找失敗的用例,解決好,我們再運行這個if 選項 ,可以再找出最後一個fail,省了我們再執行成功的用例,節省我們的時間 .

8.–ff (是 failed first)
和 --lf 不同是的是,它優先運行失敗的case ,再把之前運行通過的也要運行. 自己嘗試下,這裡不做演示
9.-v 選項
這個會在控制臺輸出更多的內容,最明顯的區別就是每個文件中的每個測試用例都佔一行(先前是每個文件佔一行)

我把這兩種情況都列印出來,看下

 

 

 10  --tb=style 選項
這個選項用於對失敗輸出信息的顯示方式,
輸出的信息一般包括 1. 失敗出現在哪一行2.是什麼失敗 3.怎麼失敗的 這三要素是信息追溯
我們常用的style 有 short ,no, line
實例如下:

no 屏蔽所有的回溯信息,只是顯示哪個文件哪個case 失敗,
line 具體到哪個assert
short 具體到哪個參數,列舉出更詳細的失敗信息.
實際工作中 -q 和 --tb=line 組合 已經夠用.

來源:https://www.cnblogs.com/dangkai/p/10937762.html

相關焦點

  • Python自動化之unittest框架
    在自動化所有的測試體系中,不管是單元測試,還是接口測試以及基於UI的自動化測試,都需要單元測試框架,在Python語言中,最常用的單元測試框架是unittest和pytest,今晚主要來介紹unittest單元測試框架,後期逐步的介紹pytest測試框架在自動化測試中的應用。
  • 乾貨 | 一文搞定 pytest 自動化測試框架(一)
    簡介pytest 是一個成熟的全功能 Python 測試工具,可以幫助您編寫更好的程序。它與 Python 自帶的 Unittest 測試框架類似,但 pytest 使用起來更簡潔和高效,並且兼容 unittest 框架。
  • 實戰 | 接口自動化測試框架開發(Pytest+Allure+AIOHTTP+用例自動生成)
    近期準備做接口測試的覆蓋,為此需要開發一個測試框架,思考了以下幾個特性要求:接口測試是比較講究效率的,測試人員會希望很快能得到結果反饋
  • python自動化測試之pytest框架
    pytest測試框架也是主流的一個測試框架,想比於unnitest框架來說,其不需要像unittest那樣單獨創建類繼承unittest.TestCase,而只需要創建測試類或者測試文件,然後以test開頭,pytest可以按照這個規則找到測試用例並執行。
  • 基於Pytest框架的自動化測試開發實踐(萬字長文入門篇)
    測試框架的作用是,幫助我們管理測試用例、執行測試用例、參數化、斷言、生成測試報告等基礎性工作,讓我們將精力用在測試用例的編寫上。好的測試框架應該具有很高的擴展性,支持二次開發,並能夠支持多種類型的自動化測試。
  • Pytest丨如何使用全功能的Python測試框架?小白必看
    關注我,每周分享軟體測試技術乾貨、面試經驗,想要進入軟體測試學習交流群的可以直接私信我哦~~我們在寫自動化的過程中,用例的斷言也是至關重要的,斷言可以幫助我們判斷用例測試點是否成功和失敗。當然在我們這麼強大的pytest框架中,斷言也是比較強大的。為什麼?繼續往下看。
  • 學會Python+Selenium,分分鐘搭建Web自動化框架!
    用python+selenium實現UI自動化測試,要有一些HTML和xpth的基礎,當然python基礎一定是必須要會的。筆者建議花點時間了解下相關基礎知識,不至於後面發懵。一、什麼是selenium?selenium是個強大的工具集。
  • APP UI自動化測試思路總結
    對遊戲測試較為友好Airtest與Poco本質上是python的兩個第三方庫,測試環境搭建沒有Appium那麼複雜3,選擇框架根據實際情況選擇合適的框架。不同的開發語言有各自對應的單元測試框架,如Java有JUnit、TestNG、Robot等,Python有unittest、pytest等。這裡只針對Python單元測試框架做說明。python主流的單元測試框架:強烈推薦使用pytest,功能強大且容易上手,官方文檔為英文,中文可參考Pytest 使用手冊。
  • 從小白變高手,這7個超實用的Python自動化測試框架請收好!
    隨著技術的進步和自動化技術的出現,市面上出現了一些自動化測試框架。只需要進行一些適用性和效率參數的調整,這些自動化測試框架就能夠開箱即用,大大節省了開發時間。而且由於這些框架被廣泛使用,他們具有很好的健壯性,並且具有廣泛多樣的用例集和技術來輕易發現微小的缺陷。今天,我們將看一看常見的 Python 自動化測試框架。
  • APP UI自動化測試,思路全總結在這裡了
    語言提供集成Airtest與Poco兩個測試框架的強大的IDE,對新手很友好集成基於圖像識別的UI自動化測試框架airtest,即使不懂代碼也能編寫自動化腳本跨平臺,可對Windows、Android和iOS應用軟體進行自動化測試對遊戲測試較為友好Airtest與Poco本質上是python的兩個第三方庫,測試環境搭建沒有Appium
  • 測試工程師必須要學會的APP UI 自動化都在這裡了!
    、UiAutomation框架)環境搭建較為複雜2、Airtest由網易開發(官方文檔),只支持python語言提供集成Airtest與Poco兩個測試框架的強大的IDE,對新手很友好集成基於圖像識別的UI自動化測試框架airtest,即使不懂代碼也能編寫自動化腳本
  • 技術面試沒過,居然是因為沒用過 pytest 單元測試框架
    他說面試官問了一些 pytest 單元測試框架相關的知識,包括什麼插件系統和用力篩選。但是他之前的公司用的技術是基於 unittest 的,沒有用過 pytest。也就是因此被面試官給卡住了。實際上他在面試之前已經了解過 pytest 的一些基礎用法,但是網上的一些資料,都是停留基礎講解,沒有深入到 pytest 內部運行和一些高級特性。
  • 使用pytest-xdist實現分布式APP自動化測試
    剛好pytest-xdist為我們提供了一種可能pytest-xdist是一款分布式測試插件。它在pytest的基礎上做了一些獨有的測試執行模式的擴展。比如你有多個CPU或者多臺機器,就可以使用它們做一些並行化的測試,並且它還是跨平臺的,可以指定不同的python解釋器或不同的平臺來執行測試使用pip命令可以簡單快速的安裝pytest-xdist上面有提到pytest-xdist實現分布式的方式有兩種:一種是使用多CPU,一種是使用多臺機器。
  • 自動化測試面試題(附答案)
    下面是正題崗位JD 1、【技術能力】能獨立完成產品線中自動化測試工作,根據測試任務,搭建軟體測試環境,編寫測試腳本,輸出報告;2、【項目管理】熟練開發測試工具、測試腳本,及迭代優化測試框架,使用合理方式進行自動化管理項目;3、【業務推動】對測試項目的結果負責,使用合理方式推動業務端測試的效率、開發質量;
  • 接口自動化測試與Tesla自動化測試平臺
    引言我們今天要講的tesla,不是電動汽車,而是字節跳動內部的服務端自動化測試平臺——Tesla。在服務端測試中,接口測試是非常重要的。「執行」提供全面的http、rpc協議(from thrift)的支持;提供基於python的前置準備腳本,以及後置校驗腳本的能力。【特有能力】「測試用例多分支」測試用例可以具備分支的屬性,等同於代碼的分支屬性,可以進行checkout與merge。
  • 用於全棧自動化測試的最佳Python工具!
    它允許您自動化瀏覽器操作,例如訪問url並與它們的項進行交互。它使得編寫python Selenium測試更容易,因為它有一個高級API,可以讓您更容易地為瀏覽器應用程式開發自動化腳本。  如果您想使用Python進行測試自動化,那麼使用Robot框架是不會出錯的。這個成熟的產品是為測試人員創建的,它使用關鍵字驅動的方法使測試具有可讀性和易於創建。  它還包括一組測試庫和其他工具。
  • Python測試框架Pytest的常用插件測試報告
    一、pytest-html 生成 html 測試報告要求:Python 3.6+安裝:pip install pytest-html文檔:https://github.com/pytest-dev/pytest-html、https://www.cnblogs.com
  • Pytest的基本應用(一)
    在Python的程式語言中,單元測試框架主要是pytest,unittest,和nose,其中應用最廣泛的是unittest和pytest
  • Pytest之並發執行(十四)
    不管是UI自動化測試用例還是API的自動化測試用例,在編寫的使用都需要注意每個測試用例執行的獨立性,也就是說編寫的每個測試用例都是互相不依賴的
  • Python之UnitTest框架介紹
    UnitTest的介紹Python中相對比較流行的自動化測試框架UnitTest,早期主要時用於做單元測試,隨著自動化更新,能夠完善的結合Selenium/Appium/Requests等實現UI自動化與接口自動化。