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(),它即使失败,打印的错误详细会更加详细,有利于尽快的修复代码和修改错误的测试用例。当然,这仅仅是本人的建议。