• Selenium2+python自动化51-unittest简介【转载】


    前言

    熟悉java的应该都清楚常见的单元测试框架Junit和TestNG,这个招聘的需求上也是经常见到的。python里面也有单元测试框架-unittest,相当于是一个python版的junit。

    python里面的单元测试框架除了unittest,还有一个pytest框架,这个用的比较少,后面有空再继续分享。

    一、unittest简介

    1.先导入unittest

    2.用help函数查看源码解析

    3.查看描述:

    Python unit testing framework, based on Erich Gamma's JUnit and Kent Beck's Smalltalk testing framework.

    翻译:python的单元测试框架,是基于java的junit测试框架

    二、简单用法

    1.可以把上图的这段代码copy出来,单独运行,看看测试结果。

        Simple usage:
        
            import unittest
        
            class IntegerArithmeticTestCase(unittest.TestCase):
                def testAdd(self):  ## test method names begin 'test*'
                    self.assertEqual((1 + 2), 3)
                    self.assertEqual(0 + 1, 1)
                def testMultiply(self):
                    self.assertEqual((0 * 10), 0)
                    self.assertEqual((5 * 8), 40)
        
            if __name__ == '__main__':
                unittest.main()

    2.第一行是导入unittest这个模块

    3.class这一行是定义一个测试的类,并继承unittest.TestCase这个类

    4.接下来是定义了两个测试case名称:testAdd和testMultiply

    5.注释里面有句话很重要,这个要敲下黑板记笔记了:## test method names begin 'test*'

    --翻译:测试用例的名称要以test开头

    6.然后是断言assert,这里的断言方法是assertEqual-判断两个是否相等,这个断言可以是一个也可以是多个

    7.if下面的这个unittest.main()是运行主函数,运行后会看到测试结果(跑了两个用例耗时0.000秒,两个用例都通过):

    ..
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s

    OK

    三、小试牛刀

    1.上面的两个案例是加法和乘法,我们可以写个case试下减法和除法。

    2.有很多小伙伴不知道断言怎么写,断言其实就是拿实际结果和期望结果去对比,对比的方法很多,这里只是举的最简单的一个判断相等的方法。

    3.最后运行结果,第二个是失败的,失败原因:AssertionError: 3 != 3.5

    F.
    ======================================================================
    FAIL: testDivide (__main__.Test)
    这里是测试除法
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "D:/test/web-project/p.py", line 14, in testDivide
        self.assertEqual(result, hope)
    AssertionError: 3 != 3.5

    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s

    FAILED (failures=1)

    四、前置和后置

    1.setUp:在写测试用例的时候,每次操作其实都是基于打开浏览器输入对应网址这些操作,这个就是执行用例的前置条件。

    2.tearDown:执行完用例后,为了不影响下一次用例的执行,一般有个数据还原的过程,这就是执行用例的后置条件。

    3.很多人执行完用例,都不去做数据还原,以致于下一个用例执行失败,这就是不喜欢擦屁股的事情,习惯不好。

    4.前置和后置都是非必要的条件,如果没有也可以写pass

    五、博客案例

    1.打开博客首页为例,写一个简单的case

    2.判断title完全等于期望结果

    3.运行通过,下面会有一个绿条显示:1 test passed

    六、参考代码

    # coding=utf-8
    from selenium import webdriver
    from selenium.webdriver.support import expected_conditions as EC
    import time
    import unittest

    class Blog(unittest.TestCase):

        def setUp(self):
            self.driver = webdriver.Firefox()
            self.driver.get("http://www.cnblogs.com/yoyoketang")

        def test_blog(self):
            # 交流QQ群:232607095
            time.sleep(3)
            result = EC.title_is(u'上海-悠悠 - 博客园')(self.driver)
            print result
            self.assertTrue(result)

        def tearDown(self):
            self.driver.quit()

    if __name__ == "__main__":
        unittest.main()

  • 相关阅读:
    用批处理实现映射盘网络盘为固定盘符,请更改冲突的硬盘盘符
    linux下mysql寻找my.cnf顺序
    php写memcached ,c读取乱码问题[转]
    linux下boost安装方法
    解决php soap webservice 用c++ soap调用的问题[转]
    【转载】Servlet生命周期与工作原理
    【转载】深入理解Java多态性
    JSP中几个常用的参数与中文乱码问题
    获取数据库连接
    dom4j简单实例
  • 原文地址:https://www.cnblogs.com/caoj/p/7814222.html
Copyright © 2020-2023  润新知