一、封装日志方法和HTML报告方法:
common.py文件:
# encoding=utf-8
import os
import csv
base_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
log_path = base_path + os.sep + 'report' + os.sep + 'logs'
report_html = base_path + os.sep + 'html'
read_xlrd = base_path + os.sep + 'data'
class Common():
#封装日志方法
def get_logs(self,path = log_path):
import logging,time
#记录器:
logs_pan=logging.getLogger('test_find')
logs_pan.setLevel(logging.DEBUG)
logsFileName=path+os.sep+time.strftime('%Y-%m-%d %H_%M_%S')+'.log'
#处理器:
#处理器1
FileLogsHandler=logging.FileHandler(filename=logsFileName,mode='a',encoding='utf-8')
FileLogsHandler.setLevel(logging.DEBUG)
#处理器2
ConsoleLogHandler=logging.StreamHandler()
ConsoleLogHandler.setLevel(logging.DEBUG)
#格式化器——输出内容:
#1.格式
inp_fmt="时间:%(asctime)s|日志级别:%(levelname)s|%(filename)-10s 日志信息%(message)s"
datefmt='%Y-%m-%d %H:%M:%S'
#2.两个格式化器
fmt1=logging.Formatter(fmt=inp_fmt,datefmt=datefmt)
fmt2=logging.Formatter(fmt=inp_fmt)
#关联:
#关联1:处理器进行格式化输出
FileLogsHandler.setFormatter(fmt1)
ConsoleLogHandler.setFormatter(fmt2)
#关联2:记录器关联处理器,不然无法写入内容
logs_pan.addHandler(FileLogsHandler)
logs_pan.addHandler(ConsoleLogHandler)
#返回结果
return logs_pan
# 封装一个HTML报告方法
def GetHtmlResult(self,suite,title,path = report_html):
import HTMLTestRunner,time
path = path + '/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.html'
with open(path,'wb+') as f:
run = HTMLTestRunner.HTMLTestRunner(
stream=f,
description='测试描述:用户相关接口测试报告',
title = title
)
run.run(suite)
二、操作文件:
(一)情况一正常:没有引入日志文件
没有加上日志方法:正常运行
# encoding=utf-8
import json
import unittest
import ddt
import requests
#引入common
import py_unittest_ddt_request.commmon.common as common
# 拿到具体的文件数据
rd = [['北京'],['马克'],['华为']]
url='https://www.baidu.com/s'
@ddt.ddt #导入ddt模块
class Test_Baidu(unittest.TestCase):
@ddt.data(*rd)
@ddt.unpack
def test_find(self,wd): # 用例方法名开头必须已test pars参数为接收的表数据值
my_header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}
last_url=url+wd+f"{wd}"
self.go_find=requests.get(url=url,headers=my_header)
self.assertEqual(200,self.go_find.status_code)
if __name__ == '__main__':
load=unittest.TestLoader().loadTestsFromTestCase(Test_Baidu)
suite=unittest.TestSuite([load],)
common.Common().GetHtmlResult(suite,'查找测试')
(二)情况二:引入日志文件后(报错)
# encoding=utf-8
import json
import unittest
import ddt
import requests
import py_unittest_ddt_request.commmon.common as common
# 拿到具体的文件数据
rd = [['北京'],['马克'],['华为']]
url='https://www.baidu.com/s'
@ddt.ddt #导入ddt模块
class Test_Baidu(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None: # setupclass类方法 全部用例开始前执行一次
cls.logs = common.Common().get_logs() # 导入日志方法
cls.logs.debug('开始写入接口自动化测试用例')
@classmethod
def tearDownClass(cls) -> None:
cls.logs.debug('自动化接口用例结束')
def setUp(self) -> None:
self.logs.debug('开始本条接口用例')
def tearDown(self) -> None:
self.logs.debug('结束本条用例')
@ddt.data(*rd)
@ddt.unpack
def test_find(self,wd): # 用例方法名开头必须已test pars参数为接收的表数据值
my_header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}
last_url=url+wd+f"{wd}"
self.go_find=requests.get(url=url,headers=my_header)
self.assertEqual(200,self.go_find.status_code)
if __name__ == '__main__':
load=unittest.TestLoader().loadTestsFromTestCase(Test_Baidu)
suite=unittest.TestSuite([load],)
common.Common().GetHtmlResult(suite,'查找测试')
报错内容:
Failure
Traceback (most recent call last):
File "D:\python37\lib\unittest\suite.py", line 163, in _handleClassSetUp
setUpClass()
File "D:\py菜鸟\自动化\py_unittest_ddt_request\test_name.py", line 17, in setUpClass
cls.logs = common.Common().get_logs() # 导入日志方法
File "D:\py菜鸟\自动化\py_unittest_ddt_request\commmon\common.py", line 32, in get_logs
FileLogsHandler=logging.FileHandler(filename=logsFileName,mode='a',encoding='utf-8')
File "D:\python37\lib\logging\__init__.py", line 1087, in __init__
StreamHandler.__init__(self, self._open())
File "D:\python37\lib\logging\__init__.py", line 1116, in _open
return open(self.baseFilename, self.mode, encoding=self.encoding)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\py菜鸟\\自动化\\py_unittest_ddt_request\\report\\logs\\2023-03-15 11_43_41.log'
【截图】: