unittest

作者: h枯心易凉 | 来源:发表于2021-07-28 21:41 被阅读0次


    unittest中最核心的部分是:TestFixture、TestCase、TestSuite、TestRunner

    TestFixture

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

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

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

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

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

    TestCase:测试用例

    importunittestclassCalc_testcase(unittest.TestCase):defsetUp(self):测试用例方法执行前的操作print("start")deftest1(self):测试用例,方法名称必须以test开头        resl=4self.assertEqual(resl,5)deftearDown(self):测试用例方法执行后的操作print("end")if__name__=="__main__":unittest.main()调用测试用例中以test开头的方法,直接输入main

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

    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)

    TextRunner

    执行测试用例

    通过TextTestRunner类提供的run()方法来执行test suite/test cas

    格式:

    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的一个实例,不是则测试用例通过。

    生成测试报告

    1:导入unittest模块  >>>import unittest

    2:编写一个类继承unittest.TestCase

    3:调用setUp(self), tearDown(self)方法实现测试用例前后阶段的操作

    4:编写测试用例方法

    (1)该方法必须以test开头,否则在unittest.main()中调用测试找不到该方法

    (2)设置断言进行判断,输入数据和输出数据的预期结果

    5:创建套件,将多个测试用例存放套件中,一并执行()

    6:生成测试报告(python自带或者导入HTMLTestRunner生成html格式的测试报告)

    7:运行测试用例unittest.main(),调用测试用例中以test开头的方法

    读取xml文件

    fromxml.domimportminidomclassReadxml():defread_xml(self,path,onename,twoname):root=minidom.parse(path)firstnode=root.getElementsByTagName(onename)[0]secondnode=firstnode.getElementsByTagName(twoname)[0].firstChild.datareturnsecondnoder=Readxml()print(r.read_xml(path,'add','add3'))

    具体应用:

    importunittestfromdev.CaculateimportCaculatefromreaddata.readxmldataimportReadxmlc=Caculate()r=Readxml()a1=r.read_xml('../data/xmltestdata.xml','add','add1')a2=r.read_xml('../data/xmltestdata.xml','add','add2')a3=r.read_xml('../data/xmltestdata.xml','add','add3')r1=r.read_xml('../data/xmltestdata.xml','reduce','reduce1')r2=r.read_xml('../data/xmltestdata.xml','reduce','reduce2')r3=r.read_xml('../data/xmltestdata.xml','reduce','reduce3')classUnitTestTwo(unittest.TestCase):defsetUp(self)->None:print("开始")deftest001(self):sum=c.add(int(a1),int(a2))self.assertEqual(sum,int(a3))deftest002(self):dif=c.reduce(int(r1),int(r2))self.assertEqual(dif,int(r3))deftearDown(self)->None:print("结束")if__name__=='__main__':unittest.main

    读取csv文件

    importcsv  导入csv模块classReadCsv():defread_csv(self):item=[]定义一个空列表        c=csv.reader(open(path,"r"))得到csv文件对象forcsv_iinc:item.append(csv_i)将获取的数据添加到列表中returnitem            r=ReadCsv()print(r.read_csv(path))

    具体使用:

    importunittestfromdev.CaculateimportCaculatefromreaddata.readcsvimportReadCsvc=Caculate()r=ReadCsv()classUnitTestTwo(unittest.TestCase):defsetUp(self)->None:print("开始")deftest001(self):passforiinr.readCsv(path):add=c.add(int(i[0]),int(i[1]))self.assertEqual(add,int(i[2]))deftearDown(self)->None:print("结束")if__name__=='__main__':unittest.main


    相关文章

      网友评论

          本文标题:unittest

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