通过上次的运行,大家应该已经发现了,就是我们写了三个用例,那么在测试报告中setUp和tearDown方法分别运行了三次。没错,这也就是说,每次运行用例之前都会运行setUp和tearDown方法。今天我们就来具体的说一下unittest模块是如何运行所有的用例的:
先写如下用例:
# coding: utf-8
import unittest
import time
class MyTest(unittest.TestCase):
def setUp(self):
print "SetUp"
time.sleep(2)
def tearDown(self):
print "teardown"
time.sleep(2)
def test01(self):
print "test01"
def test03(self):
print "test03"
def test02(self):
print "test02"
if __name__ == '__main__':
pass
上面有三个用例,他们是按什么顺序运行的?又是如何一次运行三个用例呢?
大家只需要把下面的的方法替换if __name__ == '__main__':下面的pass就可以了
第一种方法:
unittest.main()
替换以后运行就可以看到如下输出:
首先我们可以看到运行的顺序是test01->test02->test03的顺序,也就是说运行是有顺序的;其次,可以看到下面框起来的点,点表示成功,F表示失败,E表示报错。
第二种方法:
通过测试套件,加载全部的测试用例,然后运行
suite = unittest.TestLoader().loadTestsFromTestCase(MyTest)
unittest.TextTestRunner(verbosity=2).run(suite)
这里的verbosity=2作用是打印的时候会将对应的用例名字同时打印出来,这样看起来会很方便~~~
注意,此时你运行时光标一定要在if的下面,这样才会运行全部用例,如果你把光标放在任意用例上,那么只会运行那一个用例。
第三种方法:
同样是通过测试套件来运行:
testsuit = unittest.TestSuite()
testsuit.addTest(MyTest("test03"))
testsuit.addTest(MyTest("test02"))
runner = unittest.TextTestRunner()
runner.run(testsuit)
这种方式的特点是只有你addTest写了用例名,那么运行的时候才会去运行,像上面我只加载了test03和test02两个用例,那么在运行时就只会运行这两个用例了。
第四种方法:
加载固定测试用例文件中的用例
test_dir = 测试用例路径
report_dir = 测试报告存放路径
test_discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
runner = unittest.TextTestRunner()
runner.run(test_discover)
这种方法是不是很眼熟?是的,这就是上一次我们用过的方式,只不过我们上次不仅运行了用例,还将其作为邮件发出去了。
以上就是加载测试用例常用的方法了。
还需要了解的是跳过测试用例的方法:
如果你既想一下运行所有用例,又想跳过一些不想跑的用例,那你就需要这句话了,
@unittest.skip('跳过用例的原因')
只要在不想运行的用例上面加上这句话,那么对应的用例就不会运行啦。这种方式叫做装饰器,有时间我会考虑专门的和大家说一下装饰器。因为有时候我们不想每次用例执行前都运行setUp和tearDown方法~~这个后面再说
需要注意的是,unittest模块(框架)用途还是非常多的,最常用的地方在小编看来其实是UI自动化Selenium。只要掌握了以上只是,在运行UI自动化的时候,代码也容易些啦~~~