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

  • 相关阅读:
    使用Selenium对付一个点击游戏
    使用Selenium登录新浪微博
    LeetCode题解 #155 Min Stack
    LeetCode题解 #2 Add Two Numbers
    django for monkey(chapter one)
    Django,数据模型创建之数据库API参考(转载)
    python djang suit模板
    Jmeter多机并发压测IP地址问题
    Jmeter进行数据库压测
    fiddler实现手机端抓包(代理)
  • 原文地址:https://www.cnblogs.com/zyp1/p/6018663.html
Copyright © 2011-2022 走看看