python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

1.用例执行顺序

unittest默认会按照ascii码的顺序,依次执行。类名——方法名排序,使用discover也是默认排序。如果不想使用默认排序,就使用testsuite测试集的方式。

import unittest

class TestB(unittest.TestCase):

def setUp(self):

print("class B start")

def testC(self):

print("func c")

def testA(self):

print("func a ")

def tearDown(self):

print("class B end")

class TestA(unittest.TestCase):

def setUp(self):

print("class A start")

def testB(self):

print("func b")

def tearDown(self):

print("class A end")

if __name__=="__main__":

unittest.main()

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNDE4OTcwLzIwMTgxMS8xNDE4OTcwLTIwMTgxMTI2MjM1MTM1MzcyLTI5MzIxMjM5OS5wbmc=.jpg

discover,新建runtest.py文件

import unittest

test_dir="./"

discover=unittest.defaultTestLoader.discover(test_dir,pattern="testorder.py")

if __name__=="__main__":

runner=unittest.TextTestRunner()

runner.run(discover)

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNDE4OTcwLzIwMTgxMS8xNDE4OTcwLTIwMTgxMTI3MDAxMTQ4MDQ2LTgxMTk0MTEzMS5wbmc=.jpg

suite

if __name__=="__main__":

suite=unittest.TestSuite()

suite.addTest(TestB("testA"))

suite.addTest(TestA("testB"))

suite.addTest(TestB("testC"))

runner = unittest.TextTestRunner()

runner.run(suite)

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNDE4OTcwLzIwMTgxMS8xNDE4OTcwLTIwMTgxMTI3MDAwMTE5MDMyLTY1NTI3MzUwMy5wbmc=.jpg

2.多级目录

执行多级目录,只需要在每个子目录下面添加__init__文件即可

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNDE4OTcwLzIwMTgxMS8xNDE4OTcwLTIwMTgxMTI3MDg0NDU1NDA4LTkxOTIyNzYxMC5wbmc=.jpg

test_a.py

import unittest

class TestA(unittest.TestCase):

def setUp(self):

pass

def test(self):

print("A")

def tearDown(self):

pass

test_b,test_c,test_d只是将test中输出更改为B C D

runtest.py

import unittest

test_dir="./"

discover=unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")

if __name__=="__main__":

runner=unittest.TextTestRunner()

runner.run(discover)

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNDE4OTcwLzIwMTgxMS8xNDE4OTcwLTIwMTgxMTI3MDg0OTU5MzM2LTc3MzM5NzE5My5wbmc=.jpg

3.装饰器:跳过测试和执行失败

运行测试时,需要跳过某些测试用例,或预期失败,此时unittest提供了装饰器来实现这些需求。

装饰器同样适用于类

装饰器

说明

unittest.skip(原因)

无条件的跳过测试

unittest.skipIf(条件, 原因)

如果条件为真,就跳过测试;否则执行测试

unittest.skipUnless(条件, 原因)

如果条件为真,就执行测试;否则跳过测试

unittest.expectedFailure

预期失败。执行结果失败,pass;执行结果成功,fail

import unittest

class MyTest(unittest.TestCase):

@unittest.skip("直接跳过test_skip")

def test_aaa(self):

print("直接跳过test_aaa\n")

@unittest.skipIf(3>2,"条件为true时,跳过test_skipIf")

def test_bbb(self):

print("跳过test_bbb\n")

@unittest.skipUnless(3>2,"条件为true时,执行测试test_skipUnless")

def test_ccc(self):

print("执行测试test_ccc\n")

@unittest.expectedFailure

def test_ddd(self):

print("test_ddd执行完毕\n")

@unittest.expectedFailure

def test_eee(self):

self.assertEqual(2,3)

if __name__=="__main__":

unittest.main()

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNDE4OTcwLzIwMTgxMS8xNDE4OTcwLTIwMTgxMTI3MDk0OTUwMjE2LTkxMTUyMjE3Mi5wbmc=.jpg

4.fixtures

除了用例的fixtures,unittest还提供了更大范围的fixtures,如针对模块和类的

setUpModule/tearDownModule:在整个模块的开始于结束是被执行

setUpClass/earDownClass:在测试类的开始与结束时被执行

setUp/tearDown:在测试用例的开始与结束时被执行

import unittest

def setUpModule():

print("模块:初始化")

def tearDownModule():

print("模块:销毁")

class Test(unittest.TestCase):

@classmethod

def setUpClass(cls):

print("类:初始化")

@classmethod

def tearDownClass(cls):

print("类:销毁")

def setUp(self):

print("用例:初始化")

def tearDown(self):

print("用例:销毁")

def test_case1(self):

print("用例1执行")

def test_case2(self):

print("用例2执行")

if __name__=="__main__":

unittest.main()

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xNDE4OTcwLzIwMTgxMS8xNDE4OTcwLTIwMTgxMTI3MTAxMTMyNDM3LTE0MDI5MTgzMDQucG5n.jpg

【Android自动化】unittest测试框架关于用例执行的几种方法

# -*- coding:utf-8 -*- import unittest class test(unittest.TestCase): def setUp(self): print 'This i ...

python unittest单元测试框架-2discover

基于TestLoader提供的discover方法实现用例执行 当用例达达到数十条后,在runtest.py文件中通过addTest()添加/删除测试用例就非常麻烦.此时可以使用discover方法找 ...

python unittest单元测试框架-1

Test Case.Test Suite.Test Runner.Test Fixture Test Case:单个测试用例 Test Suite:测试组合.可以把多个测试用例集合在一起执行. Tes ...

Selenium实战(四)——unittest单元测试3(测试用例的执行顺序)

一.测试用例的执行顺序 层级:多个测试目录 > 多个测试文件 > 多个测试类 > 多个测试方法(测试用例).在这里以一个测试执行顺序的脚本为例test_order.py import ...

python单元测试框架-unittest(三)之用例执行顺序

执行顺序规则: 测试类或测试方法的数字与字母顺序0~9,A-Z 执行如下脚本,理解用例执行顺序 #coding=utf-8 import unittest class Test1(unittest.T ...

Python+selenium之简单介绍unittest单元测试框架

Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...

Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

Python+Selenium ----unittest单元测试框架

unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...

Python 单元测试框架系列:聊聊 Python 的单元测试框架(一):unittest

作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

随机推荐

安装KVM及虚拟机

创建lvm       安装kvm相关的包     需要安装的包                                                                 安 ...

关于SWT中的Label类和Text类

Label类的继承关系图 Label是SWT中最简单的界面组件,给出他的一个实例如下: public class Label1 { public static void main(String[] a ...

HDU 1953

#include #include long long int euler(long long int n) { long long int ...

安装mysql后,sql语句中表名区分大小写的问题

今天安装完mysql后,执行查询语句select * from user,结果报user表不存在,但是实际是存在的,查了一下才知道是因为mysql的my.cnf文件中少了一个大小写敏感的配置,若不配置 ...

XML:特殊字符转换

<     < 小于号 >     > 大于号 &    & 和 '   ' 单引号 "   " 双引号 实体必须以符号& ...

中文自然语言处理工具hanlp隐马角色标注详解

本文旨在介绍如何利用HanLP训练分词模型,包括语料格式.语料预处理.训练接口.输出格式等. 目前HanLP内置的训练接口是针对一阶HMM-NGram设计的,另外附带了通用的语料加载工具,可以通过少量 ...

快速幂模n运算

模运算里的求幂运算,比如 5^596 mod 1234, 当然,直接使用暴力循环也未尝不可,在书上看到一个快速模幂算法 大概思路是,a^b mod n ,先将b转换成二进制,然后从最高位开始(最高位一 ...

new FormData&lpar;&rpar; - FormData对象的作用及用法

一.概述 FormData 对象的使用: 1.用一些键值对来模拟一系列表单控件:即把form中所有表单元素的name与value组装成 一个queryString 2. 异步上传二进制文件. 二.使用 ...

Go实现发送解析GET与POST请求

参考链接: https://www.jb51.net/article/115693.htm https://www.jb51.net/article/60900.htm https://www.cnb ...

js 字符串indexof与search方法的区别

1.indexof方法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法: 注意:有可选的参数(即设置开始的检索位置). 2.search方法 search() 方法用 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值