ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python unittest单元测试

2021-06-03 21:01:39  阅读:148  来源: 互联网

标签:__ xml python unittest 单元测试 import self def


python unittest单元测试


1.一个简单的单元测试

  1. unittest介绍:它是python中自带的单元测试模块,用来做单元测试,它里面封装好了一些校验返回结果方法(断言)和一些用例执行前的初始化操作。

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

    TestFixture:用于测试环境的准备,销毁,还原。 主要方法:setUp(),tearDown(),setUpClass(),tearDownClass()

    TestCase: 测试用例

    TestSuite:组件,测试用例的集合

    TestRunner:执行测试用例

import unittest                 # 导包
class UnittestTestClass(unittest.TestCase):   # 继承unittest.TestCase
    def setUp(self):                    # unittest组件之一
        print("------------start-----------------")
    def test001(self):                # unittest的测试用例,必须以test开头,后面根据ascii码执行
        print("It is first testcase")
    def test002(self):				
        a = 2
        b = 5
        c = a+b
        self.assertEqual(c, 7)        # unittest 自带的断言,类似的还有很多,该处是判断是否相等
        print("It is second testcase")
    def tearDown(self):            # unittest组件之一   结束组件  
        print("------------end-------------------")
 if __name__ =="__main__":
    unittest.main()       #调用测试用例中以test开头的方法

2.生成测试报告

准备工作:提前下载HTMLTestRunner.py文件,

HTML格式就是HTML TestRunner了,它是python标准库unittest的一个扩展,可以生成直观的HTML报告。

步骤:

  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开头的方法

# demo:开发写的需要测试的代码;
# html:下载的report扩展包;
# test001:存放单元测试脚本的代码;
# aaa.py
class BaseClass(object):                 
    def add(self, a, b):
        return a * b

    def reduce(self, a, b):
        return a / b


base = BaseClass()
base.reduce(2, 5)
base.add(4, 6)
# bianjireport.py
import unittest
from html.HTMLTestRunner import HTMLTestRunner
from test001.unittest01 import UnittestTestClass


class BjClass(object):
    def ceshi(self):
        suite = unittest.TestSuite()
        case_list = ["test001", "test002"]
        for case in case_list:
            suite.addTest(UnittestTestClass(case))
        with open("../report.html", "wb") as f:
            HTMLTestRunner(
                stream=f,
                title="单元测试",
                description="测试一期",
                verbosity=2
            ).run(suite)


if __name__ == '__main__':
    ceshi = BjClass()
    ceshi.ceshi()
# unittest01.py
import unittest
from demo.aaa import BaseClass

base = BaseClass()
one = base.add(2, 8)
tow = base.reduce(2, 8)


class UnittestTestClass(unittest.TestCase):             # 继承TestCase 
    def setUp(self):
        print("------------start-----------------")

    def test001(self):
        self.assertEqual(10, 9)

    def test002(self):
        self.assertEqual(-6, 0)
        print("It is second testcase")

    def tearDown(self):
        print("------------end-------------------")


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

3.读取xml文件

# test.xml    xml数据存放位置
# readXML     读取xml文件数据的代码
# testxml     编写读取测试用例的测试
# test.xml
<?xml version="1.0"?>
<note>
<cheng>
<cheng1>2</cheng1>
<cheng2>3</cheng2>
<cheng3>6</cheng3>
</cheng>
<chu>
<chu1>5</chu1>
<chu2>6</chu2>
<chu3>3</chu3>
</chu>
</note>
# readxml.py
from xml.dom import minidom        # 导入xml文件读取的包


class ReadXmlClass():
    def read_xml(self, filename, onename, twoname):
        root = minidom.parse(filename)
        firstname = root.getElementsByTagName(onename)[0]
        secondnode = firstname.getElementsByTagName(twoname)[0].firstChild.data
        return secondnode

# readxml = ReadXmlClass()
# print(readxml.read_xml("../html/test.xml", "cheng", "cheng3"))
# testxml.py
import unittest 
from demo.aaa import *       # 导入开发写的代码
from readdata.readxml import *    # 导入读取xml文件的脚本

readxml = ReadXmlClass()   # 实例化
zz = int(readxml.read_xml("../html/test.xml", "cheng", "cheng1"))   # 取值
xx = int(readxml.read_xml("../html/test.xml", "cheng", "cheng2"))
yy = int(readxml.read_xml("../html/test.xml", "cheng", "cheng3"))
c = BaseClass()
rr = c.cheng(zz, xx)


class TestXml(unittest.TestCase):
    def test001(self):
        self.assertEqual(rr, yy)         # 断点验证数据的正确性


if __name__ == '__main__':
    unittest.main()           # main()方法直接运行测试用例

4.读取CSV文件

​ 思路和xml一样

文件命名和xml相似

# test.csv
2,5,7
2,4,8
# readcsv.py
import csv  # 导入CSV模块


class ReadCsvClass():
    def read_csv(self):
        list01 = []  # 定义一个空列表
        c = csv.reader(open("../html/test.csv", "r"))  # 得到CSV文件
        for i in c:
            list01.append(i)
        return list01
# r = ReadCsvClass()
# aa = r.read_csv()
# print(aa)
# testcsv.py
import unittest
from readdata.readcsv import *  # 导入数据
from demo.aaa import *

r = ReadCsvClass()  # 实例化
lists = r.read_csv()  # 拿到返回的列表
c = BaseClass()


class TestCsv(unittest.TestCase):
    def testcsv(self):
        for i in lists:
            rr = c.cheng(int(i[0]), int(i[1]))
            self.assertEqual(rr, int(i[2]))  # unittest断点


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

标签:__,xml,python,unittest,单元测试,import,self,def
来源: https://www.cnblogs.com/zjldeboke/p/14847159.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有