1、按照测试用例的上下顺序,而不是按方法的名称的字母顺序来执行测试用例。

之前的文章链接

python修改python unittest的运行顺序

之前写的,不是猴子补丁,而是要把Test用例的类名传到run里面去执行,与原生的使用有一点区别。现在修改成,用的时候代码与原生unittest完全一模一样,但运行时候使用与原生不同的逻辑。

import time
import unittest
from unittest.main import TestProgram
from app.utils.utils_ydf import LogManager class CustomTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.logger = LogManager('unittest用例的日志').get_logger_without_handlers()
@classmethod
def tearDownClass(cls):
time.sleep(1)
cls.logger.debug('---------------------------------所有用例完成-----------------------------')
time.sleep(200000) def tearDown(self):
time.sleep(0.1) def setUp(self):
time.sleep(0.1) class CustomLoader(unittest.TestLoader):
def getTestCaseNames(self, testCaseClass):
"""Return a sorted sequence of method names found within testCaseClass
""" def isTestMethod(attrname, testCaseClass=testCaseClass,
prefix=self.testMethodPrefix):
return attrname.startswith(prefix) and \
callable(getattr(testCaseClass, attrname)) testFnNames = list(filter(isTestMethod, dir(testCaseClass)))
if self.sortTestMethodsUsing:
testFnNames.sort(key=lambda fun_name: getattr(testCaseClass, fun_name).__code__.co_firstlineno)
return testFnNames custom_loader = CustomLoader() class CustomTestTestProgram(TestProgram):
def __init__(self, *args, testLoader=custom_loader, **kwargs):
super().__init__(*args, testLoader=testLoader, **kwargs) def patch_unittest():
unittest.TestCase = CustomTestCase
unittest.defaultTestLoader = custom_loader
unittest.main = CustomTestTestProgram if __name__ == '__main__':
patch_unittest() class _Test(unittest.TestCase):
def test_3(self):
print(1) def test_2(self):
print(2) def test_1(self):
print(3) unittest.main()

这次的unitetest测试用例写法还是继承原生的Testcase类,执行生成测试用例也是原生的方法。

可以看到,正常情况下应该打印3 2 1 ,但使用了猴子技术后打印是 1 2  3。

运行结果是:

2、可以把调用patch_unittest函数写在最常用的工具包里面,就不用亲自去调用他了。

之前上篇验证过,python的模块只会导入一次,不管你在不同的文件中不同地方import 几百次,都是只会导入一次的。别的地方import 的unitetest的行为都会发生变化。

第二种方式,修改python unittest的执行顺序,使用猴子补丁的更多相关文章

  1. 一文搞懂Python Unittest测试方法执行顺序

    大家好~我是米洛! 欢迎关注我的公众号测试开发坑货,一起交流!点赞收藏关注,不迷路. Unittest unittest大家应该都不陌生.它作为一款博主在5-6年前最常用的单元测试框架,现在正被pyt ...

  2. python修改python unittest的运行顺序

    正常是一个测试类中按函数名字运行, 下面修改成直接按每个测试方法的代码顺序执行 文件 unittest_util.py import time import unittest from app.uti ...

  3. Spring整合Struts2框架的第二种方式(Action由Spring框架来创建)(推荐大家来使用的)

    1. spring整合struts的基本操作见我的博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2框架整 ...

  4. Pycharm上python unittest不执行"if __name__ == '__main__' "问题or选择非unittest run

    转:http://www.cnblogs.com/csjd/p/6366535.html python unittest不执行"if __name__ == '__main__' " ...

  5. JS定义函数的2种方式以及区别简述(为什么推荐第二种方式)

     无意中看到了阮一峰大神多年前的一篇博客: 12种不宜使用的Javascript语法    看到第9条的时候受到了启发,感觉之前没怎么理解清楚的一些问题好像突然就清晰了,如下图 可能光这样看,有些小伙 ...

  6. 创建线程的第二种方式------实现Runnable接口的方式

    package cn.itcast.demo16.Demo07.Runnable;/** * @author newcityman * @date 2019/7/22 - 23:17 */public ...

  7. Thread类的常用方法_sleep和创建多线程程序的第二种方式_实现Runnable接口

    sleep方法是在Thread类中的一个静态方法,当一个线程调用了sleep方法,被调用的那个线程就会暂时的让出指定时间的CPU执行权,在这段时间也不会参与CPU的调度,当时间到了之后,就会重新回到就 ...

  8. throws关键字_异常处理的第一种方式(交给别人处理)和try_catch_异常处理的第二种方式(自己处理)

    throws关键字:异常处理的第一种方式,交给别人处理 作用: 当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象 可以使用throws关键字处理异常对象, 会把异常对象声明抛出给方法的调用 ...

  9. Java创建线程的第二种方式:实现runable接口

    /*需求:简单的卖票程序多个窗口买票 创建线程的第二种方式:实现runable接口 *//*步骤1.定义类实现Runable接口2.覆盖Runable接口中的run方法    将线程要运行的代码存放在 ...

随机推荐

  1. 适配器模式,装饰模式,代理模式异同<转>

    节前把3个设计模式的学习心得分享了一下,分别是适配器模式,装饰模式,代理模式. 但是似乎越写越有些迷糊,这三种模式都有着一些大同小异的地方,总是有些搞不清. 今天再重新学习下,把学习心得分享给大家一下 ...

  2. python-opencv boundingRect使用注意

    矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来.还有一个带旋转的矩形,面积会更小,效果见下图 上代码 首先介绍下cv2.boundingRect(img)这 ...

  3. kubernetes应用部署原理

    Kubernetes应用部署模型解析(原理篇) 十多年来Google一直在生产环境中使用容器运行业务,负责管理其容器集群的系统就是Kubernetes的前身Borg.其实现在很多工作在Kubernet ...

  4. .net dll类库 生成chm说明文档

    效果图: 制作步骤: 1.下载Sandcastle http://shfb.codeplex.com/releases/view/105809 2.下载Html Help WorkShop http: ...

  5. jQuery(三):样式操作

    一.DOM操作分类 DOM Core:任何一种支持DOM的编程语言都可以使用它,例如:getElementById(). HTML-DOM:用于处理HTML文档,例如:document.forms. ...

  6. SpringBoot2 集成三种连接池 c3p0 hikari druid

    Hikari 1.首先集成 hikari springboot默认集成,只需要简单的配置即可 1.1 首先导入包 <dependency> <groupId>com.zaxxe ...

  7. Sword pcre库函数学习一

    0.pcre_exec 原型: #include <pcre.h> int pcre_exec(const pcre *code, const pcre_extra *extra, con ...

  8. SQL Server 2012 books

    SQL Server 2012 Introducing Microsoft SQL Server 2012 Microsoft SQL Server 2012 High-Performance T-S ...

  9. MYSQL数据库从A表把数据插入B表

    如果2张表的字段一致,并且希望插入全部数据,可以用这种方法: Code: INSERT INTO 目标表 SELECT * FROM 来源表; 比如要将 articles 表插入到 newArticl ...

  10. Unity下Iso和Persp两种模式的区别

    Iso模式 平行视野.在Iso模式下,不论物体距离摄像头远近都给人的感觉是一样大的. Persp模式 透视视野.在persp模式下,物体在scene界面上所呈现的画面是给人一种距离摄像头近的物体显示的 ...