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自动化测试相关知识点 的相关文章

  • 测试开发必知:有Tomcat,为什么还要Nginx?

    只用Tomcat 不用Nginx搭建Web服务 行不行 我曾经提出的愚蠢问题 今天详细给自己解释下 为什么必须用Nginx 不用Nginx 只用Tomcat的Http请求流程 浏览器处理一个Http请求时 会首先通过DNS服务器找到域名关联
  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium 提供了多种运行验证方式 其特点 支持一套脚本 iOS Android 模拟器 三端运行 提供丰富的页面跳转方式 看不到也能去得到 可以获取和设置小程序页面数据 让测试不止点点点 可以直接触发小程
  • 测试用例评审流程优化

    测试用例 评审是QA日常工作流程中的关键一环 是QA同学完善测试用例 交流测试经验的好机会 负责组内测试用例建设以来 作者对于评审流程做了一些优化工作 本文作者将整个优化过程中的心得体会做了一个总结 希望能给大家带来帮助 01 原始流程 1
  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

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

    简介 在数据可视化领域 Matplotlib是一款非常强大的Python库 它可以用于绘制各种类型的图表 包括折线图 本文将介绍如何使用Matplotlib创建多种不同类型的折线图 并提供示例代码 创建模版 在绘图之前 我们可以先创建我们的
  • 软件测试|Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具 用于模拟用户与网页交互 然而 当我们在使用 Selenium 时 可能会遇到一个常见的异常 即 StaleElementReferenceException 这个异常通常在我们尝试与网页上
  • 软件测试|pycharm关联GitHub的详细步骤

    简介 GitHub 是全球最大的开源代码托管平台之一 而 PyCharm 是一款强大的 Python 集成开发环境 将两者结合使用 可以提高团队协作和代码管理的效率 本文将详细介绍如何在 PyCharm 中管理 GitHub 账号 包括如何
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 如何写好一个错误报告

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 一篇文章带你了解Python常用自动化测试框架——Pytest

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

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

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

    在日常的软件开发中 测试是确保代码质量的关键步骤之一 然而 对于测试报告的生成和测试结果的可读性 一直以来都是开发者关注的焦点 Pytest插件 pytest sugar 以其清晰而美观的输出 为我们提供了一种愉悦的测试体验 本文将深入介绍
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • Web自动化测试 —— cookie复用

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

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 软件测试面试:还没有自动化测试项目经验,3个项目帮你走入软测职场!

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

随机推荐