IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 024python-unittest测试框架 -> 正文阅读

[开发测试]024python-unittest测试框架

?单元测试的本质 测试函数 代码级别的

单元测试的框架 unittest+接口学习 pytest+web学习,学习后可以运用到接口

????????unittest 是python 的单元测试框架,unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import unittest 就可以使用。

????????作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。在自动化测试中,必须需要知道所使用语言的单元测试框架。利用单元测试框架,创建一个类,该类继承unittest的TestCase,这样可以把每个case看成是一个最小的单元, 由测试容器组织起来,到时候直接执行,同时引入测试报告。

测试步骤 :

1.写用例 TestCase

2.执行用例

2-1.TestSuite 存储用例

2-2.TestLoader 找用例,加载用例,存储到2-1的TestSuite

3.对比实际结果 预期结果 判定用例是否通过 (断言 Assert)

4.出具测试报告 TextTestRunner

注意:TestSuite和TestLoader 是类

?

1.写用例 TestCase

1.先创建一个MathMethod.py的文件,写一个MathMethod的类,如下:

class MathMethod:
    def __init__(self,a,b):
        self.a=a
        self.b=b

    def add(self):   # 加法函数
        return self.a+self.b

    def multi(self):   # 乘法函数
        return self.a*self.b

2.创建一个class_01.py的文件,编写并执行测试用例

首先引用unittest,然后引用之前准备的MathMethod类,然后编写用例并执行。

?编写测试用例

1.一个用例就是一个函数 不能传参 只能有self关键字

2.所有的用例(所有的函数 都是test开头,一般是test_)*****

# 引入unittest,unittest里面有专门写测试用例的TestCase
import unittest    
# 导入自己写的方法,from...import,import后面至少具体到模块名,且一层层进入
from Unittest_006.math_method import MathMethod  #测试的目标

# 继承unittest里面的TestCase ,专门写用例,编写一个加法测试用例
class TestMathMethod(unittest.TestCase):   
    # 编写测试用例
    # 1.一个用例就是一个函数  不能传参  只能有self关键字
    # 2.所有的用例(所有的函数  都是test开头,一般是test_)*****
    # 两个正数相加  
    def test_add_tow_positive(self): 
        # 实例调用函数,使用res存储返回值
        # 实际发起请求的结果值
        res=MathMethod(1,1).add()   
        print('1+1的结果是:',res)
    
    # 两个负数相加
    def test_add_tow_negative(self):   
        # 实例调用函数,使用res存储返回值
        res=MathMethod(-1,-1).add()
        print('-1+-1的结果是:',res)

    # 两个0相加
    def test_add_tow_zero(self):   
        # 实例调用函数,使用res存储返回值
        res=MathMethod(0,0).add()
        print('0+0的结果是:',res)

# 继承unittest里面的TestCase ,专门写用例,编写一个乘法测试用例
class TestMulti(unittest.TestCase):   
    # 编写测试用例
    # 1.一个用例就是一个函数  不能传参  只能有self关键字
    # 2.所有的用例(所有的函数  都是test开头,一般是test_)*****
    def test_multi_tow_positive(self):   # 两个正数相乘
        # 实例调用函数,使用res存储返回值
        res=MathMethod(1,1).multi()
        print('1*1的结果是:',res)

    def test_multi_tow_negative(self):   # 两个负数相乘
        # 实例调用函数,使用res存储返回值
        res=MathMethod(-1,-1).multi()
        print('-1*-1的结果是:',res)

# 执行测试用例
if __name__ == '__main__':
    unittest.main()

2.执行用例

2-1.TestSuite 存储用例

创建一个class_02.py文件,引用unittest和写好测试用例的class_01模块中的类。

# 引入unittest
import unittest
# 引入class_01中的TestMathMethod类
from Unittest_006.class_01 import TestMathMethod
# A class whose instances are single test cases.
# 这个类的实例是一个个单独的测试用例
# 模块以外的地方要使用该测试用例时,需要创建实例
# TestSuite和TestLoader 是类

# TestSuite  存储用例的容器(用suite变量来存储用例)
suite=unittest.TestSuite()  
# 创建测试用例时继承了unittest里面的TestCase ,专门用来写测试用例,TestCase有初始化函数,参数有methodName='runTest',即:
# class TestCase(object):
#     def __init__(self, methodName='runTest'):
# methodname就是函数名,也就是上传测试用例名
# 创建实例 ---》实例.函数名(用例) ,用例需要调用TestMathMethod类中的测试用例----》用例=类(’用例名‘),建议用例少时可以使用
suite.addTest(TestMathMethod('test_add_tow_positive'))    
suite.addTest(TestMathMethod('test_add_tow_negative'))
runner=unittest.TextTestRunner()
runner.run(suite)

2-2.TestLoader 找用例,加载用例,存储到2-1的TestSuite

2-2-1.从测试类里面去找测试用例

import unittest
from Unittest_006.class_01 import TestMathMethod

# TestSuite  存储用例的容器(用suite变量来存储用例)
# 存储用例用例的容器 
suite=unittest.TestSuite() 
# 创建一个加载器(寻找用例) 
loader=unittest.TestLoader() 
# 具体到类名;将寻找到的用例使用addTest方法加到suite容器里面,loadTestsFromTestCase(TestMathMethod)--->从测试名里面加载测试用例,即将TestMathMethod类里面的所有用例全部加载到addTest方法里面去 
suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))     
runner=unittest.TextTestRunner()
runner.run(suite)

?2-2-2.从测试模块中去找测试用例

import unittest

#具体到模块名
from Unittest_006 import class_01   

 # 存储用例用例的容器
suite=unittest.TestSuite()
#创建一个加载器(寻找用例) 
loader=unittest.TestLoader()  
#loadTestsFromModule()--->从模块里面加载测试用例,此时需要引入需要的模块,在模块中找所有的用例
suite.addTest(loader.loadTestsFromModule(class_01))  
runner=unittest.TextTestRunner()
runner.run(suite)

3.对比实际结果 预期结果 判定用例是否通过 (断言 Assert)

对比实际测试结果与预期是否一致时,可以在用例中添加断言

# unittest里面有专门写测试用例的TestCase
import unittest    
# 导入自己写的方法,from...import,import后面至少具体到模块名,且一层层进入
from Unittest_006.math_method import MathMethod  #测试的目标

# 继承unittest里面的TestCase ,专门写用例
class TestMathMethod(unittest.TestCase):   
    # 编写测试用例
    # 1.一个用例就是一个函数  不能传参  只能有self关键字
    # 2.所有的用例(所有的函数  都是test开头,一般是test_)*****
    def test_add_tow_positive(self):   # 两个正数相加
        # 实例调用函数,使用res存储返回值
        res=MathMethod(1,1).add()   #实际发起请求的结果值
        print('1+1的结果是:',res)
        # 加一个断言:判断期望值与实际值得对比结果,一致通过,不一致失败
        self.assertEqual(2,res)  # 函数之间的相互调用,类里面要调用属性的是self.属性名;类里面要调用函数是self.函数名();即assertEqual()来自于父类TestCase,

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

4.出具测试报告

4-1.原始的测试报告

import unittest
# 引入HTMLTestRunner
import HTMLTestRunner

#具体到模块名
from Unittest_006 import class_01   

 # 存储用例用例的容器
suite=unittest.TestSuite()
#创建一个加载器(寻找用例) 
loader=unittest.TestLoader()  
#loadTestsFromModule()--->从模块里面加载测试用例,此时需要引入需要的模块,在模块中找所有的用例
suite.addTest(loader.loadTestsFromModule(class_01))  

# 新建文件保存执行结果,使用上下文管理器:with 打开('text.txt','w+',encoding='utf-8')这个文件存到变量file里面
# 不关闭文件会怎样?  不关闭文件有的时候要用文件时导致资源被占用
with open('text.txt','w+',encoding='utf-8') as file:   # 原始的测试报告
    # 执行
    runner=unittest.TextTestRunner(stream=file, verbosity=2)  # stream输出渠道,verbosity有3个值0,1,2,其中2是最详细的
    runner.run(suite)
# 判断file是否已经是关闭状态
print(file.closed)


4-2.用html形式展示测试报告

需要引入HTMLTestRunner,python需要自己修改,可参考python3.x中导入HTMLTestRunner包_zyp--的博客-CSDN博客

import unittest
import HTMLTestRunner

from Unittest_006 import class_01

# 存储用例用例的容器   
suite=unittest.TestSuite() 
#创建一个加载器(寻找用例) 
loader=unittest.TestLoader()  
suite.addTest(loader.loadTestsFromModule(class_01))  
with open('text_report.html','wb')as file:
    runner=HTMLTestRunner.HTMLTestRunner(stream=file, verbosity=2, title='2022年8月26日学习的测试报告', description='学习自动化测试的第一份测试报告',tester='暖暖')
    runner.run(suite)

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:41:58  更:2022-09-04 01:42:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:50:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码