python - test_utils and a pytest.fixture not executing? - Stack Overflow

When running the tests I get "NameError: name 'script_id' is not defined". I'm

When running the tests I get "NameError: name 'script_id' is not defined". I'm running all this in PyCharm 2024. Tests are kept in .\test\ tools are kept in .\tools. I've had this working with other tests on another project.

test_utils.py (I have tried naming this file conftest.py):

import pytest
from time import time
from os import path, remove
from tools import log_tools

# From Windows Copilot - "pycharm: i have a function to test that has a logging function how can I deal with log file creation in my tests"
@pytest.fixture(scope="session", autouse=True)
def setup_logging():
    # Set up the logging configuration
    log_tools.script_id = "AutoInvest_test"
    log_tools.run_date = time.strftime('%d-%m-%Y', time.localtime())
    file_name = f'logs\\{log_tools.script_id}_log_{log_tools.run_date}.txt'
    log_tools.initialize(False)
    yield
    # Remove the log file after each test
    if path.exists(file_name):
        remove(file_name)

test_tools.py:

from tools.file import check_for_backup
from os import path, remove
from datetime import datetime


def create_file(a_path: str, data: list) -> None:
    if not path.exists(a_path):
        with open(a_path, 'w') as f:
            f.writelines(data)

def clear_datetime_stamps(a_list: list) -> None:
    for x in range(len(a_list)):
        if len(a_list[x]) >= 18:
            try:
                datetime.strptime(a_list[x][:19], '%d-%m-%Y %H:%M:%S')
                a_list[x] = a_list[x][22:]
            except ValueError:
                pass

def clean_print_capture(capture: str) -> list:
    output = capture.split("\n")
    clear_datetime_stamps(output)
    return output[:-1]

def test_check_for_backup(capsys):
    data_path = '.\\test_data\\testfile.txt'
    filename = 'Test'
    check_for_backup(filename, data_path)
    assert clean_print_capture(capsys.readouterr().out) == [f"{filename} file ({path.abspath(data_path)}) empty or corrupt.", f"No backup {filename} file found."]
    create_file(data_path[:-3] + "old", ["hello"])
    check_for_backup(filename, data_path)
    assert clean_print_capture(capsys.readouterr().out) == [f"{filename} file ({path.abspath(data_path)}) empty or corrupt.", "Backup file (.old) is present.", "\t\tIt is likely you have suffered some data loss.\t\tConsider renaming old file to JSON."]
    remove(data_path[:-3] + 'old')
    create_file(data_path[:-3] + "old2", ["hello", "file2"])
    check_for_backup(filename, data_path)
    assert clean_print_capture(capsys.readouterr().out) == [f"{filename} file ({path.abspath(data_path)}) empty or corrupt.", "Backup file (.old2) is present.", "\t\tIt is highly likely you have suffered some data loss.\t\tConsider renaming old2 file to JSON."]
    remove(data_path[:-3] + 'old2')

file.py

from os import path
from tools import log_tools

def check_for_backup(name: str, file_path: str) -> None:
    log_tools.tprint(f'{name} file ({path.abspath(file_path)}) empty or corrupt.')
    if path.isfile(file_path[:-3] + 'old'):
        log_tools.tprint("Backup file (.old) is present.")
        print("\t\tIt is likely you have suffered some data loss.\t\tConsider renaming old file to JSON.")
    else:
        if path.isfile(file_path[:-3] + 'old2'):
            log_tools.tprint("Backup file (.old2) is present.")
            print("\t\tIt is highly likely you have suffered some data loss.\t\tConsider renaming old2 file to JSON.")
        else:
            log_tools.tprint(f"No backup {name} file found.")

log_tools.py

from time import strftime, localtime
global run_date, script_id, html_output_file, log_file_name

def initialize(enable_html: bool = True) -> None:
    if enable_html:
        global html_output_file
        html_output_file = list()
    from os import path
    if not path.isdir(r'./logs'):
        from os import makedirs
        makedirs('./logs')
        tprint("Log directory created.\n")
        del makedirs
    del path

'''Print a string with a timestamp'''
def tprint(*args: str, html: bool = False, **kwargs: str) -> None:
    if len(kwargs) == 0:
        kwargs = {'sep': '', 'end': '\n'}
    else:
        if 'sep' not in kwargs:
            kwargs['sep'] = ''
        if 'end' not in kwargs:
            kwargs['end'] = '\n'
    output = strftime('%d-%m-%Y %H:%M:%S', localtime()) + " - "
    for x in args:
        output += x
    add_to_txt_log(output + kwargs['end'])
    if html:
        add_to_html_log(output + kwargs['end'])
    print(output, sep=kwargs['sep'], end=kwargs['end'])

def add_to_txt_log(string: str, add_date: bool = False) -> None:
    if string[-1] != '\n':
        string += '\n'
    if not script_id or script_id == '':
        f_txt_log = open('logs\\log_{}.txt'.format(run_date), 'a', encoding="utf-8")
    else:
        f_txt_log = open('logs\\{}_log_{}.txt'.format(script_id, run_date), 'a', encoding="utf-8")
    if add_date:
        string = "{} - {}".format(strftime('%d-%m-%Y %H:%M:%S', localtime()), string)
    try:
        f_txt_log.write(string)
    except UnicodeEncodeError:
        print("Error with line writing line:\n" + string)
    finally:
        f_txt_log.close()

'''Convert screen outputs from tprint into html for log file'''
def add_to_html_log(string: str) -> None:
    output = string.split('\n')
    list_length = len(output)
    superfluous = list()
    for x in countup(list_length):
        if len(output[x]) == 0:
            superfluous.append(x)
    superfluous_length = len(superfluous)
    for i in countdown(superfluous_length - 1):
        output.pop(superfluous[i])
    list_length -= superfluous_length
    for x in countup(list_length):
        html_output_file.append(output[x] + '<br>')

I've set up test in similarly in another project and it worked fine.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744287237a4566857.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信