httprunner icon indicating copy to clipboard operation
httprunner copied to clipboard

httprunner 查看报告提示 OSError: [WinError 6] 句柄无效。

Open 254579676 opened this issue 4 years ago • 14 comments

问题描述

执行命令后,查看报告提示 OSError: [WinError 6] 句柄无效。

hrun demo/testcases/createFolder_test.py --html=demo/reports/report.html

版本信息

请提供如下版本信息:

httprunner版本:3.1.4 os: window10 python 3.7.1

错误信息 --- Logging error in Loguru Handler #0 --- Record was: {'elapsed': datetime.timedelta(seconds=2, microseconds=797505), 'exception': None, 'extra': {}, 'file': (name='loader.py', path='c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\httprunner\loader.py'), 'function': 'load_dot_env_file', 'level': (name='INFO', no=20, icon='ℹ️'), 'line': 127, 'message': 'Loading environment variables from C:\Users\lnz\PycharmProjects\httprunner_study\demo\.env', 'module': 'loader', 'name': 'httprunner.loader', 'process': (id=25780, name='MainProcess'), 'thread': (id=14432, name='MainThread'), 'time': datetime(2020, 7, 25, 17, 43, 27, 794163, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), '中国标准时间'))} Traceback (most recent call last): File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\loguru_handler.py", line 177, in emit self._sink.write(str_record) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\loguru_simple_sinks.py", line 26, in write self._stream.write(message) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\colorama\ansitowin32.py", line 41, in write self.__convertor.write(text) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\colorama\ansitowin32.py", line 162, in write self.write_and_convert(text) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\colorama\ansitowin32.py", line 187, in write_and_convert self.write_plain_text(text, cursor, start) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\colorama\ansitowin32.py", line 196, in write_plain_text self.wrapped.flush() OSError: [WinError 6] 句柄无效。 --- End of logging error --- --- Logging error in Loguru Handler #0 --- Record was: {'elapsed': datetime.timedelta(seconds=2, microseconds=800498), 'exception': None, 'extra': {}, 'file': (name='utils.py', path='c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\httprunner\utils.py'), 'function': 'set_os_environ', 'level': (name='DEBUG', no=10, icon='🐞'), 'line': 33, 'message': 'Set OS environment variable: USERNAME', 'module': 'utils', 'name': 'httprunner.utils', 'process': (id=25780, name='MainProcess'), 'thread': (id=14432, name='MainThread'), 'time': datetime(2020, 7, 25, 17, 43, 27, 797156, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800), '中国标准时间'))} Traceback (most recent call last): File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\loguru_handler.py", line 177, in emit self._sink.write(str_record) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\loguru_simple_sinks.py", line 26, in write self._stream.write(message) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\colorama\ansitowin32.py", line 41, in write self.__convertor.write(text) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\colorama\ansitowin32.py", line 162, in write self.write_and_convert(text) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\colorama\ansitowin32.py", line 187, in write_and_convert self.write_plain_text(text, cursor, start) File "c:\users\lnz\pycharmprojects\httprunner_study\venv\lib\site-packages\colorama\ansitowin32.py", line 196, in write_plain_text self.wrapped.flush() OSError: [WinError 6] 句柄无效。 https://ceshiren.com/uploads/default/original/2X/b/bbde5de5abee6c1a871d5828a97a58fe75b21ce5.png

254579676 avatar Aug 19 '20 08:08 254579676

这个问题我可以给你一个临时方案参考。 以下代码加入到runner.py的test_start方法中,就可以看到request和response了。

        def setup_ansi_colors(suppress_colors):
            convert_ansi_codes_to_win32_calls = False

            if os.name == 'nt':
                # Only need to init colorama with 'convert=True' when app is called
                # from 'cmd.exe', 'powershell' or 'git-bash via VS Code'
                convert_ansi_codes_to_win32_calls = 'TERM' not in os.environ or \
                                                    os.environ.get('TERM_PROGRAM', None) == 'vscode'

            if 'CONVERT_ANSI_CODES_TO_WIN32_CALLS' in os.environ:
                # explicit option is useful for cases when automatic guess fails (e.g. for Eclipse IDE)
                convert_ansi_codes_to_win32_calls = os.environ.get('CONVERT_ANSI_CODES_TO_WIN32_CALLS').lower() in (
                'true', '1')

            colorama.init(strip=suppress_colors, convert=convert_ansi_codes_to_win32_calls)
    

        setup_ansi_colors(suppress_colors=False)
        logger.remove()
        log_handler = logger.add(sink=sys.stdout.write, colorize=True)

WandyYing avatar Aug 20 '20 08:08 WandyYing

pealse,Is your problem solved? I tried adding this code, but no effect.

yang-xinfu avatar Aug 27 '20 01:08 yang-xinfu

@yang-xinfu add it into test_start. it work.

WandyYing avatar Aug 27 '20 04:08 WandyYing

image NameError: name 'colorama' is not defined。 I am a python newbie. How to solve this problem? Thank you.

yang-xinfu avatar Aug 27 '20 06:08 yang-xinfu

test_start

加在test_start()函数体内会报警告,运行还是没response

sym7015 avatar Aug 28 '20 09:08 sym7015

@sym7015 结构示范如下:

def test_start():
    {test_start code...}
    def setup_ansi_colors(suppress_colors):
        code...
    setup_ansi_colors(suppress_colors=False)
    logger.remove()
    log_handler = logger.add(sink=sys.stdout.write, colorize=True)
    {test_start code...}

WandyYing avatar Aug 29 '20 10:08 WandyYing

@yang-xinfu colorama is a Python library. It means "colorama" library is missing. You need add it at first and then import it.

WandyYing avatar Aug 29 '20 10:08 WandyYing

@sym7015 结构示范如下:

def test_start():
    {test_start code...}
    def setup_ansi_colors(suppress_colors):
        code...
    setup_ansi_colors(suppress_colors=False)
    logger.remove()
    log_handler = logger.add(sink=sys.stdout.write, colorize=True)
    {test_start code...}

感谢!!!

sym7015 avatar Aug 31 '20 03:08 sym7015

@yang-xinfu colorama is a Python library. It means "colorama" library is missing. You need add it at first and then import it.

Thank you very much !

yang-xinfu avatar Sep 01 '20 01:09 yang-xinfu

@sym7015 结构示范如下:

def test_start():
    {test_start code...}
    def setup_ansi_colors(suppress_colors):
        code...
    setup_ansi_colors(suppress_colors=False)
    logger.remove()
    log_handler = logger.add(sink=sys.stdout.write, colorize=True)
    {test_start code...}

非常感谢!报告中可以看到request和response了。但是始终没搞明白OSError: [WinError 6] 句柄无效 这个问题是如何引起的,该如何修复。开源框架任重道远啊

dy20082250 avatar Oct 01 '20 13:10 dy20082250

我放到test_start()中没有起作用呀?具体放到哪个地方? https://github.com/httprunner/httprunner/issues/987#issuecomment-702150402

liupancxm avatar Feb 24 '21 02:02 liupancxm

放到 if USE_ALLURE 这段代码前

        if USE_ALLURE:
            # update allure report meta
            allure.dynamic.title(self.__config.name)
            allure.dynamic.description(f"TestCase ID: {self.__case_id}")

并且导入colorama和sys包

jiaw-Zh avatar Feb 22 '22 07:02 jiaw-Zh

Thank you so much this helped me in a timely manner!

chenzhida3 avatar Jun 17 '22 10:06 chenzhida3

放到 if USE_ALLURE 这段代码前

        if USE_ALLURE:
            # update allure report meta
            allure.dynamic.title(self.__config.name)
            allure.dynamic.description(f"TestCase ID: {self.__case_id}")

并且导入colorama和sys包

image 加了这段代码好像没有效果,还要修改别的地方吗?

lee20220110 avatar May 23 '23 03:05 lee20220110