前言
脚本运行的时候,有时候不知道用例的执行情况,这时候可以加入日志,这样出现问题后方便查阅,也容易排查哪些用例执行了,哪些没有执行。
一、封装logging模块
1.关于logging日志的介绍,我这里就不详细讲解了,主要有两大功能,一个是控制台的输出,一个是保存到本地文件
2.先封装logging模块,保存到common文件夹命名为logger.py,以便于调用
1 # coding:utf-8 2 import logging,time,os 3 # 这个是日志保存本地的路径 4 log_path = "D:\\test\\newp\\report" 5 class Log: 6 def __init__(self): 7 # 文件的命名 8 self.logname = os.path.join(log_path, '%s.log'%time.strftime('%Y_%m_%d')) 9 self.logger = logging.getLogger() 10 self.logger.setLevel(logging.DEBUG) 11 # 日志输出格式 12 self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s[line:%(lineno)d] - fuc:%(funcName)s- %(levelname)s: %(message)s') 13 def __console(self, level, message): 14 # 创建一个FileHandler,用于写到本地 15 fh = logging.FileHandler(self.logname, 'a') # 追加模式 16 fh.setLevel(logging.DEBUG) 17 fh.setFormatter(self.formatter) 18 self.logger.addHandler(fh) 19 20 # 创建一个StreamHandler,用于输出到控制台 21 ch = logging.StreamHandler() 22 ch.setLevel(logging.DEBUG) 23 ch.setFormatter(self.formatter) 24 self.logger.addHandler(ch) 25 26 if level == 'info': 27 self.logger.info(message) 28 elif level == 'debug': 29 self.logger.debug(message) 30 elif level == 'warning': 31 self.logger.warning(message) 32 elif level == 'error': 33 self.logger.error(message) 34 # 这两行代码是为了避免日志输出重复问题 35 self.logger.removeHandler(ch) 36 self.logger.removeHandler(fh) 37 # 关闭打开的文件 38 fh.close() 39 40 def debug(self, message): 41 self.__console('debug', message) 42 43 def info(self, message): 44 self.__console('info', message) 45 46 def warning(self, message): 47 self.__console('warning', message) 48 49 def error(self, message): 50 self.__console('error', message) 51 52 if __name__ == "__main__": 53 log = Log() 54 log.info("---测试开始----") 55 log.info("输入密码") 56 log.warning("----测试结束----")
二、log保存本地
1.logger模块的封装在9.2章节,我的用例参考目录如下
2.先设置保存log到本地的文件路径地址,如:log_path = "D:\\test\\newp\\report"
三、用例代码
以下是简单的一个百度的搜索案例仅供参考
1 # coding:utf-8 2 3 import unittest,time 4 5 from common.logger import Log 6 7 from selenium import webdriver 8 9 log = Log() 10 11 class Test(unittest.TestCase): 12 13 def setUp(self): 14 15 self.driver = webdriver.Firefox() 16 17 self.driver.get("https://www.baidu.com") 18 19 self.driver.implicitly_wait(30) 20 21 def test_01(self): 22 23 log.info("-------测试用例开始---------") 24 25 self.driver.find_element_by_id("kw").send_keys("yoyo") 26 27 log.info("输入内容:yoyo") 28 29 self.driver.find_element_by_id("su").click() 30 31 log.info("点击按钮:id = su") 32 33 time.sleep(2) 34 35 t = self.driver.title 36 37 log.info(u"获取title内容:%s"%t) 38 39 self.assertIn(u"百度搜索",t) 40 41 def tearDown(self): 42 43 self.driver.quit() 44 45 log.info("-------测试用例结束----------") 46 47 if __name__ == "__main__": 48 49 unittest.main()
四、运行结果:
1.执行run_all脚本(3.9章节)
2.打开存放日志文件的目录,找到log文件
3.打开报告,看到的效果如下