出處:https://www.cnblogs.com/yufeihlf/p/5752146.html
今天筆者就要?dú)w納總結(jié)下一整套測試流程,從無到有,實現(xiàn)零突破,包括如何編寫測試用例,定時執(zhí)行測試用例,查找最新生成的測試報告文件,自動發(fā)送最新測試報告郵件,一整套完整的測試流程。以后各位只要著重如何編寫測試用例即可,其他模板可以套用的,希望幫助到大家。
目錄
一、編寫測試用例
二、執(zhí)行測試用例,查找最新測試用例,自動發(fā)送測試報告
三、定時執(zhí)行測試用例
? ?3.1方案一:Windows任務(wù)計劃
? ?3.2方案二:Jenkins持續(xù)集成
四、成果驗收
?
環(huán)境準(zhǔn)備:
操作系統(tǒng):Windows7
集成開發(fā)環(huán)境:eclipse+pydev
?
一、編寫測試用例
點擊返回目錄
? ? 可以直接使用Python自帶的單元測試框架unittest來編寫自動化測試用例,利用其組織測試用例,斷言預(yù)期結(jié)果,以及批量執(zhí)行測試用例等功能,可以很好的進(jìn)行Web自動化測試的開發(fā)。
? ? 可以直接查看我另外一篇博文總結(jié):unittest單元測試框架總結(jié)
? ? 里邊詳細(xì)總結(jié)了使用unittest框架編寫測試用例思路(模板) 和 使用unittest框架編寫測試用例實例 。
? ? 目錄結(jié)構(gòu)如下組織:
? ? 如上圖:test_case目錄下有兩個測試用例,其中test_baidu.py實例代碼在博文“unittest單元測試框架總結(jié)”中有貼出。其他實例,可以參考模板實現(xiàn),就不全部貼出代碼了。
? ? 而這次需要測試的就是test_baidu.py和test_youdao.py這兩個測試用例。
?
二、執(zhí)行測試用例,查找最新測試用例,自動發(fā)送測試報告
點擊返回目錄
? ? 整個代碼執(zhí)行過程可以分成三個步驟:
? ? 1.通過unittest框架的discover()找到匹配的測試用例(以test_開頭的腳本),由HTMLTestRunner的run()方法執(zhí)行測試用例并生成最新測試報告。HTMLTestRunner是Python標(biāo)準(zhǔn)卡unittest單元測試框架的一個擴(kuò)展,主要用于生成HTML測試報告,以便生成一份通俗易懂的測試報告來展示自動化測試成果。
HTMLTestRunner模塊下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html
將下載的文件保存在C:\Python27\Lib目錄下即可。
? ? 2.先定義new_file()函數(shù)(找到某目錄最新文件),調(diào)用new_file()函數(shù)找到測試報告目錄下最新生成的測試報告,返回最新測試報告的路徑。
? ? 3.先定義send_email()函數(shù)(發(fā)送指定路徑下某文件的郵件),將得到的最新測試報告的完整路徑傳給send_email()函數(shù),實現(xiàn)發(fā)郵件功能。
? ? 關(guān)于發(fā)郵件功能,也可以參考我另外一篇博文:Python自動發(fā)郵件總結(jié)及實例說明
?
? ? 代碼如下: 注釋中包括實現(xiàn)的過程說明以及一些在測試過程中遇到的問題。
? ? 文件命名為runtest_htmltestrunner_autosendemail.py
# coding=utf-8 ''' Created on 2016-7-26 @author: Jennifer Project:整合自動發(fā)郵件功能,執(zhí)行測試用例生成最新測試報告,取最新的測試報告,發(fā)送最新測試報告 問題,郵件始終不能顯示html:將電腦時間改為北京時間即可 ''' import unittest from HTMLTestRunner import HTMLTestRunner import time import os import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header #2.定義:取最新測試報告 def new_file(test_dir): #列舉test_dir目錄下的所有文件,結(jié)果以列表形式返回。 lists=os.listdir(test_dir) #sort按key的關(guān)鍵字進(jìn)行排序,lambda的入?yún)n為lists列表的元素,獲取文件的最后修改時間 #最后對lists元素,按文件修改時間大小從小到大排序。 lists.sort(key=lambda fn:os.path.getmtime(test_dir+'\\'+fn)) #獲取最新文件的絕對路徑 file_path=os.path.join(test_dir,lists[-1]) # L=file_path.split('\\') # file_path='\\\\'.join(L) return file_path #3.定義:發(fā)送郵件,發(fā)送最新測試報告html def send_email(newfile): #打開文件 f=open(newfile,'rb') #讀取文件內(nèi)容 mail_body=f.read() #調(diào)試使用 # print u'打印' # print mail_body #關(guān)閉文件 f.close() #發(fā)送郵箱服務(wù)器 smtpserver = 'smtp.163.com' #發(fā)送郵箱用戶名/密碼 user = 'XXX@163.com' password='XXX' #發(fā)送郵箱 sender='XXX@163.com' #多個接收郵箱,單個收件人的話,直接是receiver='XXX@126.com' receiver=['XXX@126.com','XXX@126.com','XXX@doov.com.cn'] #發(fā)送郵件主題 subject = '自動定時發(fā)送測試報告20160808' #編寫 HTML類型的郵件正文 #MIMEText這個效果和下方用MIMEMultipart效果是一致的,已通過。 # msg = MIMEText(mail_body,'html','utf-8') msg=MIMEMultipart('mixed') #注意:由于msg_html在msg_plain后面,所以msg_html以附件的形式出現(xiàn) # text = "Dear all!\nThe attachment is new testreport.\nPlease check it." #中文測試ok # text = "Dear all!\n附件是最新的測試報告。\n麻煩下載下來看,用火狐瀏覽器打開查看。\n請知悉,謝謝。" # msg_plain = MIMEText(text,'plain', 'utf-8') # msg.attach(msg_plain) msg_html1 = MIMEText(mail_body,'html','utf-8') msg.attach(msg_html1) msg_html = MIMEText(mail_body,'html','utf-8') msg_html["Content-Disposition"] = 'attachment; filename="TestReport.html"' msg.attach(msg_html) #以附件的方式發(fā)送:但是會報554,倍163退信。--此路不通。 # msg_html = MIMEText(mail_body,'base64','utf-8') # msg_html["Content-Type"] = 'application/octet-stream' # msg_html.add_header('Content-Disposition', 'attachment', filename='testreport.html') # msg.attach(msg_html) #要加上msg['From']這句話,否則會報554的錯誤。 #要在163有限設(shè)置授權(quán)碼(即客戶端的密碼),否則會報535 msg['From'] = 'XXX@163.com' # msg['To'] = 'XXX@doov.com.cn' #多個收件人 msg['To'] = ";".join(receiver) msg['Subject']=Header(subject,'utf-8') #連接發(fā)送郵件 smtp=smtplib.SMTP() smtp.connect(smtpserver,25) smtp.login(user, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit() if __name__=='__main__': print '=====AutoTest Start======' #1.執(zhí)行測試用例,生成最新的測試用例 #指定測試用例為當(dāng)前文件夾下的test_case目錄 #如果用/可以不用r # test_dir='./test_case' #Windows的cmd執(zhí)行:python "D:\system files\workspace\selenium\test_project\runtest_htmltestrunner_autosendemail.py" #不用絕對路徑會報:ImportError: Start directory is not importable: './test_case' test_dir = 'D:\\system files\\workspace\\selenium\\test_project\\test_case' #知道測試報告的路徑 test_report_dir='D:\\pythontest\\testresult' discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py') now=time.strftime('%Y-%m-%d_%H_%M_%S_') filename = test_report_dir+'\\'+ now + 'result.html' fp=open(filename ,'wb') #需屏蔽fp中的中文文字說明。否則在windows下執(zhí)行會報:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 553: ordinal not in range(128) runner = HTMLTestRunner(stream=fp,title=u'測試報告',description=u'用例執(zhí)行情況:') runner.run(discover) #注意:調(diào)用函數(shù)一定要加括號,一個括號害死個人,哎,查了幾天的問題,才發(fā)現(xiàn)導(dǎo)致html文件始終顯示空白,就是因為close函數(shù)調(diào)用不正確,漏了括號。 fp.close() #2.取最新測試報告 new_report=new_file(test_report_dir) #調(diào)試用的 # print new_report #3.發(fā)送郵件,發(fā)送最新測試報告html send_email(new_report) print '=====AutoTest Over======'
? ? 直接在eclipse運(yùn)行,運(yùn)行結(jié)果如下:
? ? ..表示兩個測試用例都執(zhí)行通過。
?
三、定時執(zhí)行測試用例
點擊返回目錄
方案一: 直接使用Windows任務(wù)計劃執(zhí)行Python測試腳本。
1.創(chuàng)建runner.bat
? ? 由于runtest_htmltestrunner_autosendemail.py腳本目錄為D:\system files\workspace\selenium\test_project,
? ? 所以在該目錄下創(chuàng)建runner.bat,runner.bat的內(nèi)容如下:
? ? python runtest_htmltestrunner_autosendemail.py
? ? 建議:可以事先在cmd命令行下執(zhí)行runtest_htmltestrunner_autosendemail.py,確保該腳本能夠在Windows下正常運(yùn)行。如不能正常運(yùn)行,請繼續(xù)調(diào)試,找出問題,直到能夠正常運(yùn)行。如下:
2.創(chuàng)建任務(wù)計劃
2.1右鍵計算機(jī),點擊管理,點擊任務(wù)計劃程序,再點擊右方的創(chuàng)建任務(wù)。
2.2常規(guī)中,填寫名稱,如:定時執(zhí)行Python腳本
? ? 觸發(fā)器中,指定執(zhí)行腳本時間。
? ? 最重要的是操作設(shè)置:
? ? 程序和腳本填寫runner.bat這個文件的名稱
? ? 起始于填寫runner.bat所在路徑,D:\system files\workspace\selenium\test_project
? ? 如下:
3.查看
? ? 在任務(wù)計劃程序庫中,就會出現(xiàn)該任務(wù)。
?
方案二: 使用Jenkins定時執(zhí)行腳本
? ??Jenkins是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,所以可用于定時執(zhí)行python腳本。
環(huán)境準(zhǔn)備: jdk1.7及以上+Jenkins[+tomcat(可選)]
? ? Jenkins的安裝可以通過tomcat作為容器安裝,由于Jenkins包就自帶了servlet,所以我們只需要下載安裝就可以直接啟動。 ?
? ? jenkins下載地址:http://jenkins-ci.org ? 選擇LTS(長期支持的版本),比較穩(wěn)定,下載war包。
第一種啟動方法,切換到j(luò)enkins.war存放的目錄(隨便哪個目錄),輸入如下命令:
> java -jar jenkins.war ? #這樣的話默認(rèn)端口是8080
若要指定端口,則:
>java -jar jenkins.war --httpPort=8080
然后在瀏覽器中(推薦用火狐)輸入localhost:8080,localhost可以是本機(jī)的ip,也可以是計算機(jī)名。就可以打開jenkins.
?
我就是用第一種方法安裝Jenkins。
?
第二種方法是用tomcat打開
tomcat下載地址:http://tomcat.apache.org/
解壓tomcat到某個目錄,如D:\tomcat9,進(jìn)入tomcat下的/bin目錄,啟動tomcat:即雙擊startup.bat文件
?
將jenkins.war文件放入tomcat下的webapps目錄下,啟動jenkins時,會自動在webapps目錄下建立jenkins目錄,所以在地址欄上需要輸入的地址于上一種方法有點不一樣。
?
項目配置
點擊左方的“新建”。
下方為配置說明:
?
說明:日程表依次是 分鐘 小時 日 月 星期
*:表示每,每分鐘,每小時,每天,每月,每星期等
, :表示指定列表范圍。
- :表示區(qū)間范圍?
所以0 1 * * ?1-5 表示 每個月的星期一到星期五,凌晨一點定時執(zhí)行腳本。
說明:執(zhí)行腳本的命令。
上面配置完成后點擊保存即可。
?
立即構(gòu)建
可先手動構(gòu)建項目,查看項目是否能夠執(zhí)行通過。
點擊左方的“立即構(gòu)建”
?構(gòu)建完成后,Build History就會有一條記錄。
點擊這條歷史記錄進(jìn)去
再點擊Console Output,可查看到日志,F(xiàn)inished: SUCCESS,說明已成功。
?
?
四、成果驗收
點擊返回目錄
? ? 然后只需要靜靜的等待,測試報告郵件的到來。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
