テストログ(初級編)

1. ログの基本的な使い方

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

#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 ログ イベントが発生したときの、ログ モジュールの読み込み時間に対する相対的なミリ秒数 (なぜこれが使用されるのかはまだわかりません)

ログ イベント時間の %(msecs)d ミリ秒部分

%(levelname)s ログ レコードのテキスト ログ レベル ('DEBUG'、'INFO'、'WARNING'、'ERROR'、'CRITICAL')

%(name)s によって使用されるロガーの名前。デフォルトでは rootLogger が使用されるため、デフォルトは「root」です。

%(message)s ログ レコードのテキスト コンテンツ。あ​​あ、これは msg % args によって計算されます。

%(pathname)s ロギング関数を呼び出すソース コード ファイルのフル パス

%(filename)s パス名のファイル名部分 (ファイル接尾辞を含む)

%(module)s ファイル名の接尾辞を除く名前の部分

%(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 ファイルにのみ保存され、コンソールにはログ情報が出力されないため、最適化する必要があります。

2. フレームワークへのログの適用方法

まず簡単な自動ログイン フレームワークを作成します

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()

このログイン フレームワークにログを追加する方法

入力操作やクリック操作などをログファイルに追加します。

ロギングクラスを呼び出す

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()

実行結果:パスワード表示エラー

 

フレームワークにログインする場所、フレームワークの下部、キーワード駆動、ログイン メソッド、エラー ログのキャプチャを除いて正しいメソッドです。

3. ログモジュールの最適化

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 はログの基本的なアプリケーションですが、問題があります。コンソールにはログ出力がなく、ログ ファイルのみが表示されます。

パッケージングを最適化するための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('日志信息')

操作結果:

パス: ../ 現在のディレクトリは 2 レベル上です

./ 1 つ上のレベルの現在のディレクトリ

/現在のディレクトリの兄弟

フレームワークで最適化されたログ ファイルを使用するにはどうすればよいですか?

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を参照します。

以下の情報は変更ありません

4.起動時にエラーが報告され、ログインに失敗しました。

 

selenium.common.Exceptions.NoSuchElementException: メッセージ: そのような要素はありません: 要素が見つかりません: {"method":"css selector","selector":"[name="/html/body/div[4]/div/) div[2]/フォーム/div[3]/ボタン"]"}

  (セッション情報: chrome=92.0.4515.159)

一般的な例外。NoSuchElementException: メッセージ: そのような要素はありません: 要素が見つかりません: { "method": "css selector", "selector": "[name="/html/body/div[4]/div/div[2] /form) /div[3]/ボタン"]"

(セッション情報: chrome=92.0.4515.159)

自分でログインするとうまくログインできない場合、最も考えられるのはサーバーの問題です。

おすすめ

転載: blog.csdn.net/Lynn1111111/article/details/124860845