这里写目录标题
一级目录
1、首先我们创建一个Python项目
2、然后写一个开发的文件就是funDemo文件,然后在funDemo文件中创建一个kaifa.py
如一下代码
class KfDemo(): # 创建 一个类
def jiafa(self,a,b): # 创建函数加法,传两个参数a,b
c=a+b
return c # 返回c
def jianfa(self,a,b): # 创建函数减法,传两个参数a,b
c=a-b
return c # 返回c
if __name__ == '__main__':
kf=KfDemo()
print(kf.jiafa(20,10))
print(kf.jianfa(20,10))
'''
这样可以打印出数字的运算结果
# kf=KfDemo()
# print(kf.jiafa(20,10))
# print(kf.jianfa(20,10))
'''
'''
如果是公司开发的haunt,我们在测试的时候不能动别人的代码
我们只能自己在创建一个文件夹去调用开发里面的信息
'''
3、接着呢创建一个测试文件夹ceshiDemo,在ceshiDemo中创建一个test1文件
from funDemo.kfDemo import KfDemo # 导入funDemo模块
import unittest
class Test(unittest.TestCase): # 继承类 unittest.TestCase
'''
一个类class继承 unittest.TestCase,就是一个测试用例。
什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。
'''
def setUp(self)-> None: #测试用例方法执行前的操作
print('start')
def test1(self): #测试用例1
c = KfDemo() # 调用开发的类
a = c.jiafa(20, 10) # 给类传值并给赋值
# 断言
self.assertEqual(a, 30)
# a 是实际结果,30是预期结果,如果两个结果一样输出结果,不一样报错
return a
@unittest.skip('代码注销') # 如果想跳过某个测试用例,@unittest.skip(‘描述信息')
def test2(self): #测试用例2
c = KfDemo() # 调用开发的类
a = c.jianfa(20, 10) # 给类传值并给赋值
# 断言
self.assertEqual(a, 30)
# a 是实际结果,30是预期结果,如果两个结果一样输出结果,不一样报错
return a
def tearDown(self): #测试用例方法执行后的操作
print('end')
if __name__ == '__main__':
unittest.main() #调用测试用例中以test开头的方法
有 @unittest.skip(‘代码注销’)的结果
没有 @unittest.skip(‘代码注销’)的结果
4、如何将测试用例在网页上展示呢?
我们建立一个useunittestsuit.py来调用它
from ceshiDemo.test1 import Test
from commondome.HTMLTestRunner import HTMLTestRunner
import unittest
class UnistSuit():
def show(self):
'''
测试套件,可以将多个测试用例集合在一起,能一起执行选中的测试用例
'''
su = unittest.TestSuite()#创建测试套件
list_cases = ["test1","test2"]
for list_case in list_cases:
su.addTest(Test(list_case))
with open("../report.html",'wb')as f:
# 在文件根目录生成一个HTML文件,以wb二进制流方式添加
HTMLTestRunner(
stream=f, # 指定输出的方式
verbosity=2, #表示测试报告信息的详细程度,一共三个值,默认是2
title='加法运算', #标题
description='加法运算的结果' # 描述
).run(su) # 以.run的方式运行,输入测试套件
if __name__ =="__main__":
UnistSuit().show()
5、在这需要一个插件HTMLTestRunner.py,网上很好搜的
把这个文件放在commondemo文件下面,然后from commondome.HTMLTestRunner import HTMLTestRunner 导入
生成后的文件就会出现在根目录
6、在此时我们会想到,如果前面的参数变了,我们怎么办
我们可不可以去拿文件里面的数据,
那么我接下来创建一个xml文件,在当前文件下创建
<!--根标签,根元素-->
<note>
<add>
<add1>1</add1>
<add2>1</add2>
<except>0</except>
</add>
<add>
<add1>2</add1>
<add2>3</add2>
<except>5</except>
</add>>
</note>
<!--闭合标签-->
7、然后我们再创建一个reddatd文件夹,文件夹内创建read.py文件
# 人生苦短,我用Python,日期:{2020/9/16}
from xml.dom import minidom #
class ReadXml():
def read_xml(self, path, one, two):
root = minidom.parse(path) # 打开数据 filepath路径
firstnode = root.getElementsByTagName(one)[0] # 获取到元素,根据低坐标索引形式获取的
secondnode = firstnode.getElementsByTagName(two)[0].firstChild.data
return secondnode
r = ReadXml()
add1 = r.read_xml('../commondome/textxml', 'add', 'add1')
add2 = r.read_xml('../commondome/textxml', 'add', 'add2')
except1 = r.read_xml('../commondome/textxml', 'add', 'except')
print(add1,add2,except1)
8、再test1的 基础上行修改成了test_xml文件
from funDemo.kfDemo import KfDemo # 导入funDemo模块
from reddatd.readXml import ReadXml
import unittest
r = ReadXml()
add1 = r.read_xml('../commondome/textxml', 'add', 'add1')
add2 = r.read_xml('../commondome/textxml', 'add', 'add2')
except1 = r.read_xml('../commondome/textxml', 'add', 'except')
class Test(unittest.TestCase): # 继承类 unittest.TestCase
'''
一个类class继承 unittest.TestCase,就是一个测试用例。
什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。
'''
def setUp(self)-> None: #测试用例方法执行前的操作
print('start')
def test1(self): #测试用例1
c = KfDemo() # 调用开发的类
a = c.jiafa(int(add1), int(add2)) # 给类传值并给赋值
# 断言
self.assertEqual(a, int(except1))
# a 是实际结果,30是预期结果,如果两个结果一样输出结果,不一样报错
return a
# @unittest.skip('代码注销') # 如果想跳过某个测试用例,@unittest.skip(‘描述信息')
def test2(self): #测试用例2
c = KfDemo() # 调用开发的类
a = c.jianfa(int(add1), int(add2)) # 给类传值并给赋值
# 断言
self.assertEqual(a, int(except1))
# a 是实际结果,30是预期结果,如果两个结果一样输出结果,不一样报错
return a
def tearDown(self): #测试用例方法执行后的操作
print('end')
if __name__ == '__main__':
unittest.main() #调用测试用例中以test开头的方法
9、这样我们就可以拿到xml文件的数据了
文件目录
=10、CSV文件的读取
可以将记事本改为CSV文件
为什么创建这么多文件夹呢,是因为好区分
import csv
class ReadCsv():
def read_csv(self):
item = []
#a = csv.reader(open('../commondome/textcsv.csv','r'))
a = csv.reader(open(r'D:\testing_software\pythontest\unittest\commondome/textcsv.csv','r'))
for csv_i in a:
item.append(csv_i)
return item
# r = ReadCsv()
# r.read_csv()
# print(r.read_csv())
在拿取CSV文件的时候相对路径怎么也找不到文件,后来干脆直接给你绝对路径
我们在创建一个测试文件,用来调用刚才的两个文件数据 我们在test1 基础上再修改修一下(就是复制test1中的代码,稍作修改)话不多说上代码
#人生苦短,我用Python,日期:{2020/9/17}
import unittest
from funDemo.kfDemo import KfDemo # 导入funDemo模块
from reddatd.readcsv import ReadCsv
r=ReadCsv()
r.read_csv()
# print(r.read_csv())
class Test(unittest.TestCase): # 继承类 unittest.TestCase
'''
一个类class继承 unittest.TestCase,就是一个测试用例。
什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。
'''
def setUp(self): #测试用例方法执行前的操作
print('start')
def test1(self): #测试用例1
for i in r.read_csv():
print(i)
c = KfDemo() # 调用开发的类
a = c.jiafa(int(i[0]), int(i[1])) # 给类传值并给赋值
self.assertEqual(a, int(i[2]))
def tearDown(self): #测试用例方法执行后的操作
print('end')
if __name__ == '__main__':
unittest.main() #调用测试用例中以test开头的方法
还把把固定的参数改为可以变的参数就行