二、介面自動化測試(2)

Mei_first發表於2024-05-23

二、pymysql+requests+pytest

接著上篇(1)中內容繼續更新

(三)、pytest

1、類名 TestXxx、方法名test_xxx

class TestLogin:

    def test_a(self):   # 以 test 開頭的測試函式
        print("test_a")
        assert 1    # 斷言成功

    def test_b(self):
        print("test_b")
        assert 0    # 斷言失敗

# 執行方式, 終端命令列中 輸入 pytest 檔名
# 如果想讓命令列支援列印 需要使用 -s 引數, 具體用法: pytest -s 檔名
# 執行結果: .表示透過  F表示失敗

2、setup和teardown

class TestLogin:
    # 函式級初始化方法
    def setup(self):
        print("---setup---")
    # 函式級結束
    def teardown(self):
        print("---teardown---")

    def test_a(self):
        print("test_a")
        assert 1    # 斷言成功
    def test_b(self):
        print("test_b")
        assert 0    # 斷言失敗
# -------------------結果-----------------------------------
test_setup和teardown[39].py ---setup---    # 第1次執行 setup
test_a
.---teardown---    # 第1次執行 teardown
---setup---    # 第2次執行 setup
test_b
F---teardown---    # 第2次執行 teardown

3、配置檔案

  1. 專案下新建一個 scripts 模組

  2. 將測試指令碼放到 scripts 中

  3. pytest 的配置檔案放在自動化專案目錄下

  4. 配置檔名稱為 pytest.ini

  5. pytest.ini 第一行的內容為 [pytest] , 後面逐行寫具體的配置引數

  6. 命令列執行時會使用該配置檔案中的配置

[pytest]
addopts = -s --html=report1/report1.html
testpaths = ./scripts
python_files = test_*.py
python_classes = Test*
python_functions = test_*
[pytest]:這是配置檔案的頭部,表示這是 pytest 的配置部分。

addopts = -s --html=report1/report1.html:

addopts 表示新增額外的選項。
-s:表示輸出所有的 print 語句,方便在執行測試時可以看到輸出資訊。
--html=report1/report1.html:表示生成 HTML 格式的測試報告,儲存在 report1 目錄下的 report1.html 檔案中。這個選項是透過 pytest-html 外掛提供的功能來生成 HTML 報告的。
testpaths = ./scripts:指定測試指令碼所在的路徑為當前目錄下的 scripts 資料夾。這意味著 pytest 將在 ./scripts 目錄中查詢測試檔案來執行測試用例。

python_files = test_*.py:指定測試檔案的命名規則,只有符合 test_*.py 格式的檔案才會被 pytest 當做測試檔案執行其中的測試用例。

python_classes = Test*:指定測試類的命名規則,只有以 Test 開頭的測試類才會被 pytest 當做測試類執行其中的測試用例。

python_functions = test_*:指定測試函式的命名規則,只有以 test_ 開頭的測試函式才會被 pytest 當做測試用例執行。

4、資料引數化

@pytest.mark.parametrize("引數名", 引數值)
引數對應的值: 型別必須為可迭代的型別, 一般使用 list

import pytest

class TestLogin:

    @pytest.mark.parametrize("params", [{"username": "zhangsan", "password": "111"}, {"username": "lisi", "password": "222"}])
    def test_a(self, params):
        print(params)
        print(params["username"])
        print(params["password"])
#----------------------結果-------------------------------------------
test_login[43].py {'username': 'zhangsan', 'password': '111'}
zhangsan
111
.{'username': 'lisi', 'password': '222'}
lisi
222
.

引數化後, 有幾組引數, 測試函式就好執行幾次。

5、測試報告外掛

# [推薦安裝1.21.1的版本]命令列輸入
pip install pytest-html==1.21.1

校驗方式 pip list

、介面自動化框架實現

--api            # 封裝請求
--scripts        # 編寫測試指令碼
--data            # 存放測試資料
--utils            # 存放工具類
--report        # 存放生成的測試報告
--app.py        # 存放常量
--pytest.ini    # pytest的配置

相關文章