直接上例子吧
有一点改动的地方就是:保存路径改了:
path = os.path.dirname(os.path.dirname(__file__)) + '\\logs'
rf_handler = logging.handlers.TimedRotatingFileHandler(path+'\\all.log', when='midnight', interval=1, backupCount=7,
atTime=datetime.time(0, 0, 0, 0))
详细代码:
util封装的log方法
def get_logger():
import logging
import logging.handlers
import datetime
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
path = os.path.dirname(os.path.dirname(__file__)) + '\\logs'
rf_handler = logging.handlers.TimedRotatingFileHandler(path+'\\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(path+'\\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
修改后
from time import sleep
import unittest
import pytest
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from util import util
import pyautogui #通过定位坐标来找到元素
class TestUserLogin(object):
#改成setup
@classmethod
def setup_class(cls):
cls.driver = webdriver.Chrome()
cls.driver.get('http://localhost:8080/jpress/admin/login')
cls.driver.maximize_window()
cls.logger = util.get_logger() #初始化方法
cls.logger.info('测试用户登录')
# def __init__(self):
# self.driver = webdriver.Chrome()
# self.driver.get('http://localhost:8080/jpress/admin/login')
# self.driver.maximize_window()
# 测试用户登录,用户名错误
def test01_user_login_username_error(self):
# 用户名为空
username = '' #实际正确的是root
pwd = 'root'
expected = '信息提交错误'
# 输入用户名
self.driver.find_element_by_name('username').send_keys(username)
self.logger.debug('输入用户名称:%s', username)
# 输入密码
self.driver.find_element_by_name('password').send_keys(pwd)
self.logger.debug('输入密码:%s', pwd)
#勾选复选框(必须要用坐标定位)
elem=self.driver.find_element_by_xpath('//*[@id="loginform"]/div[3]/div[1]/div/label/input')
print(elem.rect) # 找到该坐标打印一下
rect = elem.rect
pyautogui.moveTo(rect['x'] + 10, rect['y'] + 130) # 10,130 就是移动像素
pyautogui.click()
# 点击登录
self.driver.find_element_by_class_name('btn').click()
self.logger.debug('点击登录')
# 等待提示框
WebDriverWait(self.driver, 5).until(EC.alert_is_present())
alert = self.driver.switch_to.alert
print(alert.text)
sleep(3)
# 验证不通过肯定执行后面的日志
try:
assert alert.text == expected+'12!'
except AssertionError as ae:
self.logger.error("老郭,老郭:%s", "报错了", exc_info=1)
alert.accept()
# self.driver.quit()
# 测试用户登录成功
#为了后面的依赖关系
@pytest.mark.dependency(name='admin_login')
def test02_user_login_ok(self):
username = 'root'
pwd = 'root'
expected = 'JPress'
# 输入用户名
self.driver.find_element_by_name('username').clear()#为了把上面案例输入的值清空
self.driver.find_element_by_name('username').send_keys(username)
#加上日志
self.logger.debug('输入用户名称:%s', username)
# 输入密码
self.driver.find_element_by_name('password').clear()
self.driver.find_element_by_name('password').send_keys(pwd)
self.logger.debug('密码:%s', pwd)
# 点击登录
self.driver.find_element_by_class_name('btn').click()
self.logger.debug('等待登录')
# 等待提示框
WebDriverWait(self.driver, 5).until(EC.title_is(expected))
sleep(3)
#验证 因为没有弹窗 所以用到了title断言判断
assert self.driver.title == expected
# @classmethod
# def teardown_class(cls):
# cls.driver.quit()
if __name__ == '__main__':
pytest.main(['-sv','test_user_login.py'])
运行结果:
2021-01-08 15:09:28,372 - DEBUG - debug message
2021-01-08 15:09:28,373 - INFO - info message
2021-01-08 15:09:28,373 - WARNING - warning message
2021-01-08 15:09:28,373 - ERROR - error message
2021-01-08 15:09:28,374 - CRITICAL - critical message
2021-01-08 15:11:03,844 - INFO - 测试用户登录
2021-01-08 15:11:04,062 - DEBUG - 输入用户名称:
2021-01-08 15:11:04,205 - DEBUG - 输入密码:root
2021-01-08 15:11:04,573 - DEBUG - 点击登录
2021-01-08 15:11:08,362 - DEBUG - 输入用户名称:root
2021-01-08 15:11:08,699 - DEBUG - 密码:root
2021-01-08 15:11:08,760 - DEBUG - 等待登录
2021-01-08 15:16:29,351 - INFO - 测试用户登录
2021-01-08 15:16:29,576 - DEBUG - 输入用户名称:
2021-01-08 15:16:29,767 - DEBUG - 输入密码:root
2021-01-08 15:16:30,142 - DEBUG - 点击登录
2021-01-08 15:16:33,659 - ERROR - 老郭,老郭:报错了
Traceback (most recent call last):
File "C:\Users\Administrator\pythonxiangmu\seelenium_project\testcases\log\test_user_login.py", line 60, in test01_user_login_username_error
assert alert.text == expected+'12!'
AssertionError: assert '信息提交错误' == '信息提交错误12!'
2021-01-08 15:16:33,938 - DEBUG - 输入用户名称:root
2021-01-08 15:16:34,156 - DEBUG - 密码:root
2021-01-08 15:16:34,218 - DEBUG - 等待登录
其他的都是一样的运用就不过多叙述了。