unittest测试驱动之断言(四)

转载:http://www.wtoutiao.com/p/y40oyZ.html

自动化的测试中,对于每个单独的case来说,一个case的执行结果中,必然会有期望结果与实际结果,来判断该case是通过还是失败,在unittest的库中提供了大量的实用方法来检查预期值与实际值,来验证case的结果,一般来说,检查条件大体分为等价性,逻辑比较以及其他,如果给定的断言通过,测试会继续执行到下一行的代码,如果断言失败,对应的case测试会立即停止或者生成错误信息(一般打印错误信息即可),但是不会影响其他的case执行。

unittest的单元测试库提供了标准的xUnit断言方法,一下列出了经常使用到的(详细信息见官方的unittest库资料):

 

 

一、assertEqual()

assertEqual(a,b)来验证a是不是等价于b,如果比较值不相等,就会失败,下面已测试案例来验证下,测试百度的title,来引用assertEqual(),见测试脚本:

#coding:utf-8

 

from seleniumimport webdriver

importunittest,sys,time

reload(sys)

sys.setdefaultencoding('utf-8')

 

classBaiduTest(unittest.TestCase):

def setUp(self):

self.driver=webdriver.Firefox()

self.driver.maximize_window()

self.driver.get('http://www.baidu.com')

self.driver.implicitly_wait(30)

 

def testTitle(self):

self.assertEqual(u'百度一下,你就知道',self.driver.title)

 

def tearDown(self):

self.driver.quit()

 

@staticmethod

def suite():

suite=unittest.TestSuite(unittest.makeSuite(BaiduTest))

return suite

 

if__name__=='__main__':

unittest.TextTestRunner(verbosity=2).run(BaiduTest.suite())

我在测试用例testTitle写的会执行成功,因为二个值比较的时候是相等的,如果二个值不相等,一般在结果中会打印出来,如把testTitle测试用例修改下,见修改后的代码:

def testTitle(self):

self.assertEqual(u'百度一下,你就知',self.driver.title)

现在的测试用例代码二个值比较不相等的,我们见如下的执行后的结果截图,它会显示详细的错误:


二、assertNoEqual()

assertNotEqual(a,b),a,b二个值比较,如果是相等,测试会失败,二个值比较不相等,测试会成功,见如下的测试脚本:

#coding:utf-8

 

from seleniumimport webdriver

import unittest,sys,time

reload(sys)

sys.setdefaultencoding('utf-8')

 

classBaiduTest(unittest.TestCase):

def setUp(self):

self.driver=webdriver.Firefox()

self.driver.maximize_window()

self.driver.get('http://www.baidu.com')

self.driver.implicitly_wait(30)

 

def testTitle(self):

self.assertNotEqual(u'百度一下,你就知',self.driver.title)

 

def tearDown(self):

self.driver.quit()

 

@staticmethod

def suite():

suite=unittest.TestSuite(unittest.makeSuite(BaiduTest))

return suite

 

if__name__=='__main__':

unittest.TextTestRunner(verbosity=2).run(BaiduTest.suite())

 

三、assertTure()

assertTrue(a==b)是bool值的比较,期望结果是true,见测试百度title的测试用例:

#coding:utf-8

 

from seleniumimport webdriver

importunittest,sys,time

reload(sys)

sys.setdefaultencoding('utf-8')

 

class BaiduTest(unittest.TestCase):

def setUp(self):

self.driver=webdriver.Firefox()

self.driver.maximize_window()

self.driver.get('http://www.baidu.com')

self.driver.implicitly_wait(30)

 

def testTitle(self):

self.assertTrue(u'百度一下,你就知道'==self.driver.title)

 

def tearDown(self):

self.driver.quit()

 

@staticmethod

def suite():

suite=unittest.TestSuite(unittest.makeSuite(BaiduTest))

return suite

 

if__name__=='__main__':

result=unittest.TextTestRunner(verbosity=2).run(BaiduTest.suite())

sys.exit(not result.wasSuccessful())

 

四、assertFalse()

assertFalse(a==b)正好与assertTrue()相反,二个值比较不==的时候,测试用例就执行通过,见如下的测试代码:

#coding:utf-8

 

from seleniumimport webdriver

importunittest,sys,time

reload(sys)

sys.setdefaultencoding('utf-8')

 

classBaiduTest(unittest.TestCase):

def setUp(self):

self.driver=webdriver.Firefox()

self.driver.maximize_window()

self.driver.get('http://www.baidu.com')

self.driver.implicitly_wait(30)

 

def testTitle(self):

self.assertFalse(u'百度一下,你就知'==self.driver.title)

 

def tearDown(self):

self.driver.quit()

 

@staticmethod

def suite():

suite=unittest.TestSuite(unittest.makeSuite(BaiduTest))

return suite

 

if__name__=='__main__':

result=unittest.TextTestRunner(verbosity=2).run(BaiduTest.suite())

sys.exit(notresult.wasSuccessful())

 unittest提供了很多关于断言的方法,但是一般经常使用的,也就是介绍的这几个,但是我一般建议使用assertEqual(),它即使失败,打印的错误详细会更加详细,有利于尽快的修复代码和修改错误的测试用例。当然,这仅仅是本人的建议。

 

posted on 2016-11-01 11:03  竹雨阑珊1  阅读(175)  评论(0编辑  收藏  举报

导航