记录测试用遇到的一个小问题~~~
#前情提要
在unittest 中,默认的用例执行顺序是按照 TestCaseName 的 ASCII 码顺序来执行,也即是0 ~ 9、A ~ Z、a ~ z。
举个栗子:
import unittest
class TestAddTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("@@@ setUpClass @@@")
@classmethod
def tearDownClass(cls):
print("@@@ setUpClass @@@")
def setUp(self):
print("---setUp---")
def tearDown(self):
print("---tearDown---")
#case
def test_one(self):
print("* 第 1 个用例 *")
def test_TWO(self):
print("* 第 2 个用例 *")
def test_three(self):
print("* 第 3 个用例 *")
if __name__ == '__main__':
unittest.main()
运行结果:
可以看到这三个用例的执行顺序是 2-1-3,是按照各自的用例名称 TWO、one、three 的 ASCII 码顺序执行的。
但是有些情况下,想要用例按照自己期望的顺序来执行,可以考虑以下方法:
1.修改用例名称,名称前加数字或顺序字母(加在test之后!否则就不是用例了)
2.使用 TestSuite 类的 addTest() 方法
3.其它我不知道的小妙招 ~
我不太喜欢修改用例名称,因为……丑……
所以就考虑用 addTest() 来修改用例执行顺序,调用addTest()方法后,先添加的先执行,后添加的后执行。
然后我……:
import unittest
class TestAddTest(unittest.TestCase):
#去掉setUpClass()和tearDownClass()只是为了省点地方
def setUp(self):
print("---setUp---")
def tearDown(self):
print("---tearDown---")
#case
def test_one(self):
print("* 第 1 个用例 *")
def test_TWO(self):
print("* 第 2 个用例 *")
def test_three(self):
print("* 第 3 个用例 *")
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(TestAddTest("test_one"))
suite.addTest(TestAddTest("test_TWO"))
suite.addTest(TestAddTest("test_three"))
unittest.TextTestRunner().run(suite)
运行结果还是……2-1-3:
这里 addTest() 方法没有起到作用,还是按照原来的顺序执行了。原因是:在pycharm中,引入了unittest 模块,会默认按照 unittest 模式执行。需要将 unittest 模式转换成普通模式。
unittest模式转换成普通模式的方法:
pycharm上方工具条里找到执行脚本的名称,点击展开后点击编辑配置 Edit Configurations。
(其实注意一下可以看到这个小框里面的名称是Unittests in test-addtest.py,这个就是addTest方法未生效的原因)
配置窗口左上角,点击+新增一个python的新配置。
给这个配置命名,选择要执行的文件,之后应用、保存。
这个时候注意看下右上角这个小框框里面就有了一个刚刚自己新增的 “test_AddTest” 这样的名称,点击运行,或者中间右键选择 Run ‘test_AddTest’ 运行也可以。
现在再看运行结果,就是按照自己addTest()方法添加的顺序来执行用例的了~
执行的模式也变成普通模式了,不是 unittest 模式了(其实还是喜欢 unittest 模式中可以看到一共执行和通过几个用例的感觉)
不过addTest方法还有一个优点就是可以选择部分用例单独执行,添加几条,就执行几条,还阔以吧~
撒花❀✿❀ヽ(°▽°)ノ❀✿❀
(有没有发现今天的花花升级了~)
原文链接:https://blog.csdn.net/sinat_34937826/article/details/108147722