一、項目結構
1.新建一個工程(一定要創建工程),工程名稱自己定義,如:yoyo_jiekou
2.在工程的跟目錄新建一個腳本:run_main.py,用來執行全部用例
3.在工程下創建以下幾個pakage包:
--case:這個包放test開頭的測試用例,也可以放一些封裝接口的方法,如:loginblog(如果封裝的接口比較多,也可以單獨放一個包)
--common:這個包放一些公共的方法,如:讀取excel文件方法,讀取mysql、oracle,logger.py這個是封裝日志的輸入
--config:cfg.ini這里是配置文件,如郵箱的一些參數:收件人,發件人,密碼等,readConfig.py用於讀取配置文件
--logs:這里存放日志信息
--report:這里存放測試報告
二、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.這里郵箱的內容讀的配置文件
三、config配置
1.cfg.ini打開,這里寫配置文件內容
2.用readConfig.py讀取配置文件
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("----測試結束----")
四、case放用例
1.常用的接口,需要檢查被調用的單獨封裝處理,如登錄等
2.test開頭的用例
五、logs日志查看
1.運行完后日志都會收集到logs文件夾以日期命名
六、生成測試報告
1.這里調用的是HTMLTestRunner生成html的測試報告
七、發送報告到郵箱
1.運行run_main.py就會自動生成報告,然后發送到郵箱了
(這里QQ郵箱的展示是有問題的,一般用企業郵箱的話,是可以正常展示的)
(源代碼可以通過以下鏈接購買,7.2章節可以獲取下載地址)
---------------------------------python接口自動化已出書-------------------------
全書購買地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695