Python单元测试-unittest2

Python单元测试-unittest2,第1张

一、实际 *** 作(测试数据固定)

1.步骤:

开发人员创建一个计算加减的py文件,并进行代码编辑

#创建一个计算类
class CalcClass():
    #创建加法方法
    def add(self,a,b):
        return a+b
    #创建减法方法
    def reduce(self,a,b):
        return a-b

#自测
if __name__ == '__main__':
    c=CalcClass()
    print(c.add(4,2))
    print(c.reduce(6,3))

测试人员创建一个单元测试的py文件,并进行代码编辑

  • 调用setUp(self),tearDown(self)方法实现测试用例前后阶段的 *** 作(本案例较为简单,此步骤省略)
from calcDemo.calc import CalcClass
#导入unittest模块
import unittest

#编写测试类继承unittest.TestCase
class CalcTestClass(unittest.TestCase):
    #测试用例以test开头
    def testCalcAdd(self):
        c=CalcClass()
        result=c.add(2,3)
        #断言
        self.assertEqual(result,5)
    def testCalcReduce(self):
        c=CalcClass()
        result=c.reduce(6,2)
        self.assertEqual(result,4)

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

③把HTMLTestRunner.py存到工具包下,测试人员创建一个生成测试报告的py文件,并进行代码编辑

#导入HTMLTestRunner
from common.HTMLTestRunner import HTMLTestRunner
#导入单元测试模块
from testDemo.testCalc import CalcTestClass
import unittest

class CalcHtmlClass():
    def htmlMethod(self):
        #创建测试套件
        suite = unittest.TestSuite()
        #创建列表储存测试用例名
        testList = ["testCalcAdd", "testCalcReduce"]
        for test_i in testList:
            suite.addTest(CalcTestClass(test_i))
        #生成测试报告,以二进制形式写入
        with open("../calcReport.html", "wb") as obj:
            HTMLTestRunner(
                stream=obj,
                title="单元测试",
                description="测试一期",
                verbosity=2
            ).run(suite)  # 执行测试套件

#实例化调用方法
c=CalcHtmlClass()
c.htmlMethod()

二、读取文件

1.定义:把测试数据放在文件里,读取数据在测试用例中使用,实现数据和业务分离,从而不用过多改动代码

2.读取xml文件

①xml介绍:

  • 是一种可扩展标记语言,标签没有被预定,可自行定义标签
  • 与html相似却又不同,xml用于传输和存储数据,在意数据本身;html用来显示数据,在意数据的外观

②xml特点:

  • 可自定义标签,自由命名
  • 标签可以重复
  • 必须包含根元素(其他元素的父元素)
  • 必须有关闭标签
  • 对大小写敏感
  • 必须正确嵌套(比如b标签在a标签里打开,就必须在a标签里关闭)
  • 标签的属性值必须加引号(

③xml的注释:

④xml元素的命名规则:

  • 可以包含字母、数字及其他字符
  • 不能以数字或标点符号开头
  • 不能以xml、Xml、XML开头
  • 不能包含空格

⑤步骤:

  • 创建一个data包,在包下创建一个xml文件用于存储测试数据,根据情况自定义标签
  • 创建一个readData包,在包下创建一个py文件用于读取xml文件的测试数据
#导入读取xml文件的模块
from xml.dom import minidom

class ReadXmlClass():
    def read_xml(self,filename,firstname,secondname):
        #解析xml文件数据
        root =minidom.parse(filename)
        #根据标签名和索引获取元素
        firstnode =root.getElementsByTagName(firstname)[0]
        #根据父标签获取子标签,根据子标签的名称和索引获取元素
        secondnode=firstnode.getElementsByTagName(secondname)[0].firstChild.data
        return secondnode
  • 测试人员创建一个单元测试的py文件,并进行代码编辑
#获取xml数据
from readData.readXml import ReadXmlClass
#获取开发的代码
from calcDemo.calc import CalcClass
import unittest

#实例化读取xml文件
r=ReadXmlClass()
#读取出来的数据为string类型,可根据情况类型转换
addData1=r.read_xml("../data/xmlData.xml","add","num1")
addData2=r.read_xml("../data/xmlData.xml","add","num2")
addData3=r.read_xml("../data/xmlData.xml","add","expection")
reduceData1=r.read_xml("../data/xmlData.xml","reduce","num1")
reduceData2=r.read_xml("../data/xmlData.xml","reduce","num2")
reduceData3=r.read_xml("../data/xmlData.xml","reduce","expection")

class XmlClass(unittest.TestCase):
    #执行每个测试用例的前置和后置条件
    def setUp(self) -> None:
        print("start")
    def tearDown(self) -> None:
        print("end")
    #测试加法
    def testAdd(self):
        c=CalcClass()
        result=c.add(int(addData1),int(addData2))
        self.assertEqual(result,int(addData3))
    #测试减法
    def testReduce(self):
        c = CalcClass()
        result = c.reduce(int(reduceData1), int(reduceData2))
        self.assertEqual(result, int(reduceData3))

if __name__ == '__main__':
    unittest.main()
  • 把HTMLTestRunner.py存到工具包下,测试人员创建一个生成测试报告的py文件,并进行代码编辑
#导入HTMLTestRunner
from common.HTMLTestRunner import HTMLTestRunner
#导入单元测试模块
from testDemo.testXml import XmlClass
import unittest

class XmlHtmlClass():
    def htmlMethod(self):
        #创建测试套件
        suite = unittest.TestSuite()
        #创建列表储存测试用例名
        testList = ["testAdd", "testReduce"]
        for test_i in testList:
            suite.addTest(XmlClass(test_i))
        #生成测试报告,以二进制形式写入
        with open("../xmlReport.html", "wb") as obj:
            HTMLTestRunner(
                stream=obj,
                title="单元测试",
                description="测试一期",
                verbosity=2
            ).run(suite)  # 执行测试套件

#实例化调用方法
c=XmlHtmlClass()
c.htmlMethod()

3.读取csv文件

①介绍:csv文件的数据用逗号隔开

②步骤:

  • 创建一个data包,在包下创建一个csv文件用于存储测试数据,根据情况自定义标签
  • 创建一个readData包,在包下创建一个py文件用于读取csv文件的测试数据
#导入csv模块
import csv

class ReadCsvClass():
    def read_csv(self):
        #定义一个空列表
        item =[]
        #得到csv文件对象
        c = csv.reader(open("../data/csvData.csv","r"))
        for csv_i in c:
            #将获取的数据添加到列表中
            item.append(csv_i)
        return item
  • 测试人员创建一个单元测试的py文件,并进行代码编辑
#获取csv数据
from readData.readCsv import ReadCsvClass
#获取开发的代码
from calcDemo.calc import CalcClass
import unittest

#实例化读取csv文件
r=ReadCsvClass()
#读取出来的数据为string类型,可根据情况类型转换
data=r.read_csv()

class CsvClass(unittest.TestCase):
    #执行每个测试用例的前置和后置条件
    def setUp(self) -> None:
        print("start")
    def tearDown(self) -> None:
        print("end")
    #测试加法
    def testAdd(self):
        c=CalcClass()
        #遍历列表获取值
        for data_i in data:
            result=c.add(int(data_i[0]),int(data_i[1]))
            #断言
            self.assertEqual(result,int(data_i[2]))

if __name__ == '__main__':
    unittest.main()
  • 把HTMLTestRunner.py存到工具包下,测试人员创建一个生成测试报告的py文件,并进行代码编辑
#导入HTMLTestRunner
from common.HTMLTestRunner import HTMLTestRunner
#导入单元测试模块
from testDemo.testCsv import CsvClass
import unittest

class CsvHtmlClass():
    def htmlMethod(self):
        #创建测试套件
        suite = unittest.TestSuite()
        #创建列表储存测试用例名
        testList = ["testAdd"]
        for test_i in testList:
            suite.addTest(CsvClass(test_i))
        #生成测试报告,以二进制形式写入
        with open("../csvReport.html", "wb") as obj:
            HTMLTestRunner(
                stream=obj,
                title="单元测试",
                description="测试一期",
                verbosity=2
            ).run(suite)  # 执行测试套件

#实例化调用方法
c=CsvHtmlClass()
c.htmlMethod()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存