unittest框架的使用

news2024/11/20 6:37:27

先简单介绍一下unittest的核心组成部分:

  • 测试夹具:Test Fixture
    • 一般用于执行测试用例的准备或者清理工作,比如测试开始前的数据准备或者测试结束的数据清理等。通过setUp()、tearDown()、setUpClass()、tearDownClass()这四个钩子函数实现了测试用例的准备和清理工作。
    • setUp():在每一个测试用例执行前都会执行一次
    • tearDown():在每一个测试用例执行后都会执行一次
    • setUpClass():仅在整个测试类开始执行前执行,且必须使用@classmethod装饰
    • tearDownClass():仅在整个测试类结束执行后执行,且必须使用@classmethod装饰
  • 测试用例:Test Case
    • 是unittest的最小单元,测试用例会继承TestCase这个基类
  • 测试用例集:Test Suite
    • 又称为测试套件,可以包含一个或者多个测试用例
    • 测试用例集包括一个或多个TestSuite类,每一个TestSuite类包括一个或多个TestCase类,也可以包括其他TestSuite类。TestSuite通过addTest()方法或者addTests()方法把一个个测试用例、测试用例集组装成一个新的测试用例集。
  • 测试加载器:Test Loader
    • 用于从提供的类(class)和模块(module)中生成测试用例集,unittest默认提供一个测试加载器(Default Test Loader)
    • 测试加载器加载本地或从外部文件定义好的TestCase类或者TestSuite类
    • 默认加载以test开头的.py文件
  • 测试运行器:Test Runner
    • 用于执行测试用例和输出测试结果

unittest还支持忽略执行某些测试用例,在要忽略的测试用例上添加如下装饰器即可:

  • @unittest.skip():执行时直接忽略被装饰的测试用例
  • @unittest.skipIf():如果skipIf里的条件成立,执行时直接忽略被装饰的测试用例
  • @unittest.skipUnless():永久在执行时忽略被装饰的测试用例,除非skipUnless里的条件成立
  • @unittest.expectedFailure:期望被装饰的测试用例是失败的,如果失败的,则此条测试用例被标记为测试通过

接下来我们对上一篇文章中的pageobject三层架构中,业务层(测试用例层)的代码使用unittest框架进行改造。

test_login.py文件的代码如下:

import time

from Module.login import Login
from selenium import webdriver
import unittest
import ddt


test_data = [
    {"username":"test123", "password":"123456"},
    {"username":"test124", "password":"123456"}
]

# 使用unittest框架
@ddt.ddt
class Login_test(unittest.TestCase):

    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
        self.driver.get('https://mail.163.com')
        self.driver.maximize_window()

    def tearDown(self) -> None:
        time.sleep(5)
        self.driver.quit()

    @ddt.data(*test_data)
    def test_login(self, test_data):
        print(test_data)
        username = test_data['username']
        password = test_data['password']
        login = Login()
        # login.login(self.driver, 'test123', '123456')
        login.login(self.driver, username, password)


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

在项目目录下创建一个Reports文件夹,用来存放测试报告的结果。

执行入口run.py文件的修改如下:

import time
import unittest
from Setting.Config import Test_Data_Path, Report_Path, Test_Case_Path
from TestRunner import HTMLTestRunner
import TestRunner



if __name__ == '__main__':
    now = time.strftime('%Y-%m-%d %H:%M:%S')
    # pytest.main(['-s', '-v', Test_Data_Path])
    suit = unittest.TestSuite()
    loader = unittest.TestLoader()
    suit.addTests(loader.discover(start_dir=Test_Case_Path))
    
    # 生成测试报告,测试报告存放地址及测试报告的名称
    with open(Report_Path + '/' + now + 'report.html', 'wb') as fp:
        runner = HTMLTestRunner(
            stream=fp,
            title='test_unittest'
        )
        runner.run(suit)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/955385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv5目标检测模型训练超参数总结记录

整个YOLO系列的模型除了v1和v2比较古老没有实际项目应用过以外,从v3-v8或多或少都有实践,其中以v5使用频度最高,最早期刚接触YOLO的时候也是一通原理详解学习各种结构可视化,后面实际项目开发越来越多,对于前面的记忆就…

一、Mycat2介绍与下载安装

第一章 入门概述 1.1 是什么 Mycat 是数据库中间件。 1、数据库中间件 中间件:是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟 通。 例子:Tomcat,web中间件。 数据库中间件:连接java应用程序和数据库…

解压后的文件丢失怎么恢复?解压文件丢失4种恢复方法

您是否出现过解压文件丢失的情况呢?解压文件通俗易懂地讲就是把压缩好了的文件解开。而有些小伙伴在解压文件以后发现丢失了,这些丢失的文件或许是您重要的img解压文件/rar文件解压/zip解压文件,为了正确解决解压文件丢失问题,下面…

在Visual Studio 2017上配置并使用OpenGL

1 在Visual Studio 2017上配置并使用OpenGL 在GLUT - The OpenGL Utility Toolkit:GLUT - The OpenGL Utility Toolkit中点击“GLUT for Microsoft Windows 95 & NT users”,选择“If you want just the GLUT header file, the .LIB, and .DLL file…

Win7系统电脑开机总出现硬盘自检的简单解决方法

你是不是经常会遇到电脑开机进行硬盘自检,而且每次开机都检查很久不能跳过;怎么才能跳过这一步骤呢?下面教大家如何让Win7系统电脑在开机的时候跳过硬盘自检这一步骤,加快开机时间。 解决步骤: 1、按下“Win R”快捷键…

冠达管理:美联储或已达加息终点,但反弹面临诸多不确定性

本周以来,多项数据显现美国经济正在降温,联邦基金利率期货显现,美联储本轮加息周期或已结束。 于美股而言,正处于高位的货币基金是未来继续上涨的潜在动力。不过,与此前反弹行情的推进力比较,当时的不确定…

SAP:IDCNGRIR_GNB报表展示物料描述与采购订单不一致

1、问题描述: 目前在项目中发现执行SAP的IDCNGRIR_GNB报表的时候,出现了物料编码和订单的物料编码不一致的情况: 2、问题展示: 采购订单上物料及编码显示 IDCNGRIR_GNB报表执行结果显示 3、问题原因: 调试程序发现…

2023年信息安全管理与评估赛项参考答案-模块1任务一

根据网络拓扑图所示,按照IP 地址规划表,对防火墙的名称、各接口IP 地址进行配置。共8 分,每错1 处(行)扣1 分,扣完为止。地址、安全域、接口(状态为UP)、名称都正确。 2.根据网络拓扑…

一文读懂融资融券交易技巧!在上海开融资融券账户交易利率一般是多少?

融资融券交易技巧包括以下几点: 熟悉股票市场:了解市场走势、公司基本面等信息,根据趋势选择合适的股票进行交易。 做好风险管理:对买卖的风险进行合理评估,设定止损价位,防止损失过大。 控制杠杆比例&am…

java代码设计方案

一、代码重复问题处理 1、利用工厂模式 模板方法模式,消除 if…else 和重复代码 场景: 假设要开发一个购物车下单的功能,针对不同用户进行不同处理: 普通用户需要收取运费,运费是商品价格的 10%,无商品折…

three.js渲染带动画的glb文件

1. 准备工作 将下列文件在three.js的包中找到,注意的是我这里使用的是模块化版本的,这里不知道模块化的,可以先去看一下es6的模块化。 控制器: OrbitControls.js 加载器:GLTFLoader.js 材质: RoomEnvironm…

学习JAVA打卡第四十八天

Math类 在编写程序时可能需要计算一个数的平方根、绝对值或获取一个随机数等。 Math类的常用方法 BigInteger类 程序如果需要处理特别大的整数就可以用Java.math包中的BigInteger类的对象。 可以构造public BigInteger(string val)构造一个十进制的B…

Flink+Paimon多流拼接性能优化实战

目录 (零)本文简介 (一)背景 (二)探索梳理过程 (三)源码改造 (四)修改效果 1、JOB状态 2、Level5的dataFile总大小 3、数据延迟 (五&…

【zookeeper】zookeeper介绍

分布式协调技术 在学习ZooKeeper之前需要先了解一种技术——分布式协调技术。那么什么是分布式协调技术?其实分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的…

Joint contrast enhancement and exposure fusion for real-world image dehazing、近红外去雾、(近)红外和可见光数据集

今天给大家分享一篇发表在IEEE TMM上的去雾文章Joint Contrast Enhancement and Exposure Fusion for Real-World Image Dehazing 作者从对比度增强和曝光融合的视角来解决图像去雾问题,在真实场景上取得了较好的去雾效果。此外,作者将所提出的方法应用…

mqtt集群搭建并使用nginx做负载均衡_亲测得结论

mqtt集群搭建 RabbitMQ集群搭建和测试总结_亲测 搭建好RabbitMQ集群,并开启mqtt插件功能,mqtt集群也就搭建好了 nginx配置mqtt负载均衡 #修改rabbitmq1节点ip为1.19的nginx配置 vim /etc/nginx/nginx.confhttp { } #在http外添加如下配置 stream {upstream rabbitmqtt {ser…

OpenCV(十二):图像透视变换

目录 1.透视变换介绍 2.计算透视变换矩阵getPerspectiveTransform() 3.透视变换函数warpPerspective() 4.demo 1.透视变换介绍 透视变换是一种将原始图像映射到目标图像平面上的投影变换,又称为四点变换。 透视变换矩阵的一般形式如下所示&#xff…

城市内涝积水监测预警系统 yolov8

城市内涝积水监测预警系统通过yolov8网络深度学习框架,算法一旦识别到道路出现积水,城市内涝积水监测预警系统会立即发出预警信号。并及时通知相关人员。YOLO检测速度非常快。标准版本的YOLO可以每秒处理 45 张图像;YOLO的极速版本每秒可以处…

具有 70V 总线故障保护功能的ISO1042BQDWVRQ1、ISO1042BQDWVQ1、ISO1042QDWVRQ1汽车类隔离式 CAN 收发器

一、目标应用 • 起动机/发电机 • 电池管理系统 (BMS) • 直流/直流转换器 • 车载充电器 (OBC) 和无线充电器 • 逆变器和电机控制 二、器件规格 1、ISO1042BQDWVRQ1 完全版 收发器,隔离式 1/1 CANbus 8-SOIC 类型:收发器,隔离式 协议&a…

day30 日期转换

一:Date Date类: 这个类是java.util.Date getTime() : 获取内部维护的long值 Date date new Date(); long time date.getTime(); setTime():按照指定的long值(表示的时间)设置Date表示的时间 time 60*60*24*1000;…