Python单元测试之unittest

一、单元测试、集成测试、功能测试

单元测试

颗粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”;是指对软件中的最小可测试单元进行检查和验证

集成测试

介于单元测试和系统测试之间,一般由开发小组采用白盒+黑盒的方法来测试,即验证“设计”又验证“需求”。主要用来测试模板与模板之间的接口,同时还要测试一些主要的业务功能。

功能测试

颗粒度最大,一般由独立的测试小组采用黑盒的方式来测试,主要测试系统是否符合“需求规格说明书

白盒测试

主要应用于单元测试阶段,主要是对代码级别的测试,针对程序内部的逻辑结构

黑盒测试

测试系统的功能是否满足“需求规格说明书

二、Unittest重要组成

1.TestFixture

作用:用于一个测试环境的准备和销毁还原

功能:当测试用例每次执行之前需要准备测试环境,每次测试完成后还原测试环境

主要方法:

setUp():准备环境,执行每个测试用例的前置条件;

tearDown():环境还原,执行每个测试用例的后置条件;

setUpClass():必须使用@classmethod装饰器,所有case执行的前置条件,只运行一次;

tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次;

2.TestCase:测试用例

定义:一个类class继承 unittest.TestCase,就是一个测试用例

测试用例:就是一个完整的测试流程

包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)

测试用例命名规则

测试方法的名称要以test开头。只会执行以test开头定义的方法

3.TestSuite:测试套件

可以将多个测试用例集合在一起,能一起执行选中的测试用例

suite = unittest.TestSuite()#创建测试套件

case_list = [“test1”,”test2”….]

For case in case_list:

    suite.addTest(类名(case))

    案例:

            if __name__ == '__main__':

                # unittest.main

                suite = unittest.TestSuite()

                caseList = ["test001", "test002"]

                for case in caseList:

                    suite.addTest(UnitTestTwo(case))

                # 运行测试用例

                runner = unittest.TextTestRunner(verbosity=2)

                runner.run(suite)

5.TextRunner:执行测试用例

runner = unittest.TextTestRunner(verbosity=2)

runner.run(suite)

verbosity :表示测试报告信息的详细程度,一共三个值,默认是2

0 (静默模式):你只能获得总的测试用例数和总的结果,如:总共100个 失败10 成功90

1 (默认模式):类似静默模式,只是在每个成功的用例前面有个. 每个失败的用例前面有个F

2 (详细模式):测试结果会显示每个测试用例的所有相关的信息三

三、断言

断言:验证预期结果和实际结果

assertEqual(a,b):断言a和b是否相等,相等则测试用例通过。

assertNotEqual(a,b):断言a和b是否相等,不相等则测试用例通过。

assertTrue(x):断言x是否True,是True则测试用例通过。

assertFalse(x):断言x是否False,是False则测试用例通过。

assertIs(a,b):断言a是否是b,是则测试用例通过。

assertNotIs(a,b):断言a是否是b,不是则测试用例通过。

assertIsNone(x):断言x是否None,是None则测试用例通过。

assertIsNotNone(x):断言x是否None,不是None则测试用例通过。

assertIn(a,b):断言a是否在b中,在b中则测试用例通过。

assertNotIn(a,b):断言a是否在b中,不在b中则测试用例通过。

assertIsInstance(a,b):断言a是是b的一个实例,是则测试用例通过。

assertNotIsInstance(a,b):断言a是是b的一个实例,不是则测试用例通过。

四.生成测试报告

过程:先创建开发和测试的包→拷贝开发代码、对开发代码测试→将HTMLTestRunner.py拷贝到项目中→进行生成测试报告

with open("../report.html","wb") as f:

            HTMLTestRunner(

                stream=f,

          title="单元测试",

                description="测试一期",

                verbosity=2

            ).run(suite)

stream:指定输出的方式

description:报告中要显示的面熟信息

title:测试报告的标题

verbosity :表示测试报告信息的详细程度,一共三个值,默认是2

0 (静默模式):你只能获得总的测试用例数和总的结果,如:总共100个 失败10 成功90

1 (默认模式):类似静默模式,只是在每个成功的用例前面有个. 每个失败的用例前面有个F

2 (详细模式):测试结果会显示每个测试用例的所有相关的信息

五、读取xml文件

创建xml文件→在xml文件中输入数据→读取

读取:

from xml.dom import minidom

class Readxml():

    def read_xml(self,filename,onename,twoname):

        root =minidom.parse(filename)

        firstnode =root.getElementsByTagName(onename)[0]

        secondnode=firstnode.getElementsByTagName(twoname)[0].firstChild.data

        return secondnode

r = Readxml()

print(r.read_xml('../data/xmltestdata.xml', 'add', 'add3'))

六、读取csv文件

创建一个csv文件→创建读csv文件的文件→进行读取

导入csv文件

import csv  #导入csv模块

class ReadCsv():

    def read_csv(self):

        item =[]    #定义一个空列表

        c = csv.reader(open("../commonDemo/test1.csv","r"))    #得到csv文件对象

        for csv_i in c:

            item.append(csv_i)      #将获取的数据添加到列表中

        return item


r = ReadCsv()

print(r.read_csv())

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容