python unittest 深入failfast及实际应用

  1. failfast是TestResult的一个属性,缺省为False,
  2. 作用: 如果failfast为True,一旦测试集中有测试案例failed或发生error立即终止当前整个测试执行,跳过剩下所有测试案例
  3. 各种用法:    实现“短路测试”,设置failfast为True
    1. unittest.main(failfast=True)
    2. unittest.TextTestRunner(failfast=True)
    3. 设置TestResult控制,eg:unittest.TextResult.failfast=True
      1. unittest.TestCase().run(result)
      2. unittest.TestSuite测试集实例ts,ts.run(result)
      3. override自己的测试案例类的run(self,testresult=None)方法,关键是设置testresult.failfast=True
  4. 局限:unittest缺省实现控制整个测试集的“短路测试”,不能很好的满足基于测试案例类层面的控制
  5. 问题场景:eg: 同一测试集下N个相对独立的业务流程测试案例testcaseclass(每个包含n个步骤即testmethod)
    1. 期望每个testcaseclass对应的独立流程一旦有一个步骤failed终止执行该流程测试案例剩下步骤
    2. 每个testcaseclass的测试执行失败不影响其它同一测试集下的业务流程测试
    3. 希望统一业务流程测试集testsuite加载、执行、不是单独一个一个testcasecalss的加载、运行
  6. 问题方案:个人发现unittest目前的实现不能很好的解决5.中问题场景,实现初步验证ok方案如下:
    1. 直接override的unittest.suite模块TestSuite的run(self,result)方法(修改几行代码)
    2. 修改点如下:#注释对应部分为个人添加修改部分
    def run(self, result, debug=False):
        topLevel = False
        if getattr(result, ‘_testRunEntered‘, False) is False:
            result._testRunEntered = topLevel = True

        for index, test in enumerate(self):
#             if result.shouldStop:
#                 break

            if _isnotsuite(test):
                self._tearDownPreviousClass(test, result)
                self._handleModuleFixture(test, result)
                self._handleClassSetUp(test, result)
#                 result._previousTestClass = test.__class__
                # begin: failfast on the testcaselevel
                if result._previousTestClass == test.__class__:
                    if  result.shouldStop:
                        continue
                else:                    
                    result._previousTestClass = test.__class__
                    if  result.shouldStop:
                           result.shouldStop = False
                # end 
                           
                if (getattr(test.__class__, ‘_classSetupFailed‘, False) or
                    getattr(result, ‘_moduleSetUpFailed‘, False)):
                    continue

            if not debug:
                test(result)
            else:
                test.debug()

            if self._cleanup:
                self._removeTestAtIndex(index)

        if topLevel:
            self._tearDownPreviousClass(None, result)
            self._handleModuleTearDown(result)
        return result
时间: 2024-10-28 23:59:56

python unittest 深入failfast及实际应用的相关文章

python unittest不执行"if __name__ == '__main__' "问题

问题: selenium导入unittest框架和HtmlReport框架后,HtmlReport不被执行. 假设代码为: from selenium import webdriver import unittest class Test(unittest.TestCase): print "this is class Test" def setup(self): print "this is setup" def test_1(self): print "

简单实现接口自动化测试(基于python+unittest)

简单实现接口自动化测试(基于python+unittest) 简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Python自带的Unittest框架调用,期望各位可以通过本文对接口自动化测试有一个大致的了解. 引言 为什么要做接口自动化测试? 在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代都对所有功能做完整回归.但接口自动化测试因其实现简单.维护成本低,容易提高覆盖率等特点,越来越受重视.

python unittest 测试所有相关单元测试

python unittest 测试所有相关单元测试 python -m unittest discover project_directory "ut_*.py" 原文地址:https://www.cnblogs.com/bingwork/p/9714318.html

Python Unittest框架用例执行失败自动截图

原生的unittest框架是不支持case失败后自动截图功能,网上的解决办法,大体上分为两种: 1.加装饰器 可参考让unittest框架在fail时自动截图的装饰器.给测试用例添加多个装饰器的问题 (python unittest.TestCase) 2.封装断言 可参考Getting Python's unittest results in a tearDown() method.python 自动化测试,求助:如何判断用例断言失败后自动截图 原文地址:https://www.cnblogs

接口自动化1.0 python+unittest

自己尝试拿自己测试的系统编写接口自动化,不断优化,不断完善,记录学习过程,以及过程中遇到的问题及解决办法. 采用的结构是python+unittest,数据驱动模式 代码的结构: 测试数据: 处理测试数据,使用tool里面的get_data.py,代码: import openpyxl class Do_Excel: def __init__(self, file_name, sheet_name): self.file_name = file_name self.sheet_name = sh

python unittest框架

unittest模块提供了单元测试的组件,方便开发人员进行自测. 一.unittest中的重要概念: 测试用例:测试用例对象是最小的测试单位,针对指定的输入来测试期待的输出.由类TestCase的派生类或FunctionTestCase类来创建的. 测试固件:代表了测试相关的准备和清除工作,比如在一个测试进行之前需要创建数据库连接,测试结束之后需要关闭数据库连接.测试固件是在TestCase子类中进行重载的setUp和tearDown函数实现的.每个测试用例执行前后都会自动执行setUp和tea

Python Unittest与数据驱动

python中有一个装饰器类DDT,通过它我们可以复用代码,达到数据驱动测试的目的,该类的官方介绍可以参考 http://ddt.readthedocs.io/en/latest/index.html 安装ddt方式很简单,直接在cmd命令行输入:pip install ddt ,完成安装即可. 下面看一个简单的例子: 1 import unittest 2 from practise.myTestPractice.api_login import * 3 import ddt 4 5 6 @d

python unittest

1.setUp() 和 tearDown() 允许执行每个测试用例前分别初始化和清理测试环境,用法如下: 被测代码 myCode.py: #coding=utf-8 def my_upper(arg): return arg.upper() def my_isupper(arg): return arg.isupper() unittest代码: #coding=utf-8 import unittest import myCode class TestStringMehods(unittest

python unittest控制用例的执行顺序

为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试.什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的动态产出值.这样就必须先执行B方法.testng的test方法有dependson属性来制定方法的依赖.但是向python的unittet框架,他类似于junit,没有依赖测试的功能.unittest的main()方法执行用例的顺序是按照测试类.测试方法的名字的ASCII顺序来执行测试方法.如果想要