ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从0到1完成appium+pytest+allure框架-加入log

2022-01-10 01:32:43  阅读:151  来源: 互联网

标签:info appium log get self allure logger 日志


断言已经完成了,那么接下来我们就需要加入日志了

断言可以记录结果,判断case运行的成功或者失败,那么日志的作用就是记录每一步的操作,可以更清晰的看到是在哪一步产生的错误,更有利于我们在出现问题的时候定位问题。

而且有了这个日志之后,是会加到后面的测试报告中的。

日志我们就需要好好的了解一下logging这块儿了

logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。

filter:提供一种优雅的方式决定一个日志记录是否发送到handler。

formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。与log4j类似,logger,handler和日志消息的调用可以有具体的日志级别(Level),只有在日志消息的级别大于logger和handler的级别。
害,这是我百度的,具体啥意思我也不知道,给你们看看代码吧,我现在也只是自己边学边写的
# 获取日志
import logging


class Demo_Log:
def __init__(self):
# 创建日志器
self.logger = logging.getLogger(__name__)
# 设置日志级别
self.logger.setLevel(logging.INFO)
# 创建控制台处理器,代码运行时能够在控制台输出日志
t = logging.StreamHandler()
# 创建文本处理器,代码运行时将日志写入自己设置的文件,如果没有该文件会创建该文件
f = logging.FileHandler('../Log/log.txt', encoding='utf-8')
# 创建格式器,设置输出的日志的格式
format = logging.Formatter(
'%(asctime)s %(filename)s %(module)s %(funcName)s %(lineno)d %(levelname)s %(message)s')
t.setFormatter(format)
f.setFormatter(format)
self.logger.addHandler(t)
self.logger.addHandler(f)
# 清空日志内容
with open('../Log/log.txt', 'w') as file:
file.truncate()

def get_log(self):
这是固定格式,划重点,除了设置日志级别,变量,文件,写法是固定的。
代码我都有备注就不一一解释了,这里挑几个点说一下
1、日志级别
 
DEBUG     详细信息,只有诊断问题时才需要,就是一般的调试信息
  INFO      当程序运行时期望的一些信息
  WARNING 软件运行正常,但是可能会有一些预期之外的事件发生
  ERROR 由于一些严重问题导致软件一些功能出现问题
  CRITICAL 很严重的错误直接导致软件不能继续运行

默认的级别时WARNING,意味默认的级别下,显示的日志信息必须时>=WARNING的级别才会进行处理,这里我们通常都是使用的info,debug一般只有在报错的时候才会使用,就比如你不确定那里是不是正常的,可以试着try一下,把日志级别设置成debug

  2、格式器的常用参数

  %(acstime)s 时间
  %(filename)s 日志文件名
  %(funcName)s 调用日志的函数名
  %(levelname)s 日志的级别
  %(module)s 调用日志的模块名
  %(message)s 日志信息
  %(name)s logger的name,不写的话默认是root

还有一些其他的,用到的话可以参考官方文档

  3、清空日志

    上面写的清空日志的两行代码,固定的,文件路径和文件名可以改,但是写法不能改,file.truncate()的作用是,每次开始记录日志的时候,清空上一次的日志信息。

日志模块了解完之后,就是在代码中加入我们的日志

import yaml
from practice.Find_Element.Login_Element import UserLoginElement
from practice.Log.Demo_log import DemoLog
from selenium.webdriver.common.by import By



class Login(UserLoginElement):
# 登录

def get_login(self):
with open('../desired_caps.yaml', 'r', encoding='utf-8') as f:
dl = yaml.load(f, Loader=yaml.FullLoader)
mobile = dl['mobile']
password = dl['password']
log = TanBaoLog().get_log()
log.info('定位**元素,点击同意')
self.get_service_agreement().click()
log.info('定位**元素,点击同意')
self.get_personal_center().click()
log.info('定位手机号输入框,输入手机号')
self.get_input_mobile().send_keys(mobile)
log.info('定位密码输入框,输入密码')
self.get_input_password().send_keys(password)
log.info('定位**元素,点击同意')
self.get_privacy_agreement().click()
log.info('定位登录按钮,点击登录')
self.get_login_value().click()
el = self.driver.find_element(By.ID, '')
assert '**' in el.text, '未登录'
这里要注意,需要输出日志就一定要引用我们已经写好的获取日志的方法,获取日志器之后,在你需要输出日志的操作的上一行写入log.info(''),这样就会输出你所想要的日志了
运行一下看看结果
控制台日志

 


  写入文件的日志

 


 

 

标签:info,appium,log,get,self,allure,logger,日志
来源: https://www.cnblogs.com/rookie-c/p/15782910.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有