Conftest 文件在日志中重复相同的条目

问题描述

在这里的第一篇文章很抱歉有任何错误

所以我正在使用 python 和 selenium 来提高我的测试自动化技能。我创建了一个示例框架并不断扩展它 - https://github.com/adrian-rutkowski/herokuapp-automation

我的框架有一个日志实用程序,可以将消息记录到文件中。今天,当我将日志添加到 conftest.py 文件以记录打开和关闭浏览器并运行 6 个测试套件时,我注意到以下内容

30-01-2021 15:28:13 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:18 - DraganddropPage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='Drag and Drop']
30-01-2021 15:28:18 - DraganddropPage - DEBUG: Clicked on element.
30-01-2021 15:28:18 - DraganddropPage - INFO: Open the page.
30-01-2021 15:28:20 - DraganddropPage - DEBUG: Element found with locator: [xpath] //div[@id='column-a']
30-01-2021 15:28:20 - DraganddropPage - DEBUG: Element found with locator: [xpath] //div[@id='column-b']
30-01-2021 15:28:21 - DraganddropPage - DEBUG: Drag and drop successful.
30-01-2021 15:28:21 - DraganddropPage - INFO: Drag A to B.
30-01-2021 15:28:23 - setup - INFO: Close browser.
30-01-2021 15:28:30 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:30 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:35 - DropdownPage - DEBUG: Element found with locator: [xpath] //a[contains(text(),'Dropdown')]
30-01-2021 15:28:36 - DropdownPage - DEBUG: Clicked on element.
30-01-2021 15:28:36 - DropdownPage - INFO: Open the page.
30-01-2021 15:28:39 - DropdownPage - DEBUG: Element found with locator: [xpath] //select[@id='dropdown']
30-01-2021 15:28:39 - DropdownPage - DEBUG: Dropdown found.
30-01-2021 15:28:39 - DropdownPage - DEBUG: Dropdown value selected by visible text: Option 2
30-01-2021 15:28:39 - DropdownPage - INFO: Select dropdown value: Option 2
30-01-2021 15:28:42 - setup - INFO: Close browser.
30-01-2021 15:28:42 - setup - INFO: Close browser.
30-01-2021 15:28:49 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:49 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:49 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:53 - HomePage - INFO: Verify element present.
30-01-2021 15:28:53 - HomePage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='A/B Testing']
30-01-2021 15:28:53 - HomePage - DEBUG: Element is present.
30-01-2021 15:28:55 - HomePage - INFO: Verify element displayed.
30-01-2021 15:28:56 - HomePage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='Add/Remove Elements']
30-01-2021 15:28:56 - HomePage - DEBUG: Element is displayed.
30-01-2021 15:28:58 - setup - INFO: Close browser.
30-01-2021 15:28:58 - setup - INFO: Close browser.
30-01-2021 15:28:58 - setup - INFO: Close browser.
30-01-2021 15:29:05 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:05 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:05 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:05 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:11 - HoversPage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='Hovers']
30-01-2021 15:29:11 - HoversPage - DEBUG: Clicked on element.
30-01-2021 15:29:11 - HoversPage - INFO: Open the page.
30-01-2021 15:29:14 - HoversPage - DEBUG: Element found with locator: [xpath] //div[@class='example']//div[1]//img[1]
30-01-2021 15:29:14 - HoversPage - DEBUG: Hovered over the parent element.
30-01-2021 15:29:14 - HoversPage - DEBUG: Element found with locator: [xpath] //div[@class='example']//div[1]//div[1]//a[1]
30-01-2021 15:29:15 - HoversPage - DEBUG: Clicked on child element.
30-01-2021 15:29:15 - HoversPage - INFO: Open user profile.
30-01-2021 15:29:18 - setup - INFO: Close browser.
30-01-2021 15:29:18 - setup - INFO: Close browser.
30-01-2021 15:29:18 - setup - INFO: Close browser.
30-01-2021 15:29:18 - setup - INFO: Close browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:29 - IframePage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='WYSIWYG Editor']
30-01-2021 15:29:31 - IframePage - DEBUG: Clicked on element.
30-01-2021 15:29:31 - IframePage - INFO: Open the page.
30-01-2021 15:29:33 - IframePage - DEBUG: Entering the iframe using ID: mce_0_ifr
30-01-2021 15:29:33 - IframePage - INFO: Enter iFrame.
30-01-2021 15:29:35 - IframePage - DEBUG: Element found with locator: [xpath] //body
30-01-2021 15:29:35 - IframePage - DEBUG: Field clear.
30-01-2021 15:29:35 - IframePage - DEBUG: Element found with locator: [xpath] //body
30-01-2021 15:29:35 - IframePage - DEBUG: Sent data on element.
30-01-2021 15:29:35 - IframePage - INFO: Enter text.
30-01-2021 15:29:37 - IframePage - DEBUG: Switching back to default content.
30-01-2021 15:29:37 - IframePage - INFO: Exit the iFrame.
30-01-2021 15:29:39 - IframePage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='Elemental Selenium']
30-01-2021 15:29:39 - IframePage - DEBUG: Clicked on element.
30-01-2021 15:29:39 - IframePage - INFO: Click on elemental selenium link to prove that frame changed.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:52 - JsalertPage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='JavaScript Alerts']
30-01-2021 15:29:52 - JsalertPage - DEBUG: Clicked on element.
30-01-2021 15:29:52 - JsalertPage - INFO: Open the page.
30-01-2021 15:29:54 - JsalertPage - DEBUG: Element found with locator: [xpath] //button[normalize-space()='Click for JS Alert']
30-01-2021 15:29:54 - JsalertPage - DEBUG: Clicked on element.
30-01-2021 15:29:54 - JsalertPage - INFO: Open JS alert.
30-01-2021 15:29:56 - JsalertPage - DEBUG: JavaScript alert accepted.
30-01-2021 15:29:56 - JsalertPage - INFO: Click OK on JS alert.
30-01-2021 15:29:58 - JsalertPage - DEBUG: Element found with locator: [xpath] //button[normalize-space()='Click for JS Confirm']
30-01-2021 15:29:58 - JsalertPage - DEBUG: Clicked on element.
30-01-2021 15:29:58 - JsalertPage - INFO: Open JS confirm.
30-01-2021 15:30:00 - JsalertPage - DEBUG: JavaScript alert dismissed.
30-01-2021 15:30:00 - JsalertPage - INFO: Click CANCEL on  JS alert.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.

如您所见,消息 setup - INFO: Open Firefox browser.setup - INFO: Close browser. 被写入 X 次,其中 X 是正在运行的测试用例的编号(例如,在第 6 次测试之后,消息被写入 6 次!).

conftest.py

from selenium import webdriver
import pytest
import allure
from utilities import logger
import logging
from allure_commons.types import AttachmentType

def pytest_addoption(parser):
    parser.addoption(
        "--browser",action="store",default="firefox")

@pytest.fixture()
def setup(request):
    log = logger.log_util(logging.DEBUG)
    browser = request.config.getoption("--browser")
    base_url = "https://the-internet.herokuapp.com/"
    if browser.lower() == "firefox":
        driver = webdriver.Firefox()
        log.info("Open Firefox browser.")
    elif browser.lower() == "chrome":
        driver = webdriver.Chrome()
        log.info("Open Chrome browser.")

    driver.maximize_window()
    driver.get(base_url)
    request.cls.driver = driver
    before_Failed = request.session.testsFailed
    yield
    if request.session.testsFailed != before_Failed:
        allure.attach(driver.get_screenshot_as_png(),name="Test Failed",attachment_type=allure.attachment_type.PNG)
    log.info("Close browser.")
    driver.quit()

logger.py

import inspect
import logging
from datetime import datetime


def log_util(logLevel=logging.DEBUG):
    # Gets the name of the class / method from where this method is called
    logger_name = inspect.stack()[1][3]
    logger = logging.getLogger(logger_name)
    # By default,log all messages
    logger.setLevel(logging.DEBUG)

    fh = logging.FileHandler('C:\\Users\\adrian.rutkowski\\PycharmProjects\\herokuapp-automation\\logs\\automation {:%d-%m-%Y}.log'.format(datetime.Now()),mode='a')
    fh.setLevel(logLevel)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s',datefmt='%d-%m-%Y %H:%M:%s')
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    return logger

有人知道这种不良行为的原因是什么吗?我需要每次测试只写一次这些消息。非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)