Python nose 自写插件支持用例带进度

发表于:2021-6-25 09:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Believer007    来源:博客园

#
Python
  在自动化测试过程中,当用例很多且要跑很久时,就会出现这样一个问题,不知道当前跑到第几个用例了,还有多少用例要跑,怎么办?
  因为用的nose框架,那就看看nose有没有这样的库支持,结果看了一圈,只找到一个nose-progressive,装完后,有两个问题:
  1、不支持windows
  2、对接jenkins没法用
  傻眼了吧,该怎么解决呢,就得自己写插件了。折腾了两个终于搞定,后需会再总结一个nose plugin接口的说明,这里就不说了。
  自己写的插件,效果如下:
root@localhost]# nosetests -v -s test1.py --with-scheduling
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$']
[1/3] test1.test_aa ... ok
[2/3] test1.test_bb ... ok
[3/3] test1.test_cc ... ok

----------------------------------------------------------------------
Ran 3 tests in 6.008s

OK

  用例前面有简陋的进度条提示,正好是我自己的需求,不用太复杂
  插件代码如下:
"""Print progress to stdout. Enabled by --with-scheduling"""

from functools import partial
import itertools
import logging
import os
import sys

from nose.plugins import Plugin

log = logging.getLogger('nose.plugins.nosescheduling')


class Progress(Plugin):
    name = 'scheduling'
    _handler_prefix = 'nose_schedulings_'
    #encoding = "UTF-8"
    _totalTests = 0

    def __init__(self):
        super(Progress, self).__init__()  # involved the Plugin init
        self.test_numbers = itertools.count(1)

    def options(self, parser, env=os.environ):
        super(Progress, self).options(parser, env=env)

    def configure(self, options, conf):
        super(Progress, self).configure(options, conf)
        if not self.enabled:
            return

    def prepareTestLoader(self, loader):
        def capture_suite(orig_method, *args, **kwargs):
            self._totalTests += orig_method(*args, **kwargs).countTestCases()
            loader._visitedPaths = set()
            return orig_method(*args, **kwargs)
        if hasattr(loader, 'loadTestsFromNames'):
            loader.loadTestsFromNames = partial(capture_suite,
                                                loader.loadTestsFromNames)

    def startTest(self, test):
        progress = '[{0}/{1}] '.format(next(self.test_numbers), self._totalTests)
        sys.stderr.write(progress)

  简单几行,把需求搞定。。
  有需要的朋友可以通过pip install noseprogress 安装使用
  pypi 上的链接如下:https://pypi.org/project/noseprogress/

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号