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

一、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,里面有各种测试开发资料和技术可以一起交流哦。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

应用稳定性优化2:Crash/Tombstone问题分析及定位

1. Crash/Tombstone问题原因分析 2. Tombstone问题定位方法 本节主要讲解Tombstone问题的分析定位方法。 2.1 信号量分析法 信号机制是进程之间相互传递消息的一种方法&#xff0c;下表展示的是一些常见的信号种类。 SIGBUS与SIGSEGV的区别 SIGBUS(Bus error)意味着指针所…

Javaweb之SpringBootWeb案例之自动配置的两种常见方案的详细解析

3.2.2.2 方案一 ComponentScan组件扫描 SpringBootApplication ComponentScan({"com.itheima","com.example"}) //指定要扫描的包 public class SpringbootWebConfig2Application {public static void main(String[] args) {SpringApplication.run(Sprin…

【贪心算法】121. 买卖股票的最佳时机 I Leetcode 122. 买卖股票的最佳时机 II

【贪心算法】121. 买卖股票的最佳时机 I Leetcode 122. 买卖股票的最佳时机 II 121. 买卖股票的最佳时机 I贪心算法&#xff1a;遍历每一天卖出金额&#xff0c;一边计算卖出金额减之前的最小值&#xff0c;一边更新该卖出day前的最小金额 122. 买卖股票的最佳时机 II贪心算法…

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

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

C++ //练习 10.17 重写10.3.1节练习10.12(第345页)的程序,在对sort的调用中使用lambda来代替函数compareIsbn。

C Primer&#xff08;第5版&#xff09; 练习 10.17 练习 10.17 重写10.3.1节练习10.12&#xff08;第345页&#xff09;的程序&#xff0c;在对sort的调用中使用lambda来代替函数compareIsbn。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xf…

数据库原理(一)

1、基本概念 学号姓名性别出生年月籍贯220101张三男2003江苏220102李四男2003山东220103王五女2003河北220104赵六女2003天津220105张四男2003北京220106李五女2003江苏220107王六女2003山东220108张七男2003河北220109张九男2003天津220110李十女2003北京 1.1数据&#xff0…

《系统架构设计师教程(第2版)》第5章-软件工程基础知识-05-净室软件工程(CSE)

文章目录 1. 概述2. 理论基础2.1 函数理论2.2 抽样理论 3. 技术手段3.1 增量式开发3.2 基于函数的规范与设计3.3 正确性验证3.4 统计测试 (Statistically Based Testing) 和软件认证 4. 应用与缺点1&#xff09;太理论化2&#xff09;缺少传统模块测试3&#xff09;带有传统软件…

频率域采样

1. 频率域采样 (1) 采样的过程&#xff1a;DFT的X(k)是对周期且连续的频谱X()在[0,2pi)上的等间隔采样&#xff0c;采N个点得到的&#xff0c;采样间隔是&#xff1b;频域采样要求时域有限&#xff0c;即假设x(n)的长度是有限值M&#xff0c;x(n)的SFT是X()。 (2) X(k) 做IDF…

YOLOv9有效提点|加入BiFormer、SEA、EMA、Efficient se等几十种注意力机制(三)

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、本文介绍 本文只有代码及注意力模块简介&#xff0c;YOLOv9中的添加教程&#xff1a;可以看这篇文章。 YOLOv9有效提点|加入SE、CBAM、ECA、SimA…

svn介绍 4.0

一、svn介绍&#xff08;版本控制工具&#xff09; 1、svn的定义&#xff1a; svn是一个开放源代码的版本控制系统&#xff0c;通过采用分支管理系统的高效管理&#xff0c;简而言之就是用于多个人共同开发同一个项目&#xff0c;实现共享资源&#xff0c;实现最终集中式个管…

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

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

Carla自动驾驶仿真九:车辆变道路径规划

文章目录 前言一、关键函数二、完整代码效果 前言 本文介绍一种在carla中比较简单的变道路径规划方法&#xff0c;主要核心是调用carla的GlobalRoutePlanner模块和PID控制模块实现变道&#xff0c;大体的框架如下图所示。 一、关键函数 1、get_spawn_point(),该函数根据指定r…

如何查看docker容器里面运行的nginx的配置文件哪

要查看Docker容器内运行的Nginx配置文件的位置&#xff0c;你可以通过进入容器的shell环境来直接查看。Nginx的默认配置文件通常位于/etc/nginx/nginx.conf&#xff0c;而网站特定的配置文件通常位于/etc/nginx/conf.d/目录中。以下是步骤来查看这些配置文件&#xff1a; 步骤…

【嵌入式学习】网络编程day0229

一、思维导图 二、练习 TCP通信 服务器 #include <myhead.h> #define SER_IP "192.168.126.42" #define SER_PORT 8888 int main(int argc, const char *argv[]) {int wfd-1;//创建套接字if((wfdsocket(AF_INET,SOCK_STREAM,0))-1){perror("error"…

基于CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 5…

探索数据结构:深入了解顺序表的奥秘

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元…

迪杰斯特拉算法的具体应用

fill与memset的区别介绍 例一 #include <iostream> #include <algorithm> using namespace std; const int maxn500; const int INF1000000000; bool isin[maxn]{false}; int G[maxn][maxn]; int path[maxn],rescue[maxn],num[maxn]; int weight[maxn]; int cityn…

011 Linux_线程概念与创建

前言 本文将会向你介绍线程的概念&#xff0c;以及线程是怎么被创建的 线程概念 一、进程是承担系统资源的基本实体&#xff0c;线程是cpu调度的基本单位 首先&#xff0c;地址空间在逻辑上相当于进程的资源窗口&#xff0c; 每个进程都有这样一个资源窗口。通过地址空间页…

《热辣滚烫》:用坚持不懈开启逆境中的职场出路

"你只活一次&#xff0c;所以被嘲笑也没有关系&#xff0c;想哭也没有关系&#xff0c;失败更没有关系。" “人生就像一场拳击赛&#xff0c;你站不起来&#xff0c;就永远不知道自己有多强” “命运只负责洗牌&#xff0c;出牌的永远是自己。” 在今年的贺岁档电影市…

MySQL的21个SQL经验

1. 写完SQL先explain查看执行计划(SQL性能优化) 日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。 explain select userid,name,age from user where userid =10086 or age =18;2、操作delete或者update语句,加个limit(S…