Selenium实战(四)——unittest单元测试3(测试用例的执行顺序)
一、测试用例的执行顺序
层级:多个测试目录 > 多个测试文件 > 多个测试类 > 多个测试方法(测试用例)。在这里以一个测试执行顺序的脚本为例test_order.py
import unittest class TestBdd(unittest.TestCase): def setUp(self):
print("test TestBdd") def test_ccc(self):
print("test ccc") def test_aaa(self):
print("test aaa") class TestAdd(unittest.TestCase): def setUp(self):
print("test TestAdd") def test_bbb(self):
print("test bbb") if __name__ == '__main__':
unittest.main()
无论执行多少次,结果都是一样。因为unittest默认分局ASCII码的顺序加载测试用例(数字与字母的顺序为0~9,A~Z,a~z),所以TestAdd类会优先于TestBdd类被执行,test_aaa()方法会优先于test_ccc()方法被执行,也就是说,它并不是按照测试用例的顺序从上到下执行的。
那么要想不被命名限制,自己指定执行顺序,就要用到测试套件TestSuit类,通过addTest()方法按照一定的顺序来加载测试用例。修改以上测试用例如下:
if __name__ == '__main__':
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(TestBdd("test_aaa")) suite.addTest(TestAdd("test_bbb"))
suite.addTest(TestBdd("test_ccc")) # 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
执行结果如下:
不过当测试用例非常多时,不推荐用这种方法创建测试套件,最好的办法是通过命名控制执行顺序。如果测试用例在设计时不产生相互依赖,那么测试用例的执行顺序就没那么重复了。
Tips: 如果使用discover()方法要执行某测试文件夹下子目录中的测试文件,可在每个子目录下放一个__init__.py文件(作用是将一个目录标记成一个标准的Python模块)
二、跳过测试和预期失败
在运行测试时,有时需要直接跳过某些测试用例,或者当测试用例符合某个条件时跳过测试,又或者直接将测试用例设置为失败。unittest提供了实现这些需求的装饰器。
unittest.skip(reason)
无条件地跳过装饰的测试,需要说明跳过测试的原因。
unittest.skipIf(condition, reason)
如果条件为真,则跳过装饰的测试
unittest.skipUnless(condition,reason)
当条件为真时,执行装饰的测试
unittest.exceptedFailure()
不管执行结果是否失败,都将测试标记为失败。下面是测试用例:test_skip.py文件:
import unittest class MyTest(unittest.TestCase): @unittest.skip("直接跳过测试")
def test_skip(self):
print("test aaa") @unittest.skipIf(3 > 2, "当条件为真时跳过测试")
def test_skip_if(self):
print("test bbb") @unittest.skipUnless(3 > 2, "当条件为真时执行测试")
def test_skip_unless(self):
print('test ccc') @unittest.expectedFailure
def test_expected_failure(self):
self.assertEqual(2, 3) if __name__ == '__main__':
unittest.main()
执行结果如下:
当然,这些方法同样适用于测试类,只需将它们针对测试类装饰即可。
import unittest @unittest.skip("直接跳过,不测试该类")
class MyTest(unittest.TestCase):
#……
三、Fixture
可以将测试套件比作夹心饼干,setUp/tearDown是两片饼干,测试用例是中间的奶油。test_fixture.py文件:
import unittest def setUpModule():
print("test module start >>>>>>>>>>>>>") def tearDownModule():
print("test module end >>>>>>>>>>>>>>>") class MyTest(unittest.TestCase): @classmethod
def setUpClass(self):
print("test class start ============>") @classmethod
def tearDownClass(self):
print("test class end ==============>") def setUp(self):
print("test case start ------------->") def tearDown(self):
print("test case end --------------->") def test_case1(self):
print("test case1") def test_case2(self):
print("test case2") if __name__ == '__main__':
unittest.main()
需要注意的是,setUpClass/tearDownClass为类方法,需要通过@classmethod进行装饰。另外,方法的参数为cls。其实,cls与self没什么本质区别,都指标是方法的第一个参数。
Selenium实战(四)——unittest单元测试3(测试用例的执行顺序)的更多相关文章
- unittest测试用例的执行顺序
unittest的测试顺序为:有几个测试用例,测试固件就会执行多少次. 例如:只有一个测试用例时: setup--testcase1--teardown import unittest class F ...
- mysql第四篇--SQL逻辑查询语句执行顺序
mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> < ...
- Selenium(十七):unittest单元测试框架(三) 脚本分析、编写Web用例
1. 带unittest的脚本分析 也许你现在心里还有疑问,unittest框架与我们前面所编写的Web自动化测试之间有什么必然联系吗?当然有,既然unittest可以组织.运行测试用例,那么为什么不 ...
- SpringBoot单元测试中的测试方法执行顺序
一.忽略方法@ignore 二.执行顺序@FixMethodOrder(MethodSorter.JVM) 我们在执行JUnit测试用例时,有时需要按照定义顺序执行单元测试方法,比如如在测试数据库相关 ...
- python+unittest 控制用例的执行顺序
unittest的main()方法执行用例的顺序是按照测试类.测试方法的名字的ASCII顺序来执行测试方法.所以可能执行的顺序和你想要的顺序不一样,可能通过下面两种方法修改执行顺序 1. 通过Test ...
- unittest中setUp与setUpClass执行顺序
最基础的概念 1.setUP(self)看下面的执行顺序 import unittest class TestGo(unittest.TestCase): def setUp(self): print ...
- pytest-调整测试用例的执行顺序
场景:未考虑按自然顺序执行时,或想变更执行顺序,比如增加 数据的用例要先执行,再执行删除的用例.测试用例默认是按名 称顺序执行的. • 解决: • 安装:pip install pytest-orde ...
- python unittest控制用例的执行顺序
为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试.什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的 ...
- ddt读取json文件测试用例的执行顺序
一. 源码的说明 在源码中,ddt的file_data函数下有这样一段话 意思是说,如果json文件的内容是字典,字典的键名将会作为测试用例名的后缀,字典的值将会作为测试数据,如果这样的话,如果键名字 ...
随机推荐
- ceph问题
问题1: [root@admin-node my-cluster]# ceph -s cluster 4ca35731-2ccf-47fb-9f06-41fae858626d health HEALT ...
- jsp操作mysql样例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- PTA 7-9 集合相似度(STL之set初体验)
7-9 集合相似度(25 分) 给定两个整数集合,它们的相似度定义为:Nc/Nt×100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你 ...
- 如何在windows10家庭版上搭建docker
如何在windows10家庭版上搭建docker 建议先跳到最后一条,看完之后再决定是否安装. 0X00搭建原因 首先搭docker的想法是我在复现漏洞时候,发现大佬们的复现环境都是基于docker的 ...
- MySQL性能优化---索引
一.什么是索引 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里 ...
- 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 带你简单了解域名系统DNS
带你简单了解域名系统DNS 一.域名简介 1.1.DNS服务的作用 负责解析域名,将域名解析成IP地址. 1.2.域名系统概述 由于32位的IP地址并不容易记忆,人们往往喜欢记忆网站的域名.所以当我们 ...
- linux 下生成随机密码生成器
[root@localhost ~]# yum -y install pwgen [root@localhost ~]# pwgen -ncCyB1 8 1 kei%b3Xa [root@localh ...
- 7个有用的JS技巧
就如其他的编程语言一样,JavaScript也具有许多技巧来完成简单和困难的任务. 一些技巧已广为人知,而有一些技巧也会让你耳目一新. 让我们来看看今天可以开始使用的七个JavaScript技巧吧! ...
- Python学习小记(4)---class
1.名称修改机制 大概是会对形如 __parm 的成员修改为 _classname__spam 9.6. Private Variables “Private” instance variables ...