一、日志作用

  • 调试程序
  • 了解系统程序运行的情况,是否正常
  • 系统程序运行故障分析与问题定位
  • 用来做用户行为分析和数据统计

二、为项目添加日志

└── utils
├── log_utils.py
└── se_utils.py

log_utils.py

import logging.handlers
import time class GetLogger():
logger = None @classmethod
def get_logger(cls):
if cls.logger == None:
# 日志器实例
cls.logger = logging.getLogger() # 设置日志级别
cls.logger .setLevel(level=logging.INFO) # 控制台处理器实例
ch = logging.StreamHandler() # 以时间切分日志文件处理器
filename = '../logs' + '/' + time.strftime('%Y%m%d') + 'WebUiTestLog.log'
th = logging.handlers.TimedRotatingFileHandler(filename=filename, when='midnight', interval=1,
backupCount=30, encoding='utf-8') # 设置日志格式
fmt = "%(asctime)s %(levelname)s [%(name)s] [filename: %(filename)s - moudle: %(module)s - func: %(funcName)s %(lineno)d line] - %(message)s"
fm = logging.Formatter(fmt) # 将日志格式添加到处理器
ch.setFormatter(fm)
th.setFormatter(fm) # 将处理器添加到日志器
cls.logger .addHandler(ch)
cls.logger .addHandler(th)
return cls.logger

se_utils.py 添加浏览器启动和关闭的日志

from selenium import webdriver

from utils.log_utils import GetLogger

logger = GetLogger.get_logger()

class Driver():
_driver = None @classmethod
def get_driver(cls, browser_name='Chrome'):
if cls._driver == None:
logger.info('正在打开浏览器.....')
if browser_name == 'Chrome':
cls._driver = webdriver.Chrome()
elif browser_name == 'Firefox':
cls._driver = webdriver.Firefox()
elif browser_name == 'Safari':
cls._driver == webdriver.Safari()
elif browser_name == 'Opera':
cls._driver == webdriver.Opera()
elif browser_name == 'edge':
cls._driver == webdriver.Edge()
elif browser_name == 'Ie':
cls._driver == webdriver.Ie()
else:
raise NameError(
"Not found %s browser,You can enter 'Chrome', 'Firefox', 'Ie', 'Edge', 'Safari',Opera" % browser_name)
logger.info('打开{}浏览器'.format(cls._driver.name)) return cls._driver @classmethod
def quit_driver(cls):
if cls._driver:
logger.info('正在关闭{}浏览器'.format(cls._driver.name))
cls._driver.quit()
logger.info('已关闭{}浏览器'.format(cls._driver.name)) cls._driver = None

base_page.py 添加定位信息的日志

    def find_element(self, locator):
try:
WebDriverWait(driver=self.driver, timeout=TIMEOUT, poll_frequency=POLL_FREQUENCY).until(
EC.visibility_of_element_located(locator))
return self.driver.find_element(*locator)
except Exception as e:
msg = "元素定位超时 {}: {}".format(locator[0], locator[-1])
logger.error(msg)
raise TimeoutException(msg)

更多日志信息请根据例子麻烦自行添加

Web自动化测试项目(七)日志的更多相关文章

  1. Web自动化测试项目搭建目录

    Web自动化测试项目搭建(一) 需求与设计 Web自动化测试项目(二)BasePage实现 Web自动化测试项目(三)用例的组织与运行 Web自动化测试项目(四)测试报告 Web自动化测试项目(五)测 ...

  2. Web自动化测试项目(四)测试报告

    测试报告生成 使用HTMLTestRunner 生成测试报告 本文使用的 HTMLTestRunner 来源于github: https://github.com/githublitao/HTMLTe ...

  3. Web自动化测试项目(五)测试结果通知

    一.邮件通知 使用第三方邮件发送库yagmail github地址:https://github.com/kootenpv/yagmail 安装 pip3 install yagmail demo.p ...

  4. Web自动化测试项目(二)BasePage实现

    一.BasePage介绍 创建一个BasePage类,对Selenium Api进行二次封装 为了快速创建项目并投产,用到的Selenium Api才进行封装,没用到的则不封装 优先封装最重要的几个方 ...

  5. Web自动化测试项目搭建(一) 需求与设计

    一.项目需求 测试/生产环境更新后,自动化回归测试 项目易于维护和运行 支持多种测试策略 支持可视化测试报告 运行结果,支持多种方式通知相关人员 可定时/触发的方式运行自动化测试用例 二.设计 2.1 ...

  6. Web自动化测试项目(六)多环境执行

    需求 使用命令行运行脚本,可以指定测试/预发布/生产环境的url,如果找不到该环境变量则默认为测试环境 python3 xxxxxx.py test 修改constants.py # DOMAIN = ...

  7. Web自动化测试项目(三)用例的组织与运行

    一.Unittest用例组织 在test_case目录下创建test*.py,组织测试用例 ├── test_case │   ├── __init__.py │   └── test_login.p ...

  8. 怎样才能做好软件测试——Python自动化测试工程师七年感悟

    即使不想在文章的开头过分的正经严肃,但这是一个十分正经技术类规划类的分享.不讲笑话也不讲故事,直接进入主题. 如何学好软件测试?反推一下作为一名优秀的软件测试工程师需要什么能力.   学习测试讲究实践 ...

  9. 20、什么样的项目适合Web自动化测试

    1.什么是Web自动化测试?概念:让程序代替人为自动验证Web项目功能的过程 2.什么Web项目适合做自动化测试 1.需求变动不频繁 2.项目周期长 3.项目需要回归测试 3.如阿进行Web自动化测试 ...

随机推荐

  1. 使用easyExcel遇到的坑

    最近有个功能,用easyExcel代替poi ,这个确实方便了不少,但是使用easyExcel也踩到了很多坑,在这里记录下easyExcel存在的问题,希望阅读这篇文档的人,可以更好的避免这些. 1. ...

  2. phpqrcode生成任意尺寸的二维码

    在Thinkphp中整合phpqrcode用于生成二维码,其代码如下: vendor("phpqrcode.phpqrcode"); QRcode::png('http://www ...

  3. 从0开发3D引擎(一):开篇

    介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.最小功能集合(MVP)" 的3D引擎. 本系列的素材来自我们的产品 ...

  4. 洛谷$P4768\ [NOI2018]$归程 $kruscal$重构树

    正解:$kruscal$重构树 解题报告: 传送门$QwQ$ 语文不好选手没有人权$TT$连题目都看不懂真的要哭了$kk$ 所以先放个题目大意?就说给定一个$n$个点,$m$条边的图,每条边有长度和海 ...

  5. $Poj2083/AcWing118\ Fractal$ 模拟

    $AcWing$ $Sol$ 一年前做过差不多的南蛮图腾,当时做出来还是很有成就感的$OvO$ $N<=7$,就是模拟模拟,预处理一下,$over$ $Code$ #include<bit ...

  6. 2020了你还不会Java8新特性?(五)收集器比较器用法详解及源码剖析

    收集器用法详解与多级分组和分区 为什么在collectors类中定义一个静态内部类? static class CollectorImpl<T, A, R> implements Coll ...

  7. spring之通过注解方式配置Bean(一)

    (1)组件扫描:spring能够从classpath下自动扫描.侦测和实例化具有特定注解的组件. (2)特定组件包括: @Component:基本注解,标识一个受spring管理的组件: @Respo ...

  8. red note8 pro谷歌套件

    谷歌核心Apps(即Google官方应用“全家桶”),包括YouTube,Google Now,Google Play store,Google Play Games,Google Maps等: 基于 ...

  9. 由数据迁移至MongoDB导致的数据不一致问题及解决方案

    故事背景 企业现状 2019年年初,我接到了一个神秘电话,电话那头竟然准确的说出了我的昵称:上海小胖. 我想这事情不简单,就回了句:您好,我是小胖,请问您是? "我就是刚刚加了你微信的 xx ...

  10. hdfs/hbase 程序利用Kerberos认证超过ticket_lifetime期限后异常

    问题描述 业务需要一个长期运行的程序,将上传的文件存放至HDFS,程序启动后,刚开始一切正常,执行一段时间(一般是一天,有的现场是三天),就会出现认证错误,用的JDK是1.8,hadoop-clien ...