web自动化笔记十:UnitTest基本使用

news2024/11/15 18:31:41

一、UnitTest框架
       ①、什么是框架?
                1、框架英文单词framework
                2、为解决一类事情的功能集合

        ②、为什么使用UnitTest框架
                1、批量执行用例
                2、提供丰富的断言知识
                3、可以生成报告

        ③、UnitTest核心要素
                1、TestCase —测试用例
                2、TestSuite —测试套件
                3、TestRunner —测试运行 以文本形式运行测试用例
                4、TestLoader —批量执行测试用例  搜索指定文件夹内指定字母开头的模块(推荐)
                5、Fixture  —固定装置函数(两个固定函数,一个初始化使用,一个结束使用)

二、TestCase
        ①、定义测试用例
                1、导包:import  unittest
                2、定义测试类:新建测试类必须继承unittest.TestCase
                3、定义测试方法:测试方法名称命名必须以test开头
        ②、运行:
                1、运行测试类所有的测试方法,光标定位到类当前行右键运行 
                2、运行单个测试犯法:光标放到测试方法当前行
执行代码:

# 导包:import  unittest
import unittest
# 定义加法方法
def add(x,y):
    return x + y
# 定义减法方法
def subt(x , y):
    return y - x
# 定义测试类:新建测试类必须继承unittest.TestCase
class test_case(unittest.TestCase):
# 定义测试方法:测试方法名称命名必须以test开头
    def test_add(self):
        result = add(1,5)
        print("结果是:",result)
 
    def test_subt(self):
        result = subt(10,5)
        print("结果是:",result)
# 通过python自带的__name__属性执行testcase
if __name__ == '__main__':
    test_case.main()

执行结果:

Ran 2 tests in 0.023s
OK
Process finished with exit code 0
结果是: 6
结果是: -5

注意:
__name__:为python中内置变量
    值:
        1、如果当前运行的模块为当前模块,那么__name__的值为:__main__
        2、如果当前运行的模块不是主模块,那么__name__的值为:模块名称

三、TestSuite测试套件
        ①、使用:
                1、实例化:suite = unittest.TestSuite()
                 (suite:为TestSuite实例化名称)
    
                2、添加用例:suite.addTest(ClassName(“MethodName”))
                (ClassName:为类名:MethodName:为方法名<用双引号>)
    
                3、添加扩展:suite.addTest(unittest.makeSuite(ClassName))
                (搜索指定ClassName内test开头的方法并添加到测试套件中)
                提示:TestSuite需要配合TestRunner才能被执行

        ②、操作步骤:
                1、导包
                2、实例化获取TestSuite对象
                3、调用addTest方法添加用例到指定套件中
                4、执行测试套件方法:
                        1)、导包
                        2)、实例化后去执行套件对象 runner = unittest.TestRunner
                        3)、调用TestRunner中run()方法

执行代码:
TestCase.py中代码:

import unittest
 
def add(x,y):
    return x+y
 
class Test_add(unittest.TestCase):
    def test_add01(self):
        print("执行了测试用例:test_add01")
        result = add(3,5)
        print(result)
 
    def test_add02(self):
        print("执行了测试用例:test_add02")
        result = add(4, 5)
        print(result)
 
    def test_add03(self):
        print("执行了测试用例:test_add03")
        result = add(4, 7)
        print(result)
 
    def test_add04(self):
        print("执行了测试用例:test_add04")
        result = add(6, 7)
        print(result)
 
if __name__ == "__main__":
    Test_add.main()

**可以直接通过__name__执行得出结果


执行unittest_TestSuite中的代码:

import unittest
# 实例化TestSuite
from TestCase import Test_add
 
suite = unittest.TestSuite()
#添加用例
# 写法一:执行单个测试用例
# suite.addTest(Test_add("test_add01"))
# suite.addTest(Test_add("test_add02"))
 
# 写法二:批量执行测试用例
suite.addTest(unittest.makeSuite(Test_add))
# 执行套件
# 创建TestRunner对象
runner = unittest.TextTestRunner()
# 执行TestRunner中run(self,test)方法
runner.run(suite)

执行结果:

#几个点代表执行成功过几个用例
....
执行了测试用例:test_add01
----------------------------------------------------------------------
8
执行了测试用例:test_add02
Ran 4 tests in 0.001s
9
执行了测试用例:test_add03
 
11
OK
执行了测试用例:test_add04
13

需要创建两个py文件去管理用例和测试套件


四、TestLoader
        ①、说明:
                 用来加载TestCase到TestSuite中,即加载满足条件的测试用例,并把测试用例封装成测试套件。
                使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下指定开头的.py文件。并将查到的测试用例组装到测试套件

        ②、用法:
                suite = unittest.TestLoader().discover(test_dir,pattern=’test*.py’)
                自动搜索指定目录下指定开头的.py文件,并将查找到的测试用例组装到测试套件
                test_dir:为制定的测试用例的目录
                pattern:为查找的.py文件的格式,默认为‘test*.py’
    
                也可以使用unittest.defaultTestLoader代替unittest.TestLoader()<推荐使用unittest.defaultTestLoader>
                底层代码中unittest.defaultTestLoader = unittest.TestLoader()

        ③、操作方法:
                1、导包 unittest
                2、调用TestLoader类下discover(test_dir,pattern=’test*.py’)方法
                        写法一:suite = unittest.TestLoader().discover(test_dir,pattern = ’test*.py’)
                        写法二:suite = unittest.defaultTestLoader.discover(test_dir,pattern = ’test*.py’)
                3、执行测试用例 调用unittest.TextTestRunner().run(suite)

        ④、案例演示

Case包里三个文件
Testcase01.py的代码:

import unittest
 
def add(x,y):
    return x+y
 
class Test_add(unittest.TestCase):
    def test_add01(self):
        print("执行了测试用例:test_add01")
        result = add(3,5)
        print(result)
 
    def test_add02(self):
        print("执行了测试用例:test_add02")
        result = add(4, 5)
        print(result)
 
    def test_add03(self):
        print("执行了测试用例:test_add03")
        result = add(4, 7)
        print(result)
 
    def test_add04(self):
        print("执行了测试用例:test_add04")
        result = add(6, 7)
        print(result)
 
if __name__ == "__main__":
    Test_add.main()

Testcase02.py的代码:

import unittest
 
def add(x,y):
    return x+y
 
class Test_add1(unittest.TestCase):
    def test_add101(self):
        print("执行了测试用例:test_add101")
        result = add(3,5)
        print(result)
 
    def test_add102(self):
        print("执行了测试用例:test_add102")
        result = add(4, 5)
        print(result)
 
    def test_add103(self):
        print("执行了测试用例:test_add103")
        result = add(4, 7)
        print(result)
 
    def test_add104(self):
        print("执行了测试用例:test_add104")
        result = add(6, 7)
        print(result)
 
if __name__ == "__main__":
    Test_add1.main()

Testcase03.py的代码:
 

import unittest
 
def add(x,y):
    return x+y
 
class Test_add2(unittest.TestCase):
    def test_add201(self):
        print("执行了测试用例:test_add201")
        result = add(3,5)
        print(result)
 
    def test_add202(self):
        print("执行了测试用例:test_add202")
        result = add(4, 5)
        print(result)
 
    def test_add203(self):
        print("执行了测试用例:test_add203")
        result = add(4, 7)
        print(result)
 
    def test_add204(self):
        print("执行了测试用例:test_add204")
        result = add(6, 7)
        print(result)
 
if __name__ == "__main__":
    Test_add2.main()

UnitTest框架中unittest_TestLoader.py文件中的代码:

import unittest
#调用TestLoader中discover()方法
#写法一
# suite = unittest.TestLoader().discover('./Case',pattern='Test*.py')
#写法二(推荐写法)
suite = unittest.defaultTestLoader.discover('./Case',pattern='Test*.py')
#调用TextRunner.run(suite)执行
unittest.TextTestRunner().run(suite)

执行结果:

执行了测试用例:test_add101
8
执行了测试用例:test_add102
............
9
----------------------------------------------------------------------
执行了测试用例:test_add103
Ran 12 tests in 0.001s
 
11
OK
执行了测试用例:test_add104
13
执行了测试用例:test_add201
8
执行了测试用例:test_add202
9
执行了测试用例:test_add203
11
执行了测试用例:test_add204
13
执行了测试用例:test_add01
8
执行了测试用例:test_add02
9
执行了测试用例:test_add03
11
执行了测试用例:test_add04
13

五、TestSuite和TestLoader区别
        共同点:都是测试套件
        不同点:实现方式不同
                1. TestSuite需要手动添加测试用例(可以添加测试类,也可以添加测试类中某个测试方法) 
                2. TestLoader搜索指定目录下指定开头.py文件,并添加测试类中的所有的测试方法,不能指定添加测试方法。

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

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

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

相关文章

【每日一题】3.2 求逆序对

题目描述 给定一个长度为 n的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i个和第 j个元素&#xff0c;如果满足 i<j 且 a[i]>a[j]&#xff0c;则其为一个逆序对&#xff1b;否则不是。 输入格式 第一行包含整数 n…

stable diffusion webUI之赛博菩萨【秋葉】——工具包新手安裝与使用教程

stable diffusion webUI之赛博菩萨【秋葉】——工具包新手安裝与使用教程 AI浪潮袭来&#xff0c;还是学习学习为妙赛博菩萨【秋葉】简介——&#xff08;葉ye&#xff0c;四声&#xff0c;同叶&#xff09;A绘世启动器.exe&#xff08;sd-webui-aki-v4.6.x&#xff09;工具包安…

运筹学_1.1.4 线性规划问题-解的概念

1.1.4 线性规划问题-解的概念 一、可行解与最优解二、基的概念三、基变量、基向量&#xff1b;非基变量、非基向量&#xff1b;基解、基可行解&#xff1b;四、最优解与可行解、基可行解的关系五、用例题&#xff08;枚举法&#xff09;巩固基解、基可行解、最优解三个概念1、例…

5.CVAT用户角色

文章目录 1. CVAT 用户角色1.1. CVAT.ai 中的全局角色1.2. CVAT.ai 中的组织角色1.3. job工作状态1.4. 分配任务1.4.1. 分配标注人1.4.2. 指派审阅者1.4.3. 分配校对人 2. 组织2.1. 个人工作区2.2. 创建新组织在组织之间切换 2.3. “组织”页面2.4. 邀请成员加入组织&#xff1…

手动实现一个简单的 HTTP 请求

本文我们通过 Socket&#xff0c;写一个 HTTP 协议&#xff0c;直观的感受一下上篇文章中的请求和响应。 定义 socket server 通过上篇文章&#xff0c;我们知道 HTTP 协议底层是通过 Socket 实现的&#xff0c;所以我们先通过 socket 定义一个 server import socket#初始化 …

蓝桥杯备战刷题four(自用)

1.砝码称重 #include <iostream> #include <vector> using namespace std; const int N110; const int M100010; int w[N]; int n; int f[N][M]; int m; int ans; //f[i][j]表示到第i个砝码进行放置时的称得的重量为j的方案数 int main() {cin>>n;for(int i1…

JVM 第四部分—垃圾回收相关概念 2

System.gc() 在默认情况下&#xff0c;通过System.gc()或者Runtime.getRuntime().gc()的调用&#xff0c;会显式触发Full GC&#xff0c;同时对老年代和新生代进行回收&#xff0c;尝试释放被丢弃对象占用的内存 然而System.gc()调用附带一个免责声明&#xff0c;无法保证对垃…

Springboot+vue的商业辅助决策系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的商业辅助决策系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的商业辅助决策系统的设计与实现&#xff0c;采…

前端的文字的字体应该如何设置

要设置文字的字体&#xff0c;在CSS中使用font-family属性。这个属性可以接受一个或多个字体名称作为其值&#xff0c;浏览器会按照列表中的顺序尝试使用这些字体渲染文本。如果第一个字体不可用&#xff0c;浏览器会尝试使用列表中的下一个字体&#xff0c;依此类推。 字体设…

6.CVAT——属性注释模式

文章目录 1. 属性注释模式&#xff08;基础&#xff09;2. 属性标注模式&#xff08;高级&#xff09; 1. 属性注释模式&#xff08;基础&#xff09; 属性注释模式下可用的使用示例和基本操作。 在此模式下&#xff0c;您可以使用键盘在对象和框架之间快速导航来编辑属性。打…

【python】`assert`断言语句

assert是一个断言语句&#xff0c;用于在代码中检查某个条件是否为真。 如果条件为假&#xff0c;将触发AssertionError 异常&#xff0c;从而指示存在错误。

Java 网络面试题解析

1. Http 协议的状态码有哪些&#xff1f;含义是什么&#xff1f;【重点】 200&#xff1a;OK&#xff0c;客户端请求成功。 301&#xff1a;Moved Permanently&#xff08;永久移除&#xff09;&#xff0c;请求的URL已移走。Response中应该包含一个Location URL&#xff0c;…

Vue3 条件渲染 v-if

v-if 指令&#xff1a;用于控制元素的显示或隐藏。 执行条件&#xff1a;当条件为 false 时&#xff0c;会将元素从 DOM 中删除。 应用场景&#xff1a;适用于显示隐藏切换频率较低的场景。 语法格式&#xff1a; <div v-if"数据">内容</div> 基础用…

模拟服务器响应的测试框架:moco

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;在这篇博客中&#xff0c;咱们要聊聊Moco测试框架。这个框架&#xff0c;可不是一般的小伙伴&#xff0c;它在模拟服务器响应这块儿&#xff0c;可是有不少看家本领。 首先&#xff0c;Moco是啥呢&#xff1f;简…

彻底搞懂回溯算法(例题详解)

目录 什么是回溯算法&#xff1a; 子集问题&#xff1a; 子集问题II(元素可重复但不可复选): 组合问题&#xff1a; 组合问题II(元素可重复但不可复选): 排列问题&#xff1a; 排列问题II(元素可重复但不可复选): 什么是回溯算法&#xff1a; 「回溯是递归的副产品&…

全球十大正规伦敦金交易平台app软件最新排名(综合版)

伦敦金作为当前国际市场中较为成熟、灵活的投资产品自然备受青睐&#xff0c;但投资者在选择交易软件时&#xff0c;应该尽量选择在行业内排名较高&#xff0c;口碑较好的平台&#xff0c;这样才能获得可靠的投资服务。刚开始不太懂得如何选择伦敦金软件的时候&#xff0c;投资…

SpringBoot原理-配置优先级(黑马学习笔记)

配置优先级 在我们前面的课程当中&#xff0c;我们已经讲解了SpringBoot项目当中支持的三类配置文件&#xff1a; ● application.properties ● application.yml ● application.yaml 在SpringBoot项目当中&#xff0c;我们要想配置一个属性&#xff0c;可以通过这三种方…

手写模拟器,解放双手!效果炸裂的生产工具

手写模拟器是一款基于Handright的仿手写图片生成软件&#xff0c;可以让你的电脑和手机也能写出漂亮的手写字&#xff0c;你只需要输入你想要写的内容&#xff0c;选择你喜欢的字体和背景&#xff0c;就可以生成一张高仿真的手写图片&#xff0c;用于各种场合&#xff0c;比如做…

搜索算法(算法竞赛、蓝桥杯)--双向BFS双向奔赴

1、B站视频链接&#xff1a;B18 双向BFS Nightmare_哔哩哔哩_bilibili 题目链接&#xff1a;Problem - 3085 #include <bits/stdc.h> using namespace std; const int N810; int n,m; #define x first #define y second char g[N][N]; //地图 int vis[N][N]; //2表示女…

3.2日学习打卡----初学FastDFS(二)

3.2日学习打卡 目录: 3.2日学习打卡SpringBoot整合FastDFS实战开发文件上传 FastDFS集成Nginx环境搭建 SpringBoot整合FastDFS 由GitHub大牛tobato在原作者YuQing与yuqih发布的JAVA客户端基础上进行了大量重构工作&#xff0c;并于GitHub上发布了FastDFS-Client1.26.5。 主要特…