当前位置: 首页 > article >正文

【13】Selenium+Python UI自动化测试 集成日志(某积载系统实例-07)

1、 在utils文件夹下,新增logger.py文件,用于封装日志
在这里插入图片描述
代码
logger.py

#!/usr/bin/env python3
# -*-coding:utf-8-*-
# __author__: hunter

import logging
import os
import time


class Logger:
    def __init__(self, loggername):
        # 创建一个logger
        self.logger = logging.getLogger(loggername)
        print(self.logger)
        self.logger.setLevel(logging.DEBUG)

        # 创建一个handler,用于写入文件
        rq = time.strftime('%Y%m%d %H-%M-%S', time.localtime(time.time()))
        log_path = os.path.abspath('.') + '/logs/'  # 指定文件输出路径,注意logs是一个文件夹,
        logname = log_path + rq + 'test.log'  # 指定输出的日志文件名
        fh = logging.FileHandler(logname, encoding='utf-8')  # 指定utf-8格式编码,避免输出的日志文本乱码
        print(fh)
        fh.setLevel(logging.DEBUG)

        # 创建一个handler,用于将日志输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)

        # 定义handler的输出格式
        formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)

        # 给logger添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)

    def get_log(self):
        """定义一个函数,回调logger实例"""
        return self.logger

2、 项目下新增log文件夹,用于存放生成的日志文件

3、 在test_000_login2.py文件中,调用logger,写入日志
test_000_login2.py

import unittest
import time
from selenium import webdriver
from chromedriver_py import binary_path # this will get you the path variable
from selenium.webdriver.common.by import By  # 导入 By 模块
from Test.pythonProject.test_selenium_pjz.config import readyaml
from Test.pythonProject.test_selenium_pjz.utils import handle_excel
from Test.pythonProject.test_selenium_pjz.utils.logger import Logger
class TestLogin(unittest.TestCase):
    def setUp(self):
        self.svc = webdriver.ChromeService(executable_path=binary_path)
        self.driver = webdriver.Chrome(service=self.svc)
        self.driver.maximize_window()
        # 打开登录页
        self.driver.get(readyaml.read_yaml("url"))
        self.logger = Logger(__name__)

    def test_login(self):
        try:
            rows_count = handle_excel.HandleExcel().get_rows()  # 获取Excel行数
            for i in range(2, rows_count+1):
                #获取excel中 手机号 查找元素方法 元素值
                telNumber = handle_excel.HandleExcel().get_value(i, handle_excel.HandleExcel().get_telNumber())
                way_value = handle_excel.HandleExcel().get_value(i, handle_excel.HandleExcel().get_way_value())
                # 查找登录元素
                time.sleep(2)
                self.driver.find_element(By.CSS_SELECTOR, way_value).clear()
                self.driver.find_element(By.CSS_SELECTOR, way_value).send_keys(telNumber)
                self.driver.find_element(By.CSS_SELECTOR,
                                         "button[class='el-button el-button--primary el-button--medium']").click()

                time.sleep(5)
                # 判断是否登录成功 判断是否跳转到了首页 并将结果写入Excel
                index = self.driver.current_url
                if index == "http://192.168.0.121:8089/index":
                    handle_excel.HandleExcel().write_value(i, handle_excel.HandleExcel().get_result(), "登录成功")
                    print(i)
                    self.logger.get_log().debug(f"第{i-1}个用例执行成功,手机号为{telNumber}")
                else:
                    handle_excel.HandleExcel().write_value(i, handle_excel.HandleExcel().get_result(), "登录失败")
                    print(i)
                    self.logger.get_log().info(f"第{i-1}个用例执行失败,,手机号为{telNumber}")
        except Exception as e:
            print(e)
            pass
            handle_excel.HandleExcel().write_value(i, handle_excel.HandleExcel().get_result(), "登录失败")
            self.logger.get_log().error(f"第{i-1}个用例执行失败,错误信息为{e}")
    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    TestLogin()

4、 执行结果
可以看到,在log文件夹下 生成了日志文件
在这里插入图片描述


http://www.kler.cn/a/457585.html

相关文章:

  • 【学习笔记】ChatGPT原理与应用开发——基础科普
  • No.29 笔记 | CTF 学习干货
  • C++ 设计模式:策略模式(Strategy Pattern)
  • 「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现
  • 【Spring】基于注解的Spring容器配置——@Scope注解
  • 如何通过采购管理系统提升供应链协同效率?
  • Android Bluetooth 问题:BluetoothAdapter enable 方法失效
  • 【2025最新计算机毕业设计】基于SpringBoot的网上服装商城系统(高质量项目,可定制)【提供源码+答辩PPT+文档+项目部署】
  • 一起来看--红黑树
  • TVS二极管选型【EMC】
  • 从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】
  • 每日一题 354. 俄罗斯套娃信封问题
  • 2025年阿斯利康GATE笔试测评春招校招社招笔试入职测评行测题型解读揭秘
  • MATLAB 车牌自动识别系统设计 SVM支持向量机方法 车牌识别
  • 代码随想录第60天
  • python opencv的sift特征检测(Scale-Invariant Feature Transform)
  • 嵌入式系统 第十二讲 块设备和驱动程序设计
  • 跟着问题学18——大模型基础transformer模型详解(4)解码器
  • PilotGo
  • MySQL--》如何在MySQL中打造高效优化索引