unittest+ddt自动化测试相关知识点

2023-11-16

unittest是Python单元测试框架,主要分为:
测试用例TestCase:一个完整的测试流程
测试套件TestSuite:多个测试用例集合在一起
执行/结果呈现TextTestRunner:用例运行和结果呈现,结果呈现常用HtmlTestRunner
前置后置Fixture:测试用例环境的搭建和销毁
一句话概括为:首先是要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。
编写测试用例——收集用例——执行用例——生成报告

以下以简单登录用例进行测试。测试用例方法如下代码:

def test_login(username=None, password=None):
    if username != None and password != None:
        if username == 'python' and password == 'unittest':
            return {"code": 0, "msg": "登录成功"}
        else:
            return {"code": 1, "msg": "账号或密码不正确"}
    else:
        return {"code": 1, "msg": "所有的参数不能为空"}

1.测试用例:TestCase

1.导入unittest模块
2.创建个测试类,并继承unittest.TestCase( )
3.定义测试方法,方法名必须以test_开头

import unittest
from myselfstudy.study_20210413 import test_login
class TestLogin(unittest.TestCase):
    def test_login_1(self):
        res = test_login("python27", "lemonban")
        yuqi = {"code": 0, "msg": "登录成功"}
        self.assertEqual(res, yuqi)

2.测试套件:TestSuite

2.1常用测试套件:unittest.TestLoader().discover()

unittest.TestLoader().discover(搜索目录),默认搜索test*.py文件中的测试用例

suit=unittest.TestLoader().discover(r"搜索目录")
print(type(suit))
print(suit)

输出结果为:搜索目录所有test*.py文件中的测试用例,此方法较常用

2.2不常用:unittest.TestSuite()

#1.实例化测试套件TestSuite
if __name__ == '__main__':
    suit = unittest.TestSuite()
    # 添加1个用例
    suit.addTest(TestLogin("test_login_1"))
    # 添加多个用例
    suit.addTests([TestLogin("test_login_2"),TestLogin("test_login_3")])
    print(suit)

执行输出为:3个测试用例

3执行/结果呈现:TextTestRunner/HtmlTestRunner/BeautifulReport

TextTestRunner不常用,不做讲解

3.1HtmlTestRunner

#运行测试用例结果输出Html
from HTMLTestRunner import HTMLTestRunner
#创建一个html文件,以写的模式打开,支持中文
with open("test_result.html","wb") as fs:
    runner=HTMLTestRunner(fs,verbosity=1,title="unittest单元测试学习测试报告",description="第一份测试报告")
    runner.run(suit)

执行后选择浏览器打开test_result.html文件如下:执行结果
如需修改test_result.html样式,需要修改HTMLTestRunner原文件,小白不建议随意修改。

3.2BeautifulReport

安装方法:pip install BeautifulReport
也可使用Pycharm安装Python第三方库,参考链接https://blog.csdn.net/qiannianguji01/article/details/50397046

from BeautifulReport import BeautifulReport
br = BeautifulReport(suit)
br.report("unittest单元测试报告","BeautifulReport.html")

执行后选择浏览器打开BeautifulReport.html文件如下:在这里插入图片描述

4.前置后置:Fixture

测试用例环境的搭建和销毁,使用方式分类
	测试方法为维度
		setUp( ):单个用例执行前执行该方法
		tearDown( ):单个用例执行之后执行该方法
	以测试类为维度
		setUpClass( ):类前执行
		tearDownClass( ):类后(最后一个用例后)执行

1、学过unittest的都知道setup和teardown。前置和后置的意思。(在每个用例前后执行一次。)
举例:

import unittest
from myselfstudy.study_20210413 import test_login
class TestLogin(unittest.TestCase):
    def setUp(self):
        print("----------------------单个用例开始执行-------------------------")
    def tearDown(self):
        print("----------------------单个用例结束执行-------------------------"+"\n"+"\n")
    def test_login_1(self):
        res = test_login("python27", "lemonban")
        yuqi = {"code": 0, "msg": "登录成功"}
        self.assertEqual(res, yuqi)
        print("test_login_1")

执行结果:在这里插入图片描述

比之用的少一点的还有setupclass和teardownclass,需要配合@classmethod装饰器一起使用。(在所有用例前后总共各执行一次。)

import unittest
from myselfstudy.study_20210413 import test_login
class TestLogin(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("----------------------开始执行登录用例-------------------------")
    @classmethod
    def tearDownClass(cls):
        print("----------------------结束执行登录用例-------------------------")
    def test_login_1(self):
        res = test_login("python27", "lemonban")
        yuqi = {"code": 0, "msg": "登录成功"}
        self.assertEqual(res, yuqi)
        print("test_login_1")
    def test_login_2(self):
        res = test_login("python", "lemonban")
        self.assertEqual(res, {"code": 1, "msg": "账号或密码不正确"})
        print("test_login_2")

执行结果:
在这里插入图片描述
2、pytest也有类似的语法。并且种类更多。按照用例运行级别可以分为以下几类:

*模块级(setup_module/teardown_module):开始于模块始末,作用于全局(总用各执行一次。)

*函数级(setup_function/teardown_function):仅对函数用例生效。(即不在类中。每个函数执行一次)

*类级(setup_class/teardown_class):只在类中前后运行一次。(在类中)

*方法级(setup_method/teardown_method):开始于方法始末(在类中。每个方法执行一次)

*类里面的(setup/teardown):运行在调用方法的前后(每个方法执行一次)

注:类里面按优先级排序的话:setup_class > setup_method > setup >用例> teardown > teardown_method > teardown_class(即执行顺序)

6.ddt数据驱动测试-参数化

1.导入ddt
2.类名前@ddt.ddt
3.测试函数前@ddt.date(*列表),在测试函数中定义一个参数来接收date数据

import unittest
from study_20210413 import test_login
import ddt

dates = [{"user": "python", "password": "unittest", "check": {"code": 0, "msg": "登录成功"}},
         {"user": "python111", "password": "unittest", "check": {"code": 1, "msg": "账号或密码不正确"}},
         {"user": "python", "password": "unittest111", "check": {"code": 1, "msg": "账号或密码不正确"}},
         {"user": None, "password": "unittest", "check": {"code": 1, "msg": "所有的参数不能为空"}},
         {"user": "python", "password": None, "check": {"code": 1, "msg": "所有的参数不能为空"}}]

@ddt.ddt
class TestLogin(unittest.TestCase):
    @ddt.data(*dates)
    def test_login(self,case):
        res = test_login(case["user"], case["password"])
        self.assertEqual(res, case["check"], "PASS")
    @classmethod
    def setUpClass(cls):
        print("----------------------开始执行登录用例-------------------------")
    @classmethod
    def tearDownClass(cls):
        print("----------------------结束执行登录用例-------------------------")
    def setUp(self):
        print("-----单个用例开始执行-----")
    def tearDown(self):
        print("-----单个用例结束执行-----")

执行结果会执行五条用例:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unittest+ddt自动化测试相关知识点 的相关文章

  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 测试开发必知:有Tomcat,为什么还要Nginx?

    只用Tomcat 不用Nginx搭建Web服务 行不行 我曾经提出的愚蠢问题 今天详细给自己解释下 为什么必须用Nginx 不用Nginx 只用Tomcat的Http请求流程 浏览器处理一个Http请求时 会首先通过DNS服务器找到域名关联
  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 软件测试|使用Python轻松裁剪视频

    简介 裁剪视频是在视频编辑和处理中常见的任务之一 Python提供了多种库和工具 可以用来裁剪视频 在本文中 我们将详细讨论如何使用Python来裁剪视频 并提供示例代码 步骤1 环境准备 首先 我们要安装必要的Python库 我们将使用
  • 软件测试|Python中如何提取列表中索引为奇数的元素

    简介 在Python中 我们经常需要从列表中提取特定位置的元素 如果我们想要提取列表中索引为奇数的元素 可以使用一些简单的方法来实现这一目标 本文将介绍如何在Python中提取列表中索引为奇数的元素 并提供示例代码来帮助大家更好地理解这个过
  • 软件测试|使用matplotlib绘制平行坐标系图

    简介 绘制平行坐标系图 Parallel Coordinates Plot 是一种用于可视化多维数据的强大方法 在这篇文章中 我们将介绍如何使用Matplotlib库创建平行坐标系图 以及如何解释和定制这种图表 我们将使用一个示例数据集来演
  • 软件测试|Pydantic处理时间类型数据

    简介 我们之前介绍过使用 pydantic 验证数据 比如校验数据的格式等 但是在我们的日常工作中 还有一种数据是需要我们验证的 比如时间数据 时间数据不同于字符串 列表等数据 与他们的验证不一样 本文就来为大家介绍一下 pydantic
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯负载最终请求数

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试中的白盒测试,这些技巧你知道吗?

    对于很多刚开始学习软件测试的小伙伴来说 如果能尽早将黑盒 白盒测试弄明白 掌握两种测试的结论和基本原理 将对自己后期的学习有较好的帮助 今天 我们就来聊聊黑盒 白盒测试的相关话题 1 黑盒测试的方法和小结 最常见黑盒测试方法包括 边界值 等
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • Web自动化测试 —— cookie复用

    一 cookie简介 cookie是一些数据 存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时 在链接关闭后 服务端不会记录用户信息 二 为什么要使用Cookie自动化登录 复用浏览器仍然在每次用例开始都需要人为介入 若用
  • Web自动化测试 —— capability参数配置

    一 capability概述 capability是webdriver支持的标准命令之外的扩展命令 配置信息 配置web驱动属性 如浏览器名称 浏览器平台 结合selenium gird完成分布式 兼容性测试 官网地址 https www
  • 一文让你快速写出高效的软件测试用例

    前言 编写测试用例的目的就是确保测试过程全面高效 有据可查 但要编写出高效的测试用例 需要搞清楚什么是测试用例 以及如何编写出高效的测试用例 接下来将从以下几个部分来进行展开 1 什么是测试用例 2 如何编写测试用例 3 软件测试学习资源分
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结

随机推荐