自动化测试之单元测试框架

news2024/12/15 22:31:00

单元测试框架

一、单元测试的定义
1:什么是单元测试?

还记不记得我们软件测试学习的时候,按照定义:单元测试就是对单个模块或者是单个函数进行测试,一般是开发做的,按照阶段来分,一般就是单元测试,集成测试,系统测试,验收测试。

2:为什么要做单元测试?
  1. 单元测试之后,才是集成测试,单个单个的功能模块测试通过之后,才能把单个功能模块集成起来做集成测试,为了从底层发现bug,减少合成后出现的问题。
  2. 越早发现bug越好,这样可以早点发现问题,不然问题累计到后面,如果做错了就要推到重来,对于时间和经费来说是非常浪费的。

对于我们测试来说:我们就单元测试是为了执行测试用例

输入测试数据à输出测试结果

二、unittest框架以及原理介绍
1、unittest框架最核心的四个概念:

 TestCase:一个testcase的实例就是一个测试用例:

TestSuite:多个测试用例集合在一起。TestLoader:用来加载TestCase到TestSuite中的

TextTestRunner:用来执行测试用例的。

fixture:测试用例环境的搭建和销毁,测试前准备环境的搭建(setup),执行测试代码(run)

以及测试后环境的还原(tearDown)

我们会一个一个的来讲解,这些理论是怎么跟时间结合起来的。

2、单元测试案例

测试需求一

 
  1. def login_check(username,password):

  2. “””

  3. 登录校验的函数

  4. :param username:账户

  5. :param password:密码

  6. :return:

  7. “””

  8. if 6 <= len(password) <= 18:

  9. if username == ‘python18’ and password == ‘123456’:

  10. return {“code”:0,”msg”:”登录成功”}

  11. else:

  12. return{“code”:1,”msg”:”账号或密码不正确”}

  13. else:

  14. return {“code”:1,”msg”:”密码长度在6-18位之间”}

设计用例测试上面的登录校验功能是否正常?

“””

账号、密码正确                                        à {“code”:0,”msg”:”登录成功”}
账号正确,密码在6-18之间(不正确)   à{“code”:1,”msg”:”账号或密码不正确”}
账号正确,密码长度少于6                       à{“code”:1,”msg”:”密码长度在6-18位之间”}
账号正确,密码长度大于18                     à{“code”:1,”msg”:”密码长度在6-18位之间”}
错误的账户,密码正确                             à{“code”:1,”msg”:”密码长度在6-18位之间”}

三、编写测试用例
1、TestCase类编写测试用例

继承unittest里面的TestCase类,继承这个类,写能写测试用例。每个用例我们都要记得引入fixture,做一些准备以及结束的工作。

    编写用例步骤如下:

  • 导入unittest模块、被测文件或者其中的类
  • 创建一个测试类,并继承unittest.TestCase
  • 重写setUp和tearDown方法(如果有初始化条件和结束条件)
  • 定义测试函数,函数名以test开头。测试用例
  • 调用unittest.main()方法运行测试用例。
 
  1. class LoginCheckTes(unittest.TestCase):

  2. #登录校验测试

  3. def setUp(self):

  4. print(‘每条用例开始执行’)

  5. def test_login(self):

  6. def test_password_error(self):

  7. def test_user_error(self):

2、用例的执行顺序

执行顺序是按照ASCII编码来的

四:测试集合
1、TestSuite&TestLoader的使用

TestSuite:测试集,把所有的用例都存进来。常用方法如下:

unittest.TestSuite()

方法一:addTest()添加一个测试用例

unittest.TestLoader()

方法二:unittest.TestLoader.loadTestsFromModule(模块名)不需要加引号(注意要导入模块)

方法三:unittest.TestLoader.loadTestsFromTestCase(测试类名)不需要加引号

总结与疑问:

1:定义的测试类和测试套件写在不同的模块里,为什么?

2:为何引入测试集,方便批量进行单元测试

完整的单元测试很少只执行一个测试用例,开发人员通常需要编写多个测试用例才能对某一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,用TestSuite类来表示的,用到的是TestSuie(),用addTest

五:unitest断言介绍

断言方法

六:执行用例&生成报告
1、TextTestRunner的用法

测试用例已经集合完毕,如何来执行用例?

  需要用到TextTestRunner,执行测试集,用到的是TextTestRunner(),用run方法。

       #创建runner对象,

       runner=unittest.TextTestRunner()

       #这里传入测试集合执行

       runner.run(suite)

测试结果怎么看?

       . 表示用例通过 一个点表示一个用例

       E表示出错了

       F表示不通过

  1. 生成测试报告

text类型报告:

       #创建一个文件,以写的方式打开

       html类型报告:

  now = time.strftime(‘%Y-%m-%d%H%M%_%S’)#随机生成时间

       需要下载HTMLTestRunnerNew

七:综合运用

每个用例写的代码都是一样的?有没有优化的方法?

用例的数据可不可独立出来? 

注意点,每条用例是一条TestCase类的对象,创建对象初始化时需要注意__init__方法

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

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

相关文章

ansible部署nginx:1个简单的playbook脚本

文章目录 hosts--ventoryroles执行命令 使用ansible向3台centos7服务器上安装nginx hosts–ventory [rootstand playhook1]# cat /root/HOSTS # /root/HOSTS [webservers] 192.168.196.111 ansible_ssh_passpassword 192.168.196.112 ansible_ssh_passpassword 192.168.196.1…

SpringBoot左脚进门之Maven管理家

一、概念 Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化&#xff0c; 使开发团队用极少的时间就能够自动完成工程的基础构建配置。 Maven 简化了工程的构建过程&#xff0c;并对其标准化&#xff0c;提高了重用性。 Maven 本地仓库 (Local Reposi…

最短路----Dijkstra算法详解

简介 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻&#xff08;Edsger Dijkstra&#xff09;在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉…

论文概览 |《Urban Analytics and City Science》2022.11 Vol.49 Issue.9

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2022年11月第49卷第9期的论文的题目和摘要&#xff0c;一共包括19篇SCI论文&#xff01; 论文1 On economic and urban growth 经济发展与城市增长 【摘要】 The dominant imperativ…

软件安装不成功,一直出现“chrome_elf.dll丢失”问题是什么原因?“chrome_elf.dll丢失”要怎么解决和预防?

软件安装遇阻&#xff1a;“chrome_elf.dll丢失”问题全解析与解决方案 在软件安装与运行的过程中&#xff0c;我们时常会遇到各式各样的错误提示&#xff0c;其中“chrome_elf.dll丢失”便是较为常见的一种。这个错误不仅阻碍了软件的正常安装&#xff0c;也给用户带来了不小…

04面向对象篇(D4_OOT(D1_OOT - 面向对象测试))

目录 一、 面向对象影响测试 1. 封装性影响测试 2. 继承性影响测试 3. 多态性影响测试 二、 面向对象测试模型 三、 面向对象分析测试 1. 对象测试 2. 结构测试 3. 主题测试 4. 属性和实例关联测试 5. 服务和消息关联测试 四、面向对象设计测试 1. 对认定类测试 …

java之静态变量和方法(类变量、类方法)

1 类变量 1.1 简要介绍 由一个简单的程序引出&#xff1a; public class Example1 {int n;static int num 10; //有 static 修饰//此时 num 即为一个类变量&#xff08;静态变量&#xff09;&#xff0c;static 表示静态的//这个变量的最大特点是&#xff0c;它会被 Exampl…

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试&#xff1a; 第一轮是逻辑行测&#xff0c;25道题目&#xff0c;类似于公务员考试题目&#xff0c;要求90分钟内完成。第二轮是技术面试&#xff0c;主要是做一些数据结…

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由&#xff08;route&#xff09;的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择&#xff08;lin…

音视频入门基础:MPEG2-TS专题(16)——PMT简介

一、引言 PMT&#xff08;Program Map Table&#xff09;与PAT表成对出现&#xff0c;其PID由PAT表给出。通过PMT表可以得到该节目包含的视频和音频信息&#xff0c;从而找到音视频流&#xff1a; 二、PMT表中的属性 根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第79页&#x…

结构变量的占用多少个字节

1、在linux中&#xff0c;这种写法比较清晰 struct gpio_led_data { u8 can_sleep; //如果定义了结构变量&#xff0c;则该成员占用1个字节 u8 blinking; //如果定义了结构变量&#xff0c;则该成员占用1个字节 }; struct gpio_leds_priv { int num_leds; //如…

网页端web内容批注插件:

感觉平时每天基本上90%左右的时间都在浏览器端度过&#xff0c;按理说很多资料都应该在web端输入并且输出&#xff0c;但是却有很多时间浪费到了各种桌面app中&#xff0c;比如说什么notion、语雀以及各种笔记软件中&#xff0c;以及导入到ipad的gn中&#xff0c;这些其实都是浪…

递归问题(c++)

递归设计思路 数列递归 : 如果一个数列的项与项之间存在关联性&#xff0c;那么可以使用递归实现 ; 原理 : 如果一个函数可以求A(n)&#xff0c;那么该函数就可以求A(n-1)&#xff0c;就形成了递归调用 ; 注意: 一般起始项是不需要求解的&#xff0c;是已知条件 这就是一个典型…

分布式 窗口算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 窗口算法 & 总结》《分布式 & 窗口算法 & 问题》 参考文献 《【算法】令牌桶算法》 固定窗口算法 简介 固定窗口算法是最简单的流量控制算法。固定窗口算法的核心原理是将系统的生命周期划分为一个个…

Linux shell的七大功能 --- history

1.直接输入“history” 这个命令可以显示出曾经使用过的命令&#xff08;最近时间的500条&#xff09; history 2.“history”命令也可以搭配其他命令一起使用。 例&#xff1a;history | grep "vim"&#xff0c;找出所有包含“vim”的记录&#xff1b; 也可以搭配…

C# 探险之旅:第九节 - 循环(for):无限循环的魔法轮盘!

嘿&#xff0c;勇敢的探险家们&#xff0c;欢迎回到C#的神秘世界&#xff01;在这一节里&#xff0c;我们将踏上一场关于循环的奇妙冒险&#xff0c;特别是那个能带我们无限次探险的“for循环”&#xff01;准备好了吗&#xff1f;让我们一起揭开for循环的神秘面纱&#xff0c;…

基于回溯法解决八皇后问题+以位运算方法优化n皇后问题(算法与数据结构期末设计)

文章目录 基于回溯法解决八皇后问题以位运算方法优化n皇后问题1. 八皇后问题问题描述2.回溯法求八皇后&#xff08;n皇后&#xff09;问题①由四皇后问题引入②皇后的占位问题③皇后的放置过程④放置过程中的问题⑤回溯算法核心⑥回溯算法的求解过程⑦验证算法和代码实现LeetCo…

python学opencv|读取图像(九)用numpy创建黑白相间灰度图

【1】引言 前述学习过程中&#xff0c;掌握了用numpy创建矩阵数据&#xff0c;把所有像素点的BGR取值设置为0&#xff0c;然后创建纯黑灰度图的方法&#xff0c;具体链接为&#xff1a; python学opencv|读取图像&#xff08;八&#xff09;用numpy创建纯黑灰度图-CSDN博客 在…

若依实现图片上传时自动添加水印

文章目录 总体思路1. 修改通用上传方法2. 去除文件路径前两级目录3. 添加水印方法运行效果总结 为了解决图盗用&#xff0c;并有效保护图片版权&#xff0c;若依项目需要实现一个功能&#xff1a;上传图片时&#xff0c;自动在图片上添加水印。这不仅可以有效防止盗用&#xff…

[C#与C++交互] 跨进程通信NamedPipes

目录 1、前言 2、什么是命名管道&#xff1f; 3、实现步骤 4、示例代码 4.1 C 服务器代码 4.2 C# 客户端代码 5、运行步骤 6、注意事项 7、应用场景 8、优缺点 9、总结 1、前言 在 C# 和 C 应用程序之间进行数据交换时&#xff0c;命名管道&#xff08;Named Pipes…