前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >unittest测试驱动之断言(四)

unittest测试驱动之断言(四)

作者头像
无涯WuYa
发布2018-10-25 16:17:47
5980
发布2018-10-25 16:17:47
举报
文章被收录于专栏:Python自动化测试

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档