美文网首页
Hello PyUnitTest

Hello PyUnitTest

作者: 点点寒彬 | 来源:发表于2015-12-01 14:50 被阅读166次

    PyUnitTest是什么

    作为标准python中的一个模块,是其它框架和工具的基础,参考资料是它的官方文档:http://docs.python.org/2.7/library/unittest.html和源代码,文档已经写的非常好了,我在这里记录的主要是它的一些重要概念、关键点以及可能会碰到的一些坑,目的在于对unittest加深理解,而不是停留在泛泛的表面层上。
    unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep the bar green,相信使用eclipse写过java单元测试的都心领神会。unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等,总之,原理都是相通的,只是用不同的语言表达出来。

    这里吐槽一下,我其实是想研究Appium对移动端的自动化测试,结果发现Appium是基于selenium发展过来的,Python调用selenium自动化测试有比较详细的文档,而Appium文档实在是太少太少,于是我就顺着Appium看到了selenium。看着看着发现,要执行selenium的自动化测试,必须要了解测试框架。于是又开始研究这个Python的unittest测试框架。

    第一个例子

    程序语言都喜欢使用helloworld来开始,这个框架我们也使用这个来作例子吧。

    # -*- coding: utf-8 -*-
    import unittest
    
    def hello():
        return "hello world"
    
    class testNum(unittest.TestCase):
        def testHello(self):
            self.assertEqual("hello world",hello())
    
    
    if __name__ == '__main__':
        unittest.main()
    

    上面是一个很简单的测试例子。运行的结果如下:

    .
    ----------------------------------------------------------------------
    Ran 1 tests in 0.000s
    
    OK
    [Finished in 0.1s]
    

    我们来分析一下这个代码

    # -*- coding: utf-8 -*-
    import unittest
    

    编码类型使用UTF8,引用unittest模块,unittest是Python自带的模块,无需另外安装

    def hello():
        return "hello world"
    

    功能函数,返回hello world,也是我们的被测试函数

    class testNum(unittest.TestCase):
        def testHello(self):
            self.assertEqual("hello world",hello())
    

    测试函数,继承unittest.TestCase。里面所有的测试案例都使用test开头,里面的方法self.assertEqual()表示断言两个值相等比如调用hello()函数,我们得到的结果就是hello world。和我们给的预期值相同。运行结果就是成功。如果运行失败,会显示下面的东西

    F
    ======================================================================
    FAIL: testHello (__main__.testNum)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/Users/svenweng/Desktop/Development/unittest/testcal.py", line 21, in testHello
        self.assertEqual("hello word",hello())
    AssertionError: 'hello word' != 'hello world'
    
    ----------------------------------------------------------------------
    Ran 1 tests in 0.000s
    
    FAILED (failures=1)
    [Finished in 0.1s with exit code 1]
    [shell_cmd: python -u "/Users/svenweng/Desktop/Development/unittest/testcal.py"]
    [dir: /Users/svenweng/Desktop/Development/unittest]
    [path: /usr/bin:/bin:/usr/sbin:/sbin]
    

    错误提示很明确。AssertionError: 'hello word' != 'hello world'

    其他方法

    assertEqual(a, b) a == b
    assertNotEqual(a, b) a != b
    assertTrue(x) bool(x) is True
    assertFalse(x) bool(x) is False
    assertIs(a, b) a is b 2.7
    assertIsNot(a, b) a is not b 2.7
    assertIsNone(x) x is None 2.7
    assertIsNotNone(x) x is not None 2.7
    assertIn(a, b) a in b 2.7
    assertNotIn(a, b) a not in b 2.7
    assertIsInstance(a, b) isinstance(a, b) 2.7
    assertNotIsInstance(a, b) not isinstance(a, b) 2.7

    相关文章

      网友评论

          本文标题:Hello PyUnitTest

          本文链接:https://www.haomeiwen.com/subject/vevjhttx.html