如何用 tep 完成增刪改查介面自動化
tep 的設計理念是讓人人都可以用 Python 寫自動化,本文就來介紹如何用 tep 完成增刪改查介面自動化。
環境變數
編輯fixtures/fixture_admin.py
:
"qa": {
"domain": "https://qa.com",
},
修改qa
環境的domain
。
登入
因為非登入介面需要從登入介面拿token
,放在請求引數中,所以先在fixtures/fixture_admin.py
中實現登入,修改url
和json
:
response = request(
"post",
url=url("/api/users/login"),
headers={"Content-Type": "application/json"},
json={
"username": "admin",
"password": "123456",
}
)
根據實際響應資料結構,修改response_token
賦值:
response_token = jmespath.search("token", response.json())
class Clazz:
token = response_token
jwt_headers = _jwt_headers(response_token)
return Clazz
參考_jwt_headers()
實現自定義 headers:
def _jwt_headers(token):
return {"Content-Type": "application/json", "authorization": f"Bearer {token}"}
_
表示內部函式,外部無法訪問,遵循conftest.py
只對外提供 fixture 的原則。
完整程式碼
def _jwt_headers(token):
return {"Content-Type": "application/json", "authorization": f"Bearer {token}"}
@pytest.fixture(scope="session")
def login():
# Code your login
logger.info("Administrator login")
response = request(
"post",
url=url("/api/users/login"),
headers={"Content-Type": "application/json"},
json={
"username": "admin",
"password": "123456",
}
)
assert response.status_code < 400
response_token = jmespath.search("token", response.json())
class Clazz:
token = response_token
jwt_headers = _jwt_headers(response_token)
return Clazz
說明:
- 可以複製
login
為多個 fixture,如login_admin
、login_some_user
,靈活運用。 -
scope="session"
,表示只登入一次,所有測試用例使用同一個token
。可以改為function
,讓每條用例使用不同token
。
寫用例
新建測試
新建tests\crud_test.py
:
from loguru import logger
from tep.client import request
def test(faker_ch, login, url):
pytest 的 fixture 作為引數傳入test()
函式來使用,faker_ch
、login
、 url
是fixture_admin.py
中定義好的 fixture。
-
from loguru import logger
用於在測試用例中列印日誌 -
from tep.client import request
tep 封裝了請求日誌功能,也可以用原生from requests import request
新增
請求引數為nickname
和phone
,使用faker_ch
造 1 條測試資料:
fake = faker_ch
nickname = fake.name()
phone = fake.phone_number()
請求方法為post
,headers 取登入返回值login.jwt_headers
:
response = request(
"post",
url=url("/api/users"),
headers=login.jwt_headers,
json={
"nickname": nickname, "phone": phone
}
)
新增斷言,簡單判斷下響應狀態碼<400:
assert response.status_code < 400
也可以查資料庫來斷言。
提取修改介面需要的資料:
user_id = jmespath.search("id", response.json())
created_at = jmespath.search("createdAt", response.json())
updated_at = jmespath.search("updatedAt", response.json())
推薦用 jmespath 來提取 json。
查詢
請求引數傳入剛才定義的區域性變數nickname
,使用get
請求並斷言,headers 取登入返回值login.jwt_headers
:
response = request(
"get",
url=url("/api/users"),
headers=login.jwt_headers,
params={
"page": 1,
"perPage": 10,
"keyword": nickname
}
)
assert response.status_code < 400
get 請求需要把
json
關鍵字改為params
。
修改
使用 faker 再造 1 條新資料:
nickname_new = fake.name()
phone_new = fake.phone_number()
請求方法為put
,headers 取登入返回值login.jwt_headers
:
response = request(
"put",
url=url(f"/api/users/{user_id}"),
headers=login.jwt_headers,
json={
"id": user_id, "createdAt": created_at, "updatedAt": updated_at,
"phone": phone_new, "nickname": nickname_new
}
)
assert response.status_code < 400
請求引數中用到了新增介面提取的資料user_id
、created_at
、updated_at
。
刪除
請求方法為delete
,url
中傳入user_id
,headers 取登入返回值login.jwt_headers
:
response = request(
"delete",
url=url(f"/api/users/{user_id}"),
headers=login.jwt_headers
)
assert response.status_code < 400
刪除介面沒有 json 和 params。
完整用例
"""
@Author : Don
@Date : 12/25/2020 1:02 PM
@Desc : 增刪改查
"""
import jmespath
from loguru import logger
from tep.client import request
def test(faker_ch, login, url):
fake = faker_ch
logger.info("新增")
nickname = fake.name()
phone = fake.phone_number()
response = request(
"post",
url=url("/api/users"),
headers=login.jwt_headers,
json={
"nickname": nickname, "phone": phone
}
)
assert response.status_code < 400
user_id = jmespath.search("id", response.json())
created_at = jmespath.search("createdAt", response.json())
updated_at = jmespath.search("updatedAt", response.json())
logger.info("查詢")
response = request(
"get",
url=url("/api/users"),
headers=login.jwt_headers,
params={
"page": 1,
"perPage": 10,
"keyword": nickname
}
)
assert response.status_code < 400
logger.info("修改")
nickname_new = fake.name()
phone_new = fake.phone_number()
response = request(
"put",
url=url(f"/api/users/{user_id}"),
headers=login.jwt_headers,
json={
"id": user_id, "createdAt": created_at, "updatedAt": updated_at,
"phone": phone_new, "nickname": nickname_new
}
)
assert response.status_code < 400
logger.info(f"使用者姓名手機 {nickname} {phone} 修改後 {nickname_new} {phone_new}")
logger.info("刪除")
response = request(
"delete",
url=url(f"/api/users/{user_id}"),
headers=login.jwt_headers
)
assert response.status_code < 400
小結
本文介紹了 tep 的基本使用,先配置環境變數,再修改登入程式碼,然後新增測試,最後編寫增刪改查的介面請求。每條用例放在一個函式中,透過函式引數引用 fixture 來使用全域性環境變數,函式內部可以定義測試需要的區域性變數。每個介面是一個程式碼塊,由介面描述、測試資料、請求、斷言和資料提取 5 部分組成。介面之間透過變數實現引數化和關聯。
相關文章
- 如何用tep完成增刪改查介面自動化
- Kendo UI:grid完成增刪改查(*)UI
- 免費教你寫增刪改查介面
- 增刪改查
- Mongoose查增改刪Go
- indexedDB 增刪改查Index
- mysql增刪改查MySql
- SQL增刪改查SQL
- 使用Django開發簡單介面:文章增刪改查Django
- mybatis的增刪改查MyBatis
- 單表增刪改查
- mongodb 基本增刪改查MongoDB
- EFCore之增刪改查
- MongoDB增刪改查操作MongoDB
- layui的增刪改查UI
- mysql基本增刪改查MySql
- sql指令,增,刪,查,改SQL
- redist的增刪改查Redis
- 列表的增刪改查
- 字典的增刪改查
- laravel極速完成增刪改查的第三方包Laravel
- C# SqlSugar增刪改查C#SqlSugar
- rust sqlx 使用---增刪改查RustSQL
- JavaWeb中jdbc增刪查改JavaWebJDBC
- PHP操作MongoDB(增刪改查)PHPMongoDB
- elasticsearch7.2增刪改查Elasticsearch
- [express+mongoose](增刪改查)ExpressGo
- iOS CoreData (一) 增刪改查iOS
- CoreData - 簡單 增刪改查
- Jfinal+layui增刪改查UI
- SQL 基礎增、刪、改、查SQL
- Android studio增刪改查尚未全部完成時如何檢視資料庫Android資料庫
- gRPC 的增刪改查系列之啟動服務RPC
- 如何用Postman做介面自動化測試Postman
- cobra.Command的增刪改查
- Python中CRUD增刪改查教程Python
- MySQL基礎操作(增刪改查)MySql
- mysql資料增刪改查操作MySql