项目中如何添加log日志-登录功能

国庆·2021-04-26 19:58
出品|51Testing软件测试网听添加日志的必要性下面这张图是没添加log的报错信息,控制台底部很多内容,
项目
未融资福建省2022-01
简介
我要联系

编者按:本文来自微信公众号“51Testing软件测试网”(ID:testing51testing),作者:桃子,36氪经授权发布。

出品|51Testing软件测试网

听添加日志的必要性

下面这张图是没添加log的报错信息,控制台底部很多内容,杂而乱,不知道具体哪一行报差错了。

所以,给代码中添加日志,可以帮助我们快速的定位问题。

添加日志步骤

1.封装日志工具类;

2.调用日志工具包,在想添加日志的代码处调用。

实现过程

封装日志工具类

日志的四大组件

封装日志工具

1.util.py文件中封装get_logger方法,实现日志记录功能的封装,包括级别、日志格式、发送位置等。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

def get_logger():    import logging    import logging.handlers    import datetime    logger = logging.getLogger('mylogger')    logger.setLevel(logging.DEBUG)    rf_handler = logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7,                                                           atTime=datetime.time(0, 0, 0, 0))    rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))    f_handler = logging.FileHandler('error.log')    f_handler.setLevel(logging.ERROR)    f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))    logger.addHandler(rf_handler)    logger.addHandler(f_handler)    return logger 

(左右滑动查看完整代码)

2.调用调试一下,确认日志封装成功,新建test.py文件,运行如下脚本:

  •  
  •  
  •  

from util import utillogger=util.get_logger()logger.info('123') 

(左右滑动查看完整代码)

3.在log文件夹下生成日志文件: 

实际应用-登录功能

1.导入工具类

  •  

 from util import util 

2.初始化函数实例化获取日志函数 

  •  
  •  

 self.logger = util.get_logger()self.logger.info('用户登录用例') 

3.在需要添加日志信息处添加如下代码:

  •  

 self.logger.debug('输入用户名称:%s ',username) 

(左右滑动查看完整代码)

4.断言处添加日志

源码:

  •  

assert expect == self.driver.title 

修改后:

  •  
  •  
  •  
  •  

 try:assert expect == self.driver.titleexcept AssertionError as ae:self.logger.error("验证错误:%s", "报错了", exc_info=1) 

(左右滑动查看完整代码)

下面以admin账号登录功能为例:

源代码:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

import timeimport pytestfrom selenium import webdriver #将webdriver驱动导入selenium框架中from selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom util.util import *class Test_admin_login(object):    def setup_class(self):         options = webdriver.ChromeOptions()        # 添加无界面参数         options.add_argument('--headless')         self.driver=webdriver.Chrome(options=options)         self.driver.get('http://localhost:8888/jpress/admin/login')         self.driver.maximize_window()    login_data=[('wx','123456','666','验证码不正确,请重新输入'),                ('wx','123456','234','JPress后台')]    @pytest.mark.dependency(name='admin_login')    @pytest.mark.parametrize('username,pwd,captcha,expect',login_data)    def test1(self,username,pwd,captcha,expect):        #测试数据        #正确用户名        self.driver.find_element_by_name('user').clear()        self.driver.find_element_by_name('user').send_keys(username)        # 正确密码        self.driver.find_element_by_name('pwd').clear()        self.driver.find_element_by_name('pwd').send_keys(pwd)        if captcha!='666':            # 正确的验证码            js = "document.getElementsByTagName('img')[0].setAttribute('id','captchaimg')"            self.driver.execute_script(js)            captcha = get_code(self.driver, id='captchaimg', uname='luoditao', pwd='xinsheng2', )            self.driver.find_element_by_name('captcha').clear()            self.driver.find_element_by_name('captcha').send_keys(captcha)            # 登录按钮            self.driver.find_element_by_class_name('btn-flat').click()            WebDriverWait(self.driver, 5).until(EC.title_is(expect))            assert expect == self.driver.title            time.sleep(3)        else:            #错误的验证码            self.driver.find_element_by_name('captcha').clear()            self.driver.find_element_by_name('captcha').send_keys(captcha)            #登录按钮            self.driver.find_element_by_class_name('btn-flat').click()            WebDriverWait(self.driver,20).until(EC.alert_is_present())            alert=self.driver.switch_to.alert            assert alert.text==expect            alert.accept()            time.sleep(2)if __name__ == '__main__':    pytest.main(['test_admin_login.py']) 

(左右滑动查看完整代码)

添加日志后代码:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

import timeimport pytestfrom selenium import webdriver #将webdriver驱动导入selenium框架中from selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom util import utilfrom util.util import get_codeclass Test_admin_login(object):    def setup_class(self):         options = webdriver.ChromeOptions()        # 添加无界面参数         options.add_argument('--headless')         self.driver=webdriver.Chrome(options=options)         self.driver.get('http://localhost:8888/jpress/admin/login')         self.driver.maximize_window()         self.logger = util.get_logger()         self.logger.info('测试admin登录')    login_data=[('wx','123456','666','验证码不正确,请重新输入'),                ('wx','123456','234','JPress后台')]    @pytest.mark.dependency(name='admin_login')    @pytest.mark.parametrize('username,pwd,captcha,expect',login_data)    def test1(self,username,pwd,captcha,expect):        #测试数据        #正确用户名        self.driver.find_element_by_name('user').clear()        self.driver.find_element_by_name('user').send_keys(username)        self.logger.debug('输入用户名称:%s ',username)        # 正确密码        self.driver.find_element_by_name('pwd').clear()        self.driver.find_element_by_name('pwd').send_keys(pwd)        self.logger.debug('输入密码:%s ', pwd)        if captcha!='666':            # 正确的验证码            js = "document.getElementsByTagName('img')[0].setAttribute('id','captchaimg')"            self.driver.execute_script(js)            captcha = get_code(self.driver, id='captchaimg', uname='luoditao', pwd='xinsheng2', )            self.driver.find_element_by_name('captcha').clear()            self.driver.find_element_by_name('captcha').send_keys(captcha)            self.logger.debug('输入验证码:%s ', captcha)            # 登录按钮            self.driver.find_element_by_class_name('btn-flat').click()            self.logger.debug('点击登录按钮')            WebDriverWait(self.driver, 5).until(EC.title_is(expect))            # 验证            try:                assert expect == self.driver.title            except AssertionError as ae:                self.logger.error("验证错误:%s", "报错了", exc_info=1)            time.sleep(3)        else:            #错误的验证码            self.driver.find_element_by_name('captcha').clear()            self.driver.find_element_by_name('captcha').send_keys(captcha)            self.logger.debug('输入验证码:%s ', captcha)            #登录按钮            self.driver.find_element_by_class_name('btn-flat').click()            self.logger.debug('点击登录按钮')            WebDriverWait(self.driver,20).until(EC.alert_is_present())            alert=self.driver.switch_to.alert            try:                assert  alert.text==expect            except AssertionError as ae:                self.logger.error("验证错误:%s", "报错了", exc_info=1)            alert.accept()            time.sleep(2)if __name__ == '__main__':    pytest.main(['test_admin_login.py']) 

(左右滑动查看完整代码)

......

本文为51Testing软件测试网

第六十一期电子杂志内容

剩余精彩内容请点击下方 阅读原文查看

推荐阅读

点击阅读☞测试人,面试逃不过的灵魂三问

点击阅读☞测试中这些奇怪的问题你见过吗?

点击阅读☞新人如何做好功能测试,看这几点就够了

点击阅读☞211本科大佬的真实面试经历:测试人要不要去外包公司?

点击阅读☞2020年应聘华为测试岗三轮面试经历分享

戳 “阅读原文”一起来充电吧! 

+1
0

好文章,需要你的鼓励

参与评论
评论千万条,友善第一条
后参与讨论
提交评论0/1000
新锐作者

TA没有写简介,但内敛也是一种表达

报道的项目

项目
我要联系
简介
36氪APP让一部分人先看到未来
36氪
鲸准
氪空间

推送和解读前沿、有料的科技创投资讯

一级市场金融信息和系统服务提供商

聚焦全球优秀创业者,项目融资率接近97%,领跑行业