第三章 自動化-接口測試(python+requests)

準備工作:

根據(jù)以下腳本安裝相應依賴模塊,以下腳本只是簡單的做了個DEMO供初學者參考沈贝!舉一反三~

上腳本:

腳本中有多線程和非多線程的寫法杠人,已實釘釘發(fā)送報告和運行日志記錄(腳本中釘釘?shù)腤ebhook換成你自己的即可)可根據(jù)需要自行調整優(yōu)化!

# coding:utf-8

import json,time,sys,os,re

import requests

import pandasas pd

from tomorrow3import threads

class Logger():

def __init__(self, fileN="python_sendreport.log"):

self.terminal = sys.stdout

self.log =open(fileN, "a")

def write(self, message):

self.terminal.write(message)

self.log.write(message)

def flush(self):

pass

class dingHook(object):

#釘釘發(fā)送markdown方法

? ? def markdown(self,project,text,text1):

self.url ="https://oapi.dingtalk.com/robot/send?access_token=5af67a5b8f879cfe4a9f5fd4f7e1aef8d83c23e36aaa8e45860d55fef17edb87"

? ? ? ? data={

"msgtype":"markdown",

? ? ? ? ? ? "markdown": {

"title":"呂布",

? ? ? ? ? ? ? ? "text":f'### **{project}**\n'+

f">? #### {text}\n\n" +

#"> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n"+

? ? ? ? ? ? ? ? ? ? ? ? f"> ###### {text1} \n"

? ? ? ? ? ? ? ? ? ? ? ? #"> ###### 具體可查看郵件[鏈接](C:/Users/lenovo/Desktop/12.html) \n"

? ? ? ? ? ? },

? ? ? ? ? ? "at": {

"atMobiles": [

"1860176XXXX",

? ? ? ? ? ? ? ? ? ? ""

? ? ? ? ? ? ? ? ],

? ? ? ? ? ? ? ? "isAtAll":False

? ? ? ? ? ? }

}

data = json.dumps(data).encode(encoding='UTF8')

head = {"Content-Type":"application/json"}

response = requests.post(self.url,data=data,headers=head)

#調用釘釘返回結果轉json格式

? ? ? ? res_code = json.loads(response.text)

#print(res_code['errcode'])

? ? ? ? if res_code['errcode'] ==0:

#print('釘釘消息推送成功宋下!')

? ? ? ? ? ? Logger().write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+'? ' +"釘釘消息推送成功\n")

else:

print('釘釘消息推送失敗!')

Logger().write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())? +"釘釘消息推送失敗\n")

#查詢當前路徑下所有xlsx

class read_execlfile(object):

def search(self,dirname, filename):

result = []

for itemin os.listdir(dirname):

item_path = os.path.join(dirname, item)

if os.path.isdir(item_path):

read_execlfile().search(item_path, filename)

elif os.path.isfile(item_path):

if filenamein item:

result.append(item_path)

return result

class system_check(object):

@threads(5)

#支持多線程-發(fā)送釘釘

? ? def run(self,data):

try:

# 取每一行的值

? ? ? ? ? ? Row_value = data.loc[i]

# 定義headers變量

? ? ? ? ? ? headers = Row_value['headers']

# 判斷header是否為NAN嗡善,當相同時為真

? ? ? ? ? ? if headers == headers:

# 調用請求方法

? ? ? ? ? ? ? ? res = requests.get(Row_value['url'], headers=eval(headers), timeout=Row_value['timeout'])

# 判斷請求結果發(fā)送報告至釘釘

? ? ? ? ? ? ? ? if res.status_code !=200:

dingHook().markdown('系統(tǒng)健康檢查', '請核實此鏈接訪問是否正常:' + Row_value['url'], '當前返回結果:' +str(res.text))

else:

pass

? ? ? ? ? ? else:

# 調用請求方法

? ? ? ? ? ? ? ? res = requests.get(Row_value['url'], timeout=Row_value['timeout'])

# 判斷請求結果發(fā)送報告至釘釘

? ? ? ? ? ? ? ? if res.status_code !=200:

dingHook().markdown('系統(tǒng)健康檢查', '請核實此鏈接訪問是否正常:' + Row_value['url'], '當前返回結果:' +str(res.status_code))

else:

pass

? ? ? ? except Exception as e:

Logger().write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) +f"? 異常{e}\n")

dingHook().markdown('系統(tǒng)健康檢查', '請核實此鏈接訪問是否正常:' + Row_value['url'], f'當前返回結果:{e}')

#非多線程寫法-生成報告寫EXECL

? ? def run_1(self):

#報告文件地址

? ? ? ? EX_PATH =r".\\url.xlsx"

? ? ? ? otherStyleTime = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))

#隨機生成報告

? ? ? ? EX_PATH1 =f'.\\report\\report_{str(otherStyleTime)}.xlsx'

? ? ? ? # 讀取excel里面的內容

? ? ? ? data = pd.DataFrame(pd.read_excel(EX_PATH))

#獲取execl行數(shù)

? ? ? ? print(len(data))

url=[]

result=[]

#根據(jù)行數(shù)獲取參婁

? ? ? ? for iin range(len(data)):

#取每一行的值

? ? ? ? ? ? Row_value=data.loc[i]

#定義headers變量

? ? ? ? ? ? headers=Row_value['headers']

#判斷header是否為真

? ? ? ? ? ? if headers ==headers:

#調用請求方法

? ? ? ? ? ? ? ? res=requests.get(Row_value['url'],headers=eval(headers),timeout=Row_value['timeout'])

else:

#調用請求方法

? ? ? ? ? ? ? ? res=requests.get(Row_value['url'],timeout=Row_value['timeout'])

#判斷請求結果發(fā)送報告至釘釘

? ? ? ? ? ? if res.status_code !=200:

dingHook().markdown('系統(tǒng)健康檢查','請核實此URL訪問是否正常'+Row_value['url'],'當前返回狀態(tài):'+str(res.status_code))

else:

pass

? ? ? ? ? ? #將相關數(shù)據(jù)及結果添加進列表

? ? ? ? ? ? url.append(Row_value['url'])

result.append(res.status_code)

# 寫文件件操作

? ? ? ? dic1 = {'url': url,

? ? ? ? ? ? ? ? 'result': result

}

df = pd.DataFrame(dic1)

df.to_excel(EX_PATH1, index=False)

if __name__ =='__main__':

#獲取當前路徑

? ? path = os.path.split(os.path.realpath(__file__))[0]

#print(path)

? ? # 報告文件地址

? ? EX_PATH = read_execlfile().search(path, ".xlsx")

#遍歷所有execl文件

? ? for iin EX_PATH:

#獲取execl文件名

? ? ? ? execl_name_list = re.findall(r'health_check\\(.*?).xlsx',i,re.S)

execl_name=''.join(execl_name_list)

#print(execl_name)

? ? ? ? # 讀取excel里面的內容

? ? ? ? data = pd.DataFrame(pd.read_excel(i))

#print('腳本執(zhí)行開始')

? ? ? ? dingHook().markdown('健康檢查', f'@定時任務&開始啟動...', f'>>>>>>({execl_name}.xlsx文件)-腳本執(zhí)行中>>>>>>')

Logger().write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) +f"? 檢查腳本定時執(zhí)行開始\n")

#執(zhí)行多線程操作

? ? ? ? for i in range(len(data)):

system_check().run(data)

#判斷腳本是否執(zhí)行完畢

? ? ? ? if i == max(range(len(data))):

time.sleep(5)

dingHook().markdown('健康檢查', f'@定時任務#({execl_name}.xlsx文件)-腳本執(zhí)行完成(共{len(data)}條用例)', '請留意釘釘信送消息!')

Logger().write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) +f"? 定時任務執(zhí)行完成(共{len(data)}條用例)学歧。\n")

讀取的EXECL文件格式
log文件為腳本執(zhí)行的日志文件罩引,.py放的是以上腳本,xlsx為上面execl截圖內容
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末枝笨,一起剝皮案震驚了整個濱河市袁铐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌横浑,老刑警劉巖剔桨,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異徙融,居然都是意外死亡洒缀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門张咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帝洪,“玉大人似舵,你說我怎么就攤上這事〈邢浚” “怎么了砚哗?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砰奕。 經常有香客問我蛛芥,道長,這世上最難降的妖魔是什么军援? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任仅淑,我火速辦了婚禮,結果婚禮上胸哥,老公的妹妹穿的比我還像新娘涯竟。我一直安慰自己,他們只是感情好空厌,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布庐船。 她就那樣靜靜地躺著,像睡著了一般嘲更。 火紅的嫁衣襯著肌膚如雪筐钟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天赋朦,我揣著相機與錄音篓冲,去河邊找鬼。 笑死宠哄,一個胖子當著我的面吹牛壹将,可吹牛的內容都是我干的。 我是一名探鬼主播琳拨,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瞭恰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狱庇?” 一聲冷哼從身側響起惊畏,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎密任,沒想到半個月后颜启,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡浪讳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年缰盏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡口猜,死狀恐怖负溪,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情济炎,我是刑警寧澤川抡,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站须尚,受9級特大地震影響崖堤,放射性物質發(fā)生泄漏。R本人自食惡果不足惜耐床,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一密幔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撩轰,春花似錦胯甩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溉苛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弄诲,已是汗流浹背愚战。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留齐遵,地道東北人寂玲。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像梗摇,于是被迫代替她去往敵國和親拓哟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354