unittest(python)

1 篇文章 0 订阅
1 篇文章 0 订阅

一级目录

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

还把把固定的参数改为可以变的参数就行



























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值