zoukankan      html  css  js  c++  java
  • Python单元测试框架——unittest

    一、Pyhon工作原理—— 核心概念:test case, testsuite, TestLoder,TextTestRunner,TextTestResult, test fixture

    TestCase(测试用例): 所有测试用例的基类,它是软件 测试中最基本的组成单元。

                       一个test case就是一个测试用例,是一个完整的测试流程,包括测试前环境的搭建setUp,执行测试代码(run),以及测试后环境的还原(tearDown)。测试用例是一个完整的测试单元,可以对某一问题进行验证。

    TestSuite(测试套件):多个测试用例test case集合就是TestSuite,TestSuite可以嵌套TestSuite

    TestLoder:是用来加载 TestCase到TestSuite中,其中有几个loadTestsFrom_()方法,就是从各个地方寻找TestCase,创建他们的实例,然后add到TestSuite中,再返回一个TestSuite实例

    TextTestRunner:是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。

     TextTestResult:测试结果会保存到TextTestResult实例中,包括运行了多少用例,成功与失败多少等信息

    TestFixture:又叫测试脚手,测试代码的运行环境,指测试准备前和执行后要做的工作,包括setUp和tearDown方法

    二、测试流程:

    1. 写好TestCase:一个class继承unittest.TestCase,就是一个测试测试用例,其中有多个以test开头的方法,那么 每一个这样的,在load的时候会生成一个TestCase实例。如果一个class中有四个test开头的方法,最后load到suite中时则有四个测试用例

    2. 由TestLoder加载TestCase到TestSuite

    3.然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中。

    说明:a:通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者可以直接通过TextTestRunner来执行用例

    b:Runner执行时,默认将结果输出到控制台,我们可以设置其输出到文件,在文件中查看 结果,也可以通过HTMLTestRunner将结果输出到HTML)

    三、unittest实例:

    1.准备待测方法:

    mathfunc.py

    2. 为以上方法写测试:

    这就是一个简单的测试,有几点需要说明的:

           a:在第一行给出了每一个用例执行的结果的标识,成功是 .,失败是 F,出错是 E,跳过是 S。从上面也可以看出,测试的执行跟方法的顺序没有关系,test_divide写在了第4个,但是却是第2个执行的。

            b:每个测试方法均以 test 开头,否则是不被unittest识别的。

            c:在unittest.main()中加 verbosity 参数可以控制输出的错误报告的详细程度,默认是 1,如果设为 0,则不输出每一用例的执行结果,即没有上面的结果中的第1行;如果设为 2,则输出详细的执行结果

    3.组织TestSuite

            a:确定测试用例的顺序,哪个先执行哪个后执行?

             b:如果测试文件有多个,怎么进行组织?

    TestLoder加载TestCase几种方法

    4. 生成结果到文件:

    5. test fixture——setUp(),tearDown()方法

    setUp() 和 tearDown() 两个方法(其实是重写了TestCase的这两个方法),这两个方法在每个测试方法执行前以及执行后执行一次,setUp用来为测试准备环境,tearDown用来清理环境,已备之后的测试。

    class TestMathFunc(unittest.TestCase):

    # setUp 和 tearDown方法会在每个测试方法执行前及执行后执行一次,setUp用来为测试准备环境,tearDown用来清理环境已备之后的测试
    def setUp(self):
    print 'do something before test.prepare environment'

    def tearDown(self):
    print 'do something after test.clean up'
    如果想要在所有case执行之前准备一次环境,并在所有case执行结束之后再清理环境,我们可以用 setUpClass() 与tearDownClass():
    class TestMathFuncTwo(unittest.TestCase):

    #如果想要在所有case执行之前准备一次环境,并在所有case执行结束后再清理环境,我们可以用setUpClass()与tearDownClass(),注意:@classmethod必须加,否则报错
    @classmethod
    def setUpClass(cls):
    print 'This setUpClass() method only called once'

    @classmethod
    def tearDownClass(cls):
    print 'This tearDownClass() method only called once too'
    6. 跳过某个case

    7. 用HTMLTestRunner输出HTML报告

    HTMLTestRunner是一个第三方的unittest HTML报告库,首先我们下载HTMLTestRunner.py,并放到当前目录下,或者你的’C:Python27Lib’下,就可以导入运行了

    ps:本文有部分内容摘自网络,链接:http://blog.csdn.net/huilan_same/article/details/52944782

    
    
  • 相关阅读:
    LINQ学习(1)
    [转]键盘上的标点符号的中英文名称对照表
    微信Android ANR原理解析及解决方案
    IOS错误日志抓取和分析
    蚂蚁金服测开面试题--转账功能
    MySQL CONV()函数
    分页功能
    在alert里面加入一个页面,子页面传值父页面
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; che
    缘起 网络编程
  • 原文地址:https://www.cnblogs.com/fennudexiaoniao/p/7771931.html
Copyright © 2011-2022 走看看