接口测试基础——第6篇unittest模块(二)

通过上次的运行,大家应该已经发现了,就是我们写了三个用例,那么在测试报告中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自动化的时候,代码也容易些啦~~~

 

微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

还请大家多多提意见,我们慢慢来,重要的是学会~~~如果你觉得对你有帮助,也欢迎大家转发,船长先谢谢各位啦~~~

 

posted @ 2017-10-24 10:34  孟船长  阅读(183)  评论(0编辑  收藏  举报