测试日志(初级)

一、日志基本应用

#日志:纪录系统运行的信息,记录系统发生的事件日志文件
#作用:了解系统运行的状态,去定位和分析错误问题

#debug:调试1级别
#info:系统正常运行2级别
#warning:警告信息程序有问题,但是他又不影响程序运行不会提Bug3级别默认的级别
#error:错误,出现问题,提bug4级别
#critical:严重的,快要崩溃
#常用:info,error
#反应出问题的严重程度


#logging能够设置日志级别生成日志信息,自带的不需要安装
importlogging

#设置日志级别
#logging.basicConfig(level=logging.DEBUG)

#想要生成日志信息调用日志级别

logging.debug("debug信息")
logging.error("erroe信息")
logging.info("info信息")
logging.warning("warning信息")
logging.critical("critical信息")

运行结果:

#设置日志级别
logging.basicConfig(level=logging.DEBUG)

运行结果:

格式字符串字段:

%(asctime)s  日志事件发生的时间-人类可读时间,如:2003_07_08 16:47:45,896

%(created)f  日志事件发生的事件-时间戳,就是当时调用time,time()函数返回的值

%(relativeCreated)d 日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用)

%(msecs)d 日志事件发生时间的毫秒部分

%(levelname)s 该日志记录的文字形式的日志级别('DEBUG','INFO','WARNING','ERROR','CRITICAL')

%(name)s 所使用的日志器名称,默认是'root',因为默认使用的是rootLogger

%(message)s 日志记录的文本内容,哦那个过msg % args计算得到的

%(pathname)s 调用日志记录函数的源码文件的全路径

%(filename)s pathname的文件名部分,包含文件后缀‘

%(module)s filename的名称部分,不包含文件后缀

%(lineo)d 调用日志记录函数的源代码所在的行号

%(funcName)s 调用日志记录函数的函数名

#日志:纪录系统运行的信息,记录系统发生的事件日志文件
#作用:了解系统运行的状态,去定位和分析错误问题

#debug:调试1级别
#info:系统正常运行2级别
#warning:警告信息程序有问题,但是他又不影响程序运行不会提Bug3级别默认的级别
#error:错误,出现问题,提bug4级别
#critical:严重的,快要崩溃
#常用:info,error
#反应出问题的严重程度


#logging能够设置日志级别生成日志信息,自带的不需要安装
importlogging

#生成日志信息生成时间文件名日志的状态类名方法名日志内容

fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'

#设置日志级别
logging.basicConfig(level=logging.DEBUG,format=fmt)

#想要生成日志信息调用日志级别
logging.debug("debug信息")
logging.error("erroe信息")
logging.info("info信息")
logging.warning("warning信息")
logging.critical("critical信息")

 运行结果:

日志信息只会保存在log.log文件里面,控制台不会输出日志信息,需要优化

二、日志在框架中如何应用

首先创建一个简单的自动化登录框架

Login_page.py  实现一个登录操作

from selenium import webdriver
from selenium.webdriver.common.by import By

from base_page import BasePage


classLoginPage(BasePage):
#采用POM思想,将元素定位拿出来找到输入框输入用户名和密码,找到登录按钮登录
#因为页面元素容易更改,所以将页面元素单独拎出来,方便后期修改
#页面元素
user=(By.NAME,'accounts')
pwd=(By.NAME,'pwd')
button=(By.NAME,'/html/body/div[4]/div/div[2]/form/div[3]/button')
#页面元素
url='http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html'

#页面的操作流程
deflogin(self,txt,pwd_):
#原本的写法:self.driver.find_element_by_name('accounts').sendkeys('666666')
#为了不写多余的代码,利用关键字驱动进行了封装
self.open(self.url)
self.max()
self.input(self.user,txt)
self.input(self.pwd,pwd_)
self.click(self.button)


if__name__=='__main__':
driver=webdriver.Chrome()
user='666666'
pwd='111111'
Ip=LoginPage(driver)
Ip.login(user,pwd)

如图所示:

Base_page.py  实现登录的关键字驱动

from selenium import webdriver
import logging


class BasePage:
#构造函数
def__init__(self,driver):
self.driver=driver

#访问url
def open(self,url):
self.driver.get(self.url)

#退出
def quit(self):
self.driver.quit()

#元素定位
def locator(self,loc):
returnself.driver.find_element(*loc)

#输入
def input(self,loc,txt):
self.locator(loc).send_keys(txt)

#点击
def click(self,loc):
self.locator(loc).click()

#窗体最大化
de fmax(self):
self.driver.maximize_window()

如何将日志添加到这个登录框架里面去

将输入操作点击操作等等添加到日志文件里面

调用logging类

from selenium import webdriver
#日志

#logging能够设置日志级别生成日志信息,自带的不需要安装
import logging

#生成日志信息生成时间文件名日志的状态类名方法名日志内容

fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'

#设置日志级别,日志格式,生成的日志文件保存到log.log
logging.basicConfig(level=logging.INFO,format=fmt,filename='./log.log')

class BasePage:
#构造函数
def__init__(self,driver):
logging.info("初始化driver{}".format(driver))
self.driver=driver

#访问url
def open(self,url):
logging.info("访问{}网址".format(url))
self.driver.get(self.url)

#退出
def quit(self):
logging.info("退出网址")
self.driver.quit()

#元素定位
def locator(self,loc):
logging.info("正在定位{}元素".format(loc))
returnself.driver.find_element(*loc)

#输入
def input(self,loc,txt):
logging.info("正在定位{}元素,输入{}内容".format(loc,txt))
self.locator(loc).send_keys(txt)
#点击
def click(self,loc):
logging.info("正在点击{}元素".format(loc))
self.locator(loc).click()

#窗体最大化
def max(self):
self.driver.maximize_window()

运行结果:显示密码错误

 

框架里面哪里要日志,在框架的底层,关键字驱动,登录的方法里面,方法正确try excepet捕获错误日志

三、优化日志模块

1、将日志单独写成一个封装的方法

注意方法是有返回值的

2、关键字驱动文件里面需要对日志文件进行调用

from selenium import webdriver
#logging能够设置日志级别生成日志信息,自带的不需要安装
#import logging
##生成日志信息生成时间文件名日志的状态类名方法名日志内容
#fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'
##设置日志级别,日志格式,生成的日志文件保存到log.log
#logging.basicConfig(level=logging.INFO,format=fmt,filename='./log.log')

from baselog import test_log

#实例化对象要顶格写
log=test_log()


class BasePage:
#构造函数
def__init__(self,driver):
#logging.info("初始化driver{}".format(driver))
log.info("初始化driver{}".format(driver))
self.driver=driver
#访问url
def open(self,url):
log.info("访问{}网址".format(url))
#logging.info("访问{}网址".format(url))
self.driver.get(self.url)
#退出
def quit(self):
#logging.info("退出网址")
log.info("退出网址")
self.driver.quit()
#元素定位
def locator(self,loc):
#logging.info("正在定位{}元素".format(loc))
log.info("正在定位{}元素".format(loc))
returnself.driver.find_element(*loc)
#输入
def input(self,loc,txt):
#logging.info("正在定位{}元素,输入{}内容".format(loc,txt))
log.info("正在定位{}元素,输入{}内容".format(loc,txt))
self.locator(loc).send_keys(txt)
#点击
def click(self,loc):
try:
#logging.info("正在点击{}元素".format(loc))
log.info("正在点击{}元素".format(loc))
self.locator(loc).click()
exceptExceptionase:
#logging.error('错误日志'%e)
log.error('错误日志'%e)
#窗体最大化
def max(self):
self.driver.maximize_window()

3、直接运行就可以了

继续优化

Baselog.py是对日志的一个基本应用,有一个问题,控制台没有日志输出,只有Log文件有

basicConfig 日志再去优化封装

#对于日志再优化封装


import logging

#创建一个日志器
logger=logging.getLogger()

#设置日志级别
logger.setLevel(logging.INFO)

#指定日志输出的目的地,控制台那要先创建一个控制台
#创建控制台处理器
sh=logging.StreamHandler()
#把日志信息放到控制台里面去
logger.addHandler(sh)

#控制台里面输出的日志信息有些是我们不需要的,有些是我们需要但没有的
#创建格式器
#生成日志信息生成时间文件名日志的状态类名方法名日志内容
fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'
formator=logging.Formatter(fmt)
#优化控制台格式
sh.setFormatter(formator)

#日志信息也要显示再log文件里面
#创建文本处理器,指定日志信息输出到文本处理器
fh=logging.FileHandler('./Log/log.log',encoding='utf-8')
logger.addHandler(fh)
#文本里面的日志格式也可以自己重新定义,这里没有重新定义,直接用上述定义好的格式
fh.setFormatter(formator)

logger.info('日志信息')

运行结果:

路径:../ 当前目录向上两级

./ 当前目录向上一级

/ 当前目录同级

优化好的日志文件,在框架中怎么使用?

1、日志文件中定义一个有返回值的方法 loggingtest.py

#对于日志再优化封装
import logging


def test_logging():
#创建一个日志器
logger=logging.getLogger()

#设置日志级别
logger.setLevel(logging.INFO)

#指定日志输出的目的地,控制台那要先创建一个控制台
#创建控制台处理器
sh=logging.StreamHandler()
#把日志信息放到控制台里面去
logger.addHandler(sh)

#控制台里面输出的日志信息有些是我们不需要的,有些是我们需要但没有的
#创建格式器
#生成日志信息生成时间文件名日志的状态类名方法名日志内容
fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'
formator=logging.Formatter(fmt)
#优化控制台格式
sh.setFormatter(formator)

#日志信息也要显示再log文件里面
#创建文本处理器,指定日志信息输出到文本处理器
fh=logging.FileHandler('./Log/log.log',encoding='utf-8')
logger.addHandler(fh)
#文本里面的日志格式也可以自己重新定义,这里没有重新定义,直接用上述定义好的格式
fh.setFormatter(formator)

return logger

#logger.info('日志信息')

2、在框架底层(关键字驱动层)引用方法 basepage.py

下面的信息不变

四、启动的时候报了一个错,没有登录成功

 

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="/html/body/div[4]/div/div[2]/form/div[3]/button"]"}

  (Session info: chrome=92.0.4515.159)

常见的例外情况。NoSuchElementException:消息:没有这样的元素:无法找到元素:{“方法”:“css选择器”,“选择器”:“[name=“/html/body/div[4]/div/div[2]/form/div[3]/button”]”

(会话信息:chrome=92.0.4515.159)

自己登录也没有登录成功,大概率的问题是服务器问题

猜你喜欢

转载自blog.csdn.net/Lynn1111111/article/details/124860845