1. 程式人生 > 其它 >pytest + yaml 框架 -7.用例分層機制

pytest + yaml 框架 -7.用例分層機制

前言

當我們測試流程類的介面,需反覆去呼叫同一個介面,就會想到複用API,在程式碼裡面可以寫成函式去呼叫。
那麼在yaml 檔案中,我們可以把單個API寫到一個yaml 檔案,測試用例去呼叫匯入API。

用例分層

我這裡只分2層:API 層 和 Test case 用例層

  • API 層: 描述介面request請求,可以帶上validate 基本的校驗
  • Test case 用例層: 用例層多個步驟按順序引用API

API 層示例

API 層只做介面的描述,一般放到專案根目錄api目錄下

api/login.yaml 示例

name: post
request:
    method: POST
    url: http://httpbin.org/post
    json:
        username: ${username}
        password: "123456"
validate:
    - eq: [status_code, 200]

如果有需要用到變數,比如登入使用者名稱在不同用例中會用到不同的賬號,那麼可以使用變數 ${username}
需注意的是,API 層不支援單獨執行,因為它只是用例的一個部分,不能當成用例去執行,用例執行需使用 test_*.yml 命名

TestCase 層

用例層通過api 關鍵字匯入需要的API,匯入的路徑是相對路徑,需根據專案的根目錄去匯入。
比如我的專案結構是這樣的

├─api
   └─ login.yml
├─testcase
   └─ test_login.yml
└─conftest.py
└─pytest.ini

那麼不管用例檔案test_*.yml在哪個目錄,都是以專案根目錄去匯入API 的yaml檔案

config:
    name: login case
    base_url: http://124.70.221.221:8201
    variables:
        username: "test123"
        password: "123456"


teststeps:
-
    name: step login1
    api: api/login.yml
    extract:
        url:  body.url
    validate:
        - eq: [status_code, 200]
        - eq: [ok, true]
-
    name: step login2
    api: api/login.yml

執行用例也是在專案根目錄去執行 pytest 執行

pytest testcase

關於變數

API 層可以引用變數,引用變數的值都是從用例目錄的variables 載入的變數,目前只支援config 設定用例全域性變數

config:
    name: login case
    base_url: http://124.70.221.221:8201
    variables:
        username: "test123"
        password: "123456"

我們可以理解為API是用例的一個步驟,是用例的一部分,匯入過去相當於複製request 請求到用例步驟裡面。

關於校驗

在API 層可以寫一些基礎的校驗,比如校驗狀態碼,我們一般不在API層寫業務邏輯校驗。
比如登入的用例,期望結果可以是登入成功,也可以是登入失敗,那麼業務邏輯的校驗,應該在用例層去校驗

-
    name: step login1
    api: api/login.yml
    extract:
        url:  body.url
    validate:
        - eq: [status_code, 200]
        - eq: [ok, true]

如果API 層和用例層都有validate 校驗,最後會合併到一起校驗。