今天筆者就要概括總結下一整套測試流程,從無到有,實現零突破,包括如何編寫測試用例,定時執行測試用例,查找最新生成的測試報告文件,自動發送最新測試報告郵件,一整套完整的測試流程。之後各位只要着重如何編寫測試用例便可,其餘模板能夠套用的,但願幫助到你們。html
目錄java
1、編寫測試用例python
2、執行測試用例,查找最新測試用例,自動發送測試報告web
3、定時執行測試用例apache
3.1方案一:Windows任務計劃windows
3.2方案二:Jenkins持續集成瀏覽器
4、成果驗收tomcat
環境準備:服務器
操做系統:Windows7app
集成開發環境:eclipse+pydev
1、編寫測試用例
點擊返回目錄
能夠直接使用Python自帶的單元測試框架unittest來編寫自動化測試用例,利用其組織測試用例,斷言預期結果,以及批量執行測試用例等功能,能夠很好的進行Web自動化測試的開發。
能夠直接查看我另一篇博文總結:unittest單元測試框架總結
裏邊詳細總結了使用unittest框架編寫測試用例思路(模板)和使用unittest框架編寫測試用例實例。
目錄結構以下組織:
如上圖:test_case目錄下有兩個測試用例,其中test_baidu.py實例代碼在博文「unittest單元測試框架總結」中有貼出。其餘實例,能夠參考模板實現,就不所有貼出代碼了。
而此次須要測試的就是test_baidu.py和test_youdao.py這兩個測試用例。
2、執行測試用例,查找最新測試用例,自動發送測試報告
點擊返回目錄
整個代碼執行過程能夠分紅三個步驟:
1.經過unittest框架的discover()找到匹配的測試用例(以test_開頭的腳本),由HTMLTestRunner的run()方法執行測試用例並生成最新測試報告。HTMLTestRunner是Python標準卡unittest單元測試框架的一個擴展,主要用於生成HTML測試報告,以便生成一份通俗易懂的測試報告來展現自動化測試成果。
HTMLTestRunner模塊下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html
將下載的文件保存在C:\Python27\Lib目錄下便可。
2.先定義new_file()函數(找到某目錄最新文件),調用new_file()函數找到測試報告目錄下最新生成的測試報告,返回最新測試報告的路徑。
3.先定義send_email()函數(發送指定路徑下某文件的郵件),將獲得的最新測試報告的完整路徑傳給send_email()函數,實現發郵件功能。
關於發郵件功能,也能夠參考我另一篇博文:Python自動發郵件總結及實例說明
代碼以下:註釋中包括實現的過程說明以及一些在測試過程當中遇到的問題。
文件命名爲runtest_htmltestrunner_autosendemail.py
# coding=utf-8
'''
Created on 2016-7-26
@author: Jennifer
Project:整合自動發郵件功能,執行測試用例生成最新測試報告,取最新的測試報告,發送最新測試報告
問題,郵件始終不能顯示html:將電腦時間改成北京時間便可
'''
import unittestfrom HTMLTestRunner import HTMLTestRunnerimport timeimport osimport smtplibfromemail.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.headerimport Header#2.定義:取最新測試報告
def new_file(test_dir):
#列舉test_dir目錄下的全部文件,結果以列表形式返回。
lists=os.listdir(test_dir)
#sort按key的關鍵字進行排序,lambda的入參fn爲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.定義:發送郵件,發送最新測試報告html
def send_email(newfile):
#打開文件
f=open(newfile,'rb')
#讀取文件內容
mail_body=f.read()#調試使用
# print u'打印'
# print mail_body
#關閉文件
f.close()
#發送郵箱服務器
smtpserver = 'smtp.163.com'
#發送郵箱用戶名/密碼
user = 'XXX@163.com'
password='XXX'
#發送郵箱
sender='XXX@163.com'
#多個接收郵箱,單個收件人的話,直接是receiver='XXX@126.com'
receiver=['XXX@126.com','XXX@126.com','XXX@doov.com.cn']
#發送郵件主題
subject = '自動定時發送測試報告20160808'
#編寫 HTML類型的郵件正文
#MIMEText這個效果和下方用MIMEMultipart效果是一致的,已經過。
# msg = MIMEText(mail_body,'html','utf-8')
msg=MIMEMultipart('mixed')
#注意:因爲msg_html在msg_plain後面,因此msg_html以附件的形式出現
# 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
msg.attach(msg_html1)
msg_html = MIMEText(mail_body,'html','utf-8') msg_html[
msg_html["Content-Disposition"] = 'attachment; filename="TestReport.html"'
msg.attach(msg_html)
#以附件的方式發送:可是會報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有限設置受權碼(即客戶端的密碼),不然會報535
msg['From'] = 'XXX@163.com <XXX@163.com>'
# msg['To'] = 'XXX@doov.com.cn'
#多個收件人
msg['To'] = ";".join(receiver) msg[
msg['Subject']=Header(subject,'utf-8') #鏈接發送郵件
smtp=smtplib.SMTP() smtp.connect(smtpserver,
smtp.connect(smtpserver,25) smtp.login(user, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit() smtp.login(user, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()if __name__=='__main__':
print '=====AutoTest Start======'
#1.執行測試用例,生成最新的測試用例
#指定測試用例爲當前文件夾下的test_case目錄
#若是用/能夠不用r
# test_dir='./test_case'
#Windows的cmd執行: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
now=time.strftime('%Y-%m-%d_%H_%M_%S_') filename
filename = test_report_dir+'\\'+ now + 'result.html'
fp=open(filename ,'wb')#需屏蔽fp中的中文文字說明。不然在windows下執行會報:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 553: ordinal not in range(128)
runner = HTMLTestRunner(stream=fp,title=u'測試報告',description=u'用例執行狀況:') runner.run(discover)runner.run(discover)
#注意:調用函數必定要加括號,一個括號害死我的,哎,查了幾天的問題,才發現致使html文件始終顯示空白,就是由於close函數調用不正確,漏了括號。
fp.close()
#2.取最新測試報告
new_report=new_file(test_report_dir)#調試用的
# print new_report
#3.發送郵件,發送最新測試報告html
send_email(new_report)
print '=====AutoTest Over======'
jenkins下載地址:http://jenkins-ci.org 選擇LTS(長期支持的版本),比較穩定,下載war包。
第一種啓動方法,切換到jenkins.war存放的目錄(隨便哪一個目錄),輸入以下命令:
> java -jar jenkins.war #這樣的話默認端口是8080
若要指定端口,則:
>java -jar jenkins.war --httpPort=8080
而後在瀏覽器中(推薦用火狐)輸入localhost:8080,localhost能夠是本機的ip,也能夠是計算機名。就能夠打開jenkins.
我就是用第一種方法安裝Jenkins。
第二種方法是用tomcat打開
tomcat下載地址:http://tomcat.apache.org/
解壓tomcat到某個目錄,如D:\tomcat9,進入tomcat下的/bin目錄,啓動tomcat:即雙擊startup.bat文件
將jenkins.war文件放入tomcat下的webapps目錄下,啓動jenkins時,會自動在webapps目錄下創建jenkins目錄,因此在地址欄上須要輸入的地址於上一種方法有點不同。
項目配置
點擊左方的「新建」。
直接在eclipse運行,運行結果以下:
..表示兩個測試用例都執行經過。
3、定時執行測試用例
點擊返回目錄
方案一:直接使用Windows任務計劃執行Python測試腳本。
1.建立runner.bat
因爲runtest_htmltestrunner_autosendemail.py腳本目錄爲D:\system files\workspace\selenium\test_project,
因此在該目錄下建立runner.bat,runner.bat的內容以下:
python runtest_htmltestrunner_autosendemail.py
建議:能夠事先在cmd命令行下執行runtest_htmltestrunner_autosendemail.py,確保該腳本可以在Windows下正常運行。如不能正常運行,請繼續調試,找出問題,直到可以正常運行。以下:
2.建立任務計劃
2.1右鍵計算機,點擊管理,點擊任務計劃程序,再點擊右方的建立任務。
2.2常規中,填寫名稱,如:定時執行Python腳本
觸發器中,指定執行腳本時間。
最重要的是操做設置:
程序和腳本填寫runner.bat這個文件的名稱
起始於填寫runner.bat所在路徑,D:\system files\workspace\selenium\test_project
以下:
3.查看
在任務計劃程序庫中,就會出現該任務。
方案二:使用Jenkins定時執行腳本
Jenkins是基於Java開發的一種持續集成工具,用於監控持續重複的工做,因此可用於定時執行python腳本。
環境準備:jdk1.7及以上+Jenkins[+tomcat(可選)]
Jenkins的安裝能夠經過tomcat做爲容器安裝,因爲Jenkins包就自帶了servlet,因此咱們只須要下載安裝就能夠直接啓動。
下方爲配置說明:
說明:日程表依次是 分鐘 小時 日 月 星期
*:表示每,每分鐘,每小時,天天,每個月,每星期等
, :表示指定列表範圍。
- :表示區間範圍
因此0 1 * * 1-5 表示 每月的星期一到星期五,凌晨一點定時執行腳本。
說明:執行腳本的命令。
上面配置完成後點擊保存便可。
當即構建
可先手動構建項目,查看項目是否可以執行經過。
點擊左方的「當即構建」
構建完成後,Build History就會有一條記錄。
點擊這條歷史記錄進去
再點擊Console Output,可查看到日誌,Finished: SUCCESS,說明已成功。
4、成果驗收
點擊返回目錄
而後只須要靜靜的等待,測試報告郵件的到來。
同時也要感謝原創博主。