pytest + yaml 框架 -7.用例分層機制
阿新 • • 發佈:2022-12-05
前言
當我們測試流程類的介面,需反覆去呼叫同一個介面,就會想到複用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 校驗,最後會合併到一起校驗。