在实际的自动化测试代码调试过程中往往我们需要记录一些日志,一方面是打印到控制台便于我们调试代码,如果是持续集成的环境无人值守的话也是对测试执行过程的一个记录过程。
方法封装
新建一个Python文件, 并命名为ConstantConfig,然后在该文件中写入如下代码。
# 用于定义整个框架中所需要的全局常量值
# encoding = utf-8
import os
# 获取当前文件所在目录的父目录的绝对路径
parent_directory_path = os.path.abspath('..')
print(parent_directory_path)
# encoding = utf-8
import time
import logging
from Configuration.ConstantConfig import parent_directory_path
class Logger(object):
def __init__(self, logger):
"""
指定保存日志的文件路径,日志级别,以及调用文件
将日志存入到指定的文件中
:param logger:
"""
# 创建一个logger
self.logger = logging.getLogger(logger)
self.logger.setLevel(logging.DEBUG)
# 创建一个handler,用于写入日志文件
rq = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))
log_path = parent_directory_path + '/TestResult/TestLog/'
log_name = log_path + rq + '.log'
filehandler = logging.FileHandler(log_name)
filehandler.setLevel(logging.INFO)
# 再创建一个handler,用于输出到控制台
consolehandler = logging.StreamHandler()
consolehandler.setLevel(logging.INFO)
# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
filehandler.setFormatter(formatter)
consolehandler.setFormatter(formatter)
# 给logger添加handler
self.logger.addHandler(filehandler)
self.logger.addHandler(consolehandler)
def getlog(self):
return self.logger
新建一个名为TestLog的文件夹,用于存储生成的log文件
方法调用
testlogger = GetLog.Logger('Test_Advanced_Application').getlog()
class Test_Advanced_Application(unittest.TestCase):
def test_get_log(self):
testlogger.info("打开浏览器")
driver = webdriver.Chrome()
driver.maximize_window()
testlogger.info("最大化浏览器窗口。")
driver.implicitly_wait(10)
testlogger.info("打开百度首页。")
driver.get("https://www.baidu.com")
testlogger.info("暂停3秒。")
time.sleep(3)
testlogger.info("关闭并退出浏览器")
driver.quit()
with self.assertLogs(testlogger, level=20) as log:
testlogger.error("打开浏览器")
testlogger.info('关闭并退出浏览器')
self.assertEqual(log.output,
['ERROR:Test_Advanced_Application:打开浏览器',
'INFO:Test_Advanced_Application:关闭并退出浏览器']
)
执行结果
能看到执行过程中将我们的日志逐一打印到控制台的过程
然后再到我们创建的TestLog文件夹下查看日志文件,如果遇到乱码,如图11.13所示,不必慌张,是因为编码不匹配导致的,点击Reload in ‘GBK’,将编码格式转换成GBK即可正常显示
产生乱码的原因是因为项目设置中的File Encodings里,Global Encoding是UTF-8