python讀取Excel實(shí)現(xiàn)接口自動(dòng)化并生成測(cè)試報(bào)告

http_request2.py用于發(fā)起http請(qǐng)求

#讀取多條測(cè)試用例

#1栏尚、導(dǎo)入requests模塊

importrequests

#從 class_12_19.do_excel1導(dǎo)入read_data函數(shù)

fromdo_excel2 importread_data

fromdo_excel2 importwrite_data

fromdo_excel2 importcount_case


#定義http請(qǐng)求函數(shù)

COOKIE=None

defhttp_request2(method,url,data):


?ifmethod=='get':

??print('發(fā)起一個(gè)get請(qǐng)求')

??result=requests.get(url,data,cookies=COOKIE)

?else:

??print('發(fā)起一個(gè)post請(qǐng)求')

??result=requests.post(url,data,cookies=COOKIE)

?returnresult #返回響應(yīng)體

?# return result.json() #返回響應(yīng)結(jié)果:結(jié)果是字典類型:{'status': 1, 'code': '10001', 'data': None, 'msg': '登錄成功'}


#從Excel讀取到多條測(cè)試數(shù)據(jù)

sheets=['login','recharge','withdraw']

forsheet1 insheets:

?max_row=count_case(sheet1)

?print(max_row)

?forcase_id inrange(1,max_row):

??data=read_data(sheet1,case_id)

??print('讀取到第{}條測(cè)試用例:'.format(data[0]))

??print('測(cè)試數(shù)據(jù) ',data)

??#print(type(data[2]))

??#調(diào)用函數(shù)發(fā)起http請(qǐng)求

??result=http_request2(data[4],data[2],eval(data[3]))

??print('響應(yīng)結(jié)果為 ',result.json())

??ifresult.cookies:

????COOKIE=result.cookies


???#將測(cè)試實(shí)際結(jié)果寫入excel

???#write_data(case_id+1,6,result['code'])

??write_data(sheet1,case_id+1,7,str(result.json()))

??#對(duì)比測(cè)試結(jié)果和期望結(jié)果

??ifresult.json()['code']==str(data[5]):

???print('測(cè)試通過')

???#將用例執(zhí)行結(jié)果寫入Excel

???write_data(sheet1,case_id+1,8,'Pass')

??else:

???write_data(sheet1,case_id+1,8,'Fail')

???print('測(cè)試失敗')


do_excel2.py完成對(duì)excel中用例的讀赃绊、寫熊镣、統(tǒng)計(jì)

# 導(dǎo)入load_workbook

fromopenpyxl importload_workbook


#讀取測(cè)試數(shù)據(jù)

#將excel中每一條測(cè)試用例讀取到一個(gè)列表中


#讀取一條測(cè)試用例——寫到一個(gè)函數(shù)中

defread_data(sheet_name,case_id):

?# 打開excel

?workbook1=load_workbook('test_case2.xlsx')

?# 定位表單(test_data)

?sheet1=workbook1[sheet_name]

?print(sheet1)

?test_case=[] #用來存儲(chǔ)每一行數(shù)據(jù)嚎莉,也就是一條測(cè)試用例

?test_case.append(sheet1.cell(case_id+1,1).value)

?test_case.append(sheet1.cell(case_id+1,2).value)

?test_case.append(sheet1.cell(case_id+1,3).value)

?test_case.append(sheet1.cell(case_id+1,4).value)

?test_case.append(sheet1.cell(case_id+1,5).value)

?test_case.append(sheet1.cell(case_id+1,6).value)

?returntest_case #將讀取到的用例返回


#調(diào)用函數(shù)讀取第1條測(cè)試用例悯搔,并將返回結(jié)果保存在data中

# data=read_data(1)

# print(data)


#將測(cè)試結(jié)果寫會(huì)excel

defwrite_data(sheet_name,row,col,value):

?workbook1=load_workbook('test_case2.xlsx')

?sheet=workbook1[sheet_name]

?sheet.cell(row,col).value=value

?workbook1.save('test_case2.xlsx')


#統(tǒng)計(jì)測(cè)試用例的行數(shù)

defcount_case(sheet_name):

??workbook1=load_workbook('test_case2.xlsx')

??sheet=workbook1[sheet_name]

??max_row=sheet.max_row #統(tǒng)計(jì)測(cè)試用例的行數(shù)

??returnmax_row


test_case2.xlsx存儲(chǔ)測(cè)試用例


補(bǔ)充知識(shí):python用unittest+HTMLTestRunner+csv的框架測(cè)試并生成測(cè)試報(bào)告

importcsv # 導(dǎo)入scv庫灾常,可以讀取csv文件

fromselenium importwebdriver

importunittest

fromtime importsleep

importtime

importos

importHTMLTestRunner

importcodecs

importsys

dr =webdriver.Chrome()


classtestLo(unittest.TestCase):

?defsetUp(self):

??pass


?deftest_login(self):

??'''登陸測(cè)試'''

??path ='F:\\Python_test\\'

??# 要讀取的scv文件路徑

??my_file ='F:\\pythonproject\\interfaceTest\\testFile\\ss.csv'

??# csv.reader()讀取csv文件照激,

??# Python3.X用open发魄,Python2.X用file,'r'為讀取

??# open(file,'r')中'r'為讀取權(quán)限俩垃,w為寫入励幼,還有rb,wd等涉及到編碼的讀寫屬性

??#data = csv.reader(codecs.open(my_file, 'r', encoding='UTF-8',errors= 'ignore'))

??with codecs.open(my_file, 'r', encoding='UTF-8',errors='ignore') as f:

???data=csv.reader((line.replace('\x00','') forline inf))

???# for循環(huán)將讀取到的csv文件的內(nèi)容一行行循環(huán)口柳,這里定義了user變量(可自定義)

???# user[0]表示csv文件的第一列苹粟,user[1]表示第二列,user[N]表示第N列

???# for循環(huán)有個(gè)缺點(diǎn)跃闹,就是一旦遇到錯(cuò)誤嵌削,循環(huán)就停止毛好,所以用try,except保證循環(huán)執(zhí)行完

???print(my_file)

???foruser indata:

????print(user)

????dr.get('https://passport.cnblogs.com/user/signin')

????# dr.find_element_by_id('input1').clear()

????dr.find_element_by_id('input1').send_keys(user[0])

????# dr.find_element_by_id('input2').clear()

????dr.find_element_by_id('input2').send_keys(user[1])

????dr.find_element_by_id('signin').click()

????sleep(1)

????print('\n'+'測(cè)試項(xiàng):'+user[2])

????dr.get_screenshot_as_file(path +user[3] +".jpg")

????try:

?????assertdr.find_element_by_id(user[4]).text

?????try:

??????error_message =dr.find_element_by_id(user[4]).text

??????self.assertEqual(error_message, user[5])

??????print('提示信息正確苛秕!預(yù)期值與實(shí)際值一致:')

??????print('預(yù)期值:'+user[5])

??????print('實(shí)際值:'+error_message)

?????except:

??????print('提示信息錯(cuò)誤肌访!預(yù)期值與實(shí)際值不符:')

??????print('預(yù)期值:'+user[5])

??????print('實(shí)際值:'+error_message)

????except:

?????print('提示信息類型錯(cuò)誤,請(qǐng)確認(rèn)元素名稱是否正確!')


?deftearDown(self):

??dr.refresh()

??# 關(guān)閉瀏覽器

??dr.quit()


if__name__ =="__main__":

?# 定義腳本標(biāo)題艇劫,加u為了防止中文亂碼

?report_title =u'登陸模塊測(cè)試報(bào)告'


?# 定義腳本內(nèi)容吼驶,加u為了防止中文亂碼

?desc =u'登陸模塊測(cè)試報(bào)告詳情:'


?# 定義date為日期,time為時(shí)間

?date =time.strftime("%Y%m%d")

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


?# 定義path為文件路徑港准,目錄級(jí)別,可根據(jù)實(shí)際情況自定義修改

?path ='F:\\Python_test\\'+date +"\\login\\" + time + "\\"


?# 定義報(bào)告文件路徑和名字咧欣,路徑為前面定義的path浅缸,名字為report(可自定義),格式為.html

?report_path =path +"report.html"


?# 判斷是否定義的路徑目錄存在魄咕,不能存在則創(chuàng)建

?ifnotos.path.exists(path):

??os.makedirs(path)

?else:

??pass


?# 定義一個(gè)測(cè)試容器

?testsuite =unittest.TestSuite()


?# 將測(cè)試用例添加到容器

?testsuite.addTest(testLo("test_login"))


?# 將運(yùn)行結(jié)果保存到report衩椒,名字為定義的路徑和文件名,運(yùn)行腳本

?report =open(report_path, 'wb')

?#with open(report_path, 'wb') as report:

?runner =HTMLTestRunner.HTMLTestRunner(stream=report, title=report_title, description=desc)

?runner.run(testsuite)


?# 關(guān)閉report哮兰,腳本結(jié)束

?report.close()

csv文件格式:

備注:

使用python處理中文csv文件毛萌,并讓execl正確顯示中文(避免亂碼)設(shè)施編碼格式為:utf_8_sig,示例:

'''''

將結(jié)果導(dǎo)出到result.csv中,以UTF_8 with BOM編碼(微軟產(chǎn)品能正確識(shí)別UTF_8 with BOM存儲(chǔ)的中文文件)存儲(chǔ)

#data.to_csv('result_utf8_no_bom.csv',encoding='utf_8')#導(dǎo)出的結(jié)果不能別excel正確識(shí)別

data.to_csv('result_utf8_with_bom.csv',encoding='utf_8_sig')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喝滞,一起剝皮案震驚了整個(gè)濱河市阁将,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌右遭,老刑警劉巖做盅,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異窘哈,居然都是意外死亡吹榴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門滚婉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來图筹,“玉大人,你說我怎么就攤上這事让腹≡妒#” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵骇窍,是天一觀的道長(zhǎng)民宿。 經(jīng)常有香客問我,道長(zhǎng)像鸡,這世上最難降的妖魔是什么活鹰? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任哈恰,我火速辦了婚禮,結(jié)果婚禮上志群,老公的妹妹穿的比我還像新娘着绷。我一直安慰自己,他們只是感情好锌云,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布荠医。 她就那樣靜靜地躺著,像睡著了一般桑涎。 火紅的嫁衣襯著肌膚如雪彬向。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天攻冷,我揣著相機(jī)與錄音娃胆,去河邊找鬼。 笑死等曼,一個(gè)胖子當(dāng)著我的面吹牛里烦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播禁谦,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼胁黑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了州泊?” 一聲冷哼從身側(cè)響起丧蘸,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遥皂,沒想到半個(gè)月后触趴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渴肉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年冗懦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仇祭。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡披蕉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乌奇,到底是詐尸還是另有隱情没讲,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布礁苗,位于F島的核電站爬凑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏试伙。R本人自食惡果不足惜嘁信,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一于样、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潘靖,春花似錦穿剖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至单寂,卻和暖如春贬芥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宣决。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工蘸劈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疲扎。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓昵时,卻偏偏與公主長(zhǎng)得像捷雕,于是被迫代替她去往敵國和親椒丧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容