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

  • APP端网络测试与弱网模拟

    当前APP网络环境比较复杂 网络制式有2G 3G 4G网络 还有越来越多的公共Wi Fi 不同的网络环境和网络制式的差异 都会对用户使用app造成一定影响 另外 当前app使用场景多变 如进地铁 上公交 进电梯等 使得弱网测试显得尤为重要
  • 测试工程师能否作为一份「终身职业」?30岁+怎么办?

    讨论 测试工程师可否作为一份终生的职业 这是我在论坛看到的一个讨论 你的答案是什么呢 我希望大家能认真思考后给出一个属于自己的答案 无论你是新手入门 还是资深专家 回答这个问题请不要凭一腔热血 也不用过分消极 别总和钱挂钩 平心而论即可 就
  • 测试开发必知:有Tomcat,为什么还要Nginx?

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

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

    公司某个系统的微信端计划将开放给几百上千的人员登录查询 并且登录账号为同一账号多人使用 后台服务能够支撑起多用户的并发操作以及成百上千人登录微信端对生产数据库或者登录查询的性能效率高成为交付可靠生产环境的必要条件 因此 项目组决定提交测试
  • 新入职一个00后卷王,每天加班到2点,太让人崩溃了····

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

    简介 裁剪视频是在视频编辑和处理中常见的任务之一 Python提供了多种库和工具 可以用来裁剪视频 在本文中 我们将详细讨论如何使用Python来裁剪视频 并提供示例代码 步骤1 环境准备 首先 我们要安装必要的Python库 我们将使用
  • 软件测试|使用matplotlib绘制平行坐标系图

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

    简介 GitHub 是全球最大的开源代码托管平台之一 而 PyCharm 是一款强大的 Python 集成开发环境 将两者结合使用 可以提高团队协作和代码管理的效率 本文将详细介绍如何在 PyCharm 中管理 GitHub 账号 包括如何
  • 盲猜你不懂H5架构和原生架构的区别

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

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

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

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

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

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • Web自动化测试 —— capability参数配置

    一 capability概述 capability是webdriver支持的标准命令之外的扩展命令 配置信息 配置web驱动属性 如浏览器名称 浏览器平台 结合selenium gird完成分布式 兼容性测试 官网地址 https www
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO
  • 软件测试面试:还没有自动化测试项目经验,3个项目帮你走入软测职场!

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

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

    自动化关键数据记录 简介 关键数据记录是 Web 自动化测试中的关键部分 它们提供了关于系统行为和执行过程的详细信息 有助于验证用例的正确性 排查问题和确保应用程序的质量 行为日志 行为日志是一种用于记录系统或应用程序的操作和事件的技术 它

随机推荐