一、实际 *** 作(测试数据固定)
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()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)