介面自動化測試-apiAutoTest 優化之資料依賴處理
廢話
目前在工作中寫指令碼的時候發現了一些之前開源的apiAutoTest的可優化項,後面應該也是會慢慢的繼續優化了
2020/11/19
截止到寫這篇文章的時間是,2020/11/19 00:53 現在也是把該項優化了,那優化了什麼尼?
引數依賴
我理解的引數依賴/介面依賴就是介面進行關聯操作,比如有些查詢介面需要登入之後才可以操作,那麼我們就需要拿到token之類的東西,這一部分東西是放到header中的,apiAutoTest圍繞的只有路徑引數依賴,請求資料依賴
- 路徑引數依賴
譬如說現在的restful,一個users介面,路由一般這樣的users
他的請求方式是get,這個路由我們把他認為是查所有使用者,如果查某一個使用者可能是這樣的users/:id
也是個get請求,這裡這個id想表達的意思是這裡有個需要個使用者id的引數,比如1-500裡面的任意1個,也就是說這個id是可變的,可以從登入介面的返回響應取一個叫userId的值
- 請求引數依賴
這個應該好理解些,就是說支付介面需要的訂單id,是從上一步提交訂單介面返回的響應訂單id
更新後的效果
由於在改動時發現了之前的程式碼挺繞的,而且都沒什麼幫助所以就不說了,如果對之前的感興趣可以看這裡:https://testerhome.com/topics/25003 , 下面上新版用例截圖
- 關於檔案改動,新增了
data_process.py
檔案裡面封裝了請求儲存實際結果響應,path引數處理,請求資料處理
#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@project: apiAutoTest
@author: zy7y
@file: data_process.py
@ide: PyCharm
@time: 2020/11/18
"""
import json
import re
from tools import *
class DataProcess:
response_dict = {}
header = {}
null_header = {}
@classmethod
def save_response(cls, key: str, value: object) -> None:
"""
儲存實際響應
:param key: 儲存字典中的key,一般使用用例編號
:param value: 儲存字典中的value,使用json響應
"""
cls.response_dict[key] = value
logger.info(f'新增key: {key}, 對應value: {value}')
@classmethod
def handle_path(cls, path_str: str = '') -> str:
"""路徑引數處理
:param path_str: 帶提取表示式的字串 /&$.case_005.data.id&/state/&$.case_005.data.create_time&
上述內容表示,從響應字典中提取到case_005字典裡data字典裡id的值,假設是500,後面&$.case_005.data.create_time& 類似,最終提取結果
return /511/state/1605711095
"""
# /&$.case.data.id&/state/&$.case_005.data.create_time&
for i in re.findall('&(.*?)&', path_str):
path_str = path_str.replace(f'&{i}&', str(extractor(cls.response_dict, i)))
logger.info(f'提取出的路徑地址: {path_str}')
return path_str
@classmethod
def handle_header(cls, is_token: str, response: dict, reg) -> dict:
"""處理header"""
if is_token == '寫':
cls.header['Authorization'] = extractor(response, reg)
return cls.header
elif is_token == '':
return cls.null_header
else:
return cls.header
@classmethod
def handle_data(cls, variable: str) -> dict:
"""請求資料處理
:param variable: 請求資料,傳入的是可轉換字典/json的字串,其中可以包含變數表示式
return 處理之後的json/dict型別的字典資料
"""
if variable == '':
return
for i in re.findall('&(.*?)&', variable):
variable = variable.replace(f'&{i}&', str(extractor(cls.response_dict, i)))
if 'null' in variable:
variable = variable.replace('null', 'None')
if 'true' in variable:
variable = variable.replace('true', 'True')
if 'false' in variable:
variable = variable.replace('false', 'False')
logger.info(f'最終的請求資料如下: {variable}')
return eval(variable)
相比之前這種寫法應該更加清晰,然後之前的請求資料是採用字典合併的方式,在請求資料多層結構的時候會出現bug,現在改成了文字替換之後轉json/dict的方法
新版依賴資料如何使用
舉個例子
假設現在有個實際響應結果字典如下
{"case_002": {
"data": {
"id": 500,
"username": "admin",
"mobile": "12345678",
}},
"case_005": {
"data": {
"id": 511,
"create_time": 1605711095
},
}
}
- excel中介面路徑內容:
users/&$.case_005.data.id&/state/&$.case_005.data.careate_time&
程式碼內部解析後如下:users/511/state/1605711095
&$.case_005.data.id&
代表從響應字典中提取case_005字典中data字典中的id的值,提取出來的結果是511
- excel中請求引數內容如下:
{
"pagenum": 1,
"pagesize": "12",
"data": &$.case_005.data&,
"userId": &$.case_002.data.id&
}
程式碼內部解析後如下:
{
"pagenum": 1,
"pagesize": "12",
"meta": {
"id": 511,
"create_time": 1605711095
},
"userId": 500
}
其實不難看出其中規則&jsonpath提取語法&
,如果你需要的內容是字串型別,只需要這樣"&jsonpath提取語法&"
原始碼地址
github: https://github.com/zy7y/apiAutoTest.git
gitee: https://gitee.com/zy7y/apiAutoTest.git
道謝
謝謝各位的點評,在實際工作寫到之後發現之前的寫法的確不如意,希望多寫,然後進步~晚安
相關文章
- 介面自動化測試:apiAutoTest使用re 處理資料依賴API
- python介面自動化測試之介面資料依賴Python
- apiAutoTest: 介面自動化測試的資料清洗(備份/恢復)處理方案API
- 介面自動化如何處理介面依賴問題
- python 介面自動化 -- 依賴資料Python
- Python自動化測試-使用Pandas來高效處理測試資料Python
- 介面自動化測試
- 求助帖:JMeter 介面自動化測試——資料驅動JMeter
- Python 介面自動化測試Python
- Python自動化處理Excel資料PythonExcel
- 自動化測試中的驗證碼處理
- 如何處理不穩定的自動化測試?
- protobuf 介面自動化測試摸索
- 介面自動化測試框架 HttpFPT框架HTTP
- 二、介面自動化測試(2)
- 介面自動化測試 - RobotFramework RESTinstanceFrameworkREST
- 自動化測試如何管理測試資料
- JMeter 介面自動化測試(手工轉自動化指令碼)JMeter指令碼
- 測試開發之介面篇-使用K6完成介面自動化測試
- “自動化測試解放雙手”,測試自動化好處大盤點!
- 自動化測試時對驗證碼的處理
- 測試開發之自動化篇-自動化測試框架設計框架
- 使用 testng 做介面自動化測試
- 介面自動化測試解決方案
- Django 介面自動化測試平臺Django
- python介面自動化測試之python基礎語法Python
- 自動化測試系列 —— UI自動化測試UI
- pytest 用例資料依賴如何處理
- 百億級資料處理優化優化
- 採用自動化測試的情形及自動化測試的優缺點
- [測試經驗] 依賴方介面呼叫測試
- UI自動化測試之AirtestUIAI
- Android 自動化測試之 MonkeyAndroid
- 軟體測試理論(2)自動化測試
- 軟體自動化測試有什麼優勢?自動化測試框架有哪些?框架
- 介面自動化測試工程實踐分享
- 介面自動化測試框架搭建的思路框架
- postman實現介面的自動化測試Postman