前言html
有不少小夥伴吵着要完整的項目源碼,完整的項目屬於公司內部的代碼,這個是無法分享的,違反職業道德了,就算別人分享了,也只適用於本公司內部的業務。python
因此用例的代碼仍是得本身去一個個寫,我只能分享項目框架,只能幫大家到這了。mysql
1、項目結構sql
1.新建一個工程(必定要建立工程),工程名稱本身定義,如:yoyo_jiekouoracle
2.在工程的跟目錄新建一個腳本:run_main.py,用來執行所有用例框架
3.在工程下建立如下幾個pakage包:函數
--case:這個包放test開頭的測試用例,也能夠放一些封裝接口的方法,如:loginblog(若是封裝的接口比較多,也能夠單獨放一個包)測試
--common:這個包放一些公共的方法,如:讀取excel文件方法,讀取mysql、oracle,logger.py這個是封裝日誌的輸入加密
--config:cfg.ini這裏是配置文件,如郵箱的一些參數:收件人,發件人,密碼等,readConfig.py用於讀取配置文件spa
--logs:這裏存放日誌信息
--report:這裏存放測試報告
2、run_main
第一步:用discover方法加載全部的測試用例
1.cur_path這個參數是讀取當前這個腳本的真實路徑,也就是run_main.py的真實路徑
2.caseName="case"這個case是存放測試用例的文件夾,若是沒有的話,自動建立。若是想運行其它文件夾的用例,就改下caseName這個參數值
3.rule="test*.py"這個是匹配用例腳本名稱的規則,默認匹配test開頭的全部用例
第二步:生成HTML報告
1.把上一步加載到用例的參數傳入這個函數,測試報告的文件名稱默認report文件夾:reportName="report
2.若是沒有這個report文件夾也不要緊,能夠自動建立的
第三步:獲取最新的測試報告
1.若是第二步生成的測試報告加了時間戳,想找到最新的文件就用第三步
2.若是第二步不加時間戳,只是生成result.html,那這一步其實沒卵用,能夠忽略
(我的以爲報告用一個名稱result.html就行,新的自動覆蓋舊的)
第四步:發送測試報告到郵箱
1.像QQ郵箱這種ssl加密的就走SMTP_SSL,用受權碼登陸
2.其它郵箱就正常帳號密碼登陸,走SMTP
最後執行代碼
1.這裏郵箱的內容讀的配置文件
3、config配置
1.cfg.ini打開,這裏寫配置文件內容
2.用readConfig.py讀取配置文件
3.讀取的內容就是傳入第二步操做裏面須要調用郵箱的配置信息
3、logger
1.logger.py這個文件放到common目錄下,封裝日誌文件的讀取
2.日誌保存到logs文件夾
3.封裝代碼
# coding:utf-8
import logging, time
import os
# log_path是存放日誌的路徑
cur_path = os.path.dirname(os.path.realpath(__file__))
log_path = os.path.join(os.path.dirname(cur_path), 'logs')
# 若是不存在這個logs文件夾,就自動建立一個
if not os.path.exists(log_path):os.mkdir(log_path)
class Log():
def __init__(self):
# 文件的命名
self.logname = os.path.join(log_path, '%s.log'%time.strftime('%Y_%m_%d'))
self.logger = logging.getLogger()
self.logger.setLevel(logging.DEBUG)
# 日誌輸出格式
self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s] - %(levelname)s: %(message)s')
def __console(self, level, message):
# 建立一個FileHandler,用於寫到本地
fh = logging.FileHandler(self.logname, 'a') # 追加模式 這個是python2的
# fh = logging.FileHandler(self.logname, 'a', encoding='utf-8') # 這個是python3的
fh.setLevel(logging.DEBUG)
fh.setFormatter(self.formatter)
self.logger.addHandler(fh)
# 建立一個StreamHandler,用於輸出到控制檯
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(self.formatter)
self.logger.addHandler(ch)
if level == 'info':
self.logger.info(message)
elif level == 'debug':
self.logger.debug(message)
elif level == 'warning':
self.logger.warning(message)
elif level == 'error':
self.logger.error(message)
# 這兩行代碼是爲了不日誌輸出重複問題
self.logger.removeHandler(ch)
self.logger.removeHandler(fh)
# 關閉打開的文件
fh.close()
def debug(self, message):
self.__console('debug', message)
def info(self, message):
self.__console('info', message)
def warning(self, message):
self.__console('warning', message)
def error(self, message):
self.__console('error', message)
if __name__ == "__main__":
log = Log()
log.info("---測試開始----")
log.info("操做步驟1,2,3")
log.warning("----測試結束----")
4、case放用例
1.經常使用的接口,須要檢查被調用的單獨封裝處理,如登陸等
2.test開頭的用例
5、logs日誌查看
1.運行完後日志都會收集到logs文件夾以日期命名
6、生成測試報告
1.這裏調用的是HTMLTestRunner生成html的測試報告
7、發送報告到郵箱
1.運行run_main.py就會自動生成報告,而後發送到郵箱了
(這裏QQ郵箱的展現是有問題的,通常用企業郵箱的話,是能夠正常展現的)
(源代碼能夠經過如下連接購買,7.2章節能夠獲取下載地址)
---------------------------------python接口自動化完整版-------------------------
全書購買地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695
做者:上海-悠悠 QQ交流羣:588402570
也能夠關注下個人我的公衆號: