轉自:https://blog.csdn.net/hubanbei2010/article/details/79878567
作為產品線的支撐角色QA/CI/CD等,http api解析是互聯網公司中最常見的工作。
接口訪問,返回的數據一般是json格式。
常見場景:對json格式數據的解析,取某個字段的值,做相應的判斷。
任務:
假設剛部署出來的site的域名url為 https://qa-ultra-rds-96x.bbpd.io,現在檢驗version字段是否與預期相符。
與開發同學溝通,得知version信息可以通過訪問api(/ultra/api/v1/buildinfo)獲取到。
響應的數據為:
{
"name": "ultra",
"version": "3400.3.0",
"branch": "develop",
"commit": "a8ccaeb2b1c6094d598932219bb32cf9fe0380",
"timestamp": "1523024279567",
"date": "2018-04-06_14-17-59",
"buildNumber": "3033",
"buildName": "ultra/ultra-ui/develop",
"buildType": "webpack",
"buildVersion": "3400.3.0-ci.3033+a8ccaeb2",
"ultraVersion": "2018-04-06_09-38-20",
"learnVersion": "3400.3.0-ci.2927+b960272",
"webServerVersion": "2.0.16",
"config": {
"mode": "production",
"uiVersioningEnabled": true,
"staticAssetsDomain": "d2aqwpvls1cndj.cloudfront.net",
"learnVersionMapping": [
{
"from": "0.0.0.0",
"uiVersion": "2018-04-06_09-38-20"
}
]
}
}
SHELL腳本實現:
curl -s --insecure https://qa-ultra-rds-96x.bbpd.io/ultra/api/v1/buildinfo|grep ' "ultraVersion"'|awk -F '"' '{print $4}'
PYTHON腳本實現:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import json
import requests
def get_ultra_ui_version(base_url):
version_url = base_url + '/ultra/api/v1/buildinfo'
try:
res = requests.get(version_url)
print('respons status is %d' % res.status_code)
ultraVersion = json.loads(res.text)['ultraVersion']
print(type(ultraVersion))
except Exception as ex:
print('call api is failed and error message is :%s' % str(ex))
print(ultraVersion)
return ultraVersion
if len(sys.argv) >=2:
base_url = sys.argv[1]
else:
print('parameters are missing')
sys.exit()
get_ultra_ui_version(base_url)
總結:
對比一下,
發現不需要登錄狀態下,且只需要獲取簡單信息,不需要后續處理,api的訪問使用shell比python要簡單的多。
如果涉及登錄,可以借用python的requests庫,可以實現較復雜的認證功能。且使用python庫可以實現多請求的連續訪問,多次請求之間有session的依賴關系。保持底層session不中斷,可以減少建立tcp連接的次數,支持高並發。
