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

单元测试框架

一、单元测试的定义
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.rhkb.cn/news/490038.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA爬虫获取1688关键词接口

以下是使用Java爬虫获取1688关键词接口的详细步骤和示例代码&#xff1a; 一、获取API接口访问权限 要使用1688关键词接口&#xff0c;首先需要获取API的使用权限&#xff0c;并了解接口规范。以下是获取API接口的详细步骤&#xff1a; 注册账号&#xff1a;在1688平台注册一…

【游戏设计原理】8 - 霍华德的隐匿性游戏设计法则

1. 霍华德的隐匿性游戏设计法则 霍华德的隐匿性游戏设计法则的核心思想是&#xff1a;“秘密的重要性与其表面上的无辜性和完整度成正比”。这意味着&#xff0c;当游戏开始时&#xff0c;设计上越是简洁、无害、直观的元素&#xff0c;隐藏的深层意义和转折就会显得更加震撼和…

k8s中用filebeat文件如何收集不同service的日志

以下是一个详细的从在 Kubernetes 集群中部署 Filebeat&#xff0c;到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案&#xff1a; 理解需求&#xff1a;按服务分离日志索引 在 Kubernetes 集群中&#xff0c;有web-oper和web-api两种微服务&#xff0c;希…

前端退出对话框也就是点击右上角的叉,显示灰色界面,已经解决

文章目录 遇到一个前端bug&#xff0c;点击生成邀请码 打开对话框 然后我再点击叉号&#xff0c;退出对话框&#xff0c;虽然退出了对话框&#xff0c;但是显示灰色界面。如下图&#xff1a; 导致界面就会失效&#xff0c;点击任何地方都没有反应。 发现是如下代码的问题&am…

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测

一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测 目录 一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现INFO-CNN-SVM向量加权算法优化卷积神经网络结…

【Stable Diffusion】SD安装、常用模型(checkpoint、embedding、LORA)、提示词具、常用插件

Stable Diffusion&#xff0c;一款强大的AI模型&#xff0c;让我们能够创造出惊人的艺术作品。本文将为您介绍如何安装Stable Diffusion以及深入使用的学习教程。 1. 安装Stable Diffusion (需要的小伙伴可以文末自行扫描获取) Stable Diffusion的安装可能是第一步&#xff0…

【工具变量】上市公司企业资本支出数据(1990-2022年)

一、计算方式&#xff1a;资本支出的公式为:经营租赁所支付的现金购建固定资产、无影资产和其他长期资产所支付的现金-处置固定资产、无形资产和其它长期资产而收回的现金净额。 二、数据范围&#xff1a;包括原始数据详细来源和最终数据结果 三、参考文献&#xff1a;[1]杨兴…

洛谷 P10483 小猫爬山 完整题解

一、题目查看 P10483 小猫爬山 - 洛谷 二、解题思路 我们将采取递归 剪枝的思想&#xff1a; sum数组存放每辆车当前载重。 每次新考虑一只小猫时&#xff0c;我们尝试把它放进每个可以放进的缆车中&#xff08;需要回溯&#xff09; for (int i 0; i < k; i) {if (sum[i]…

Leetcode二叉树部分笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Leetcode二叉树部分笔记 1.二叉树的最大深度2.同样的树3.翻转二叉树4.对称二叉树**5. **填充每个节点的下一个右侧节点指针 II**6. 二叉树展开为链表7. 路经总和8.完全二叉树…

如何用状态图进行设计06

独立的控制线程 扩展状态图也提供了获取无序的输入事件的方法。这意味着一个状态开始时&#xff0c;它可能位于一个或多个控制线程的交叉点。控制行为的每个独立线程都类似一个状态机&#xff0c;独自运行&#xff0c;互不干扰。因此&#xff0c;这些控制线程可能会同时发生状…

【多模态】MiniCPM-V多模态大模型使用学习

MiniCPM-V模型使用 前言1. 模型文件下载和选择2. 环境安装配置3. 模型微调3.1 qlora微调minicpm-v-int43.2 lora微调minicpm-v3.3 merge_lora3.4 lora微调后量化int4 4. 模型推理4.1 huggingface API4.2 swift API(A) swift&#xff08;不支持batch inference&#xff09;(B) s…

快速上手Neo4j图关系数据库

参考视频&#xff1a; 【IT老齐589】快速上手Neo4j网状关系图库 1 Neo4j简介 Neo4j是一个图数据库&#xff0c;是知识图谱的基础 在Neo4j中&#xff0c;数据的基本构建块包括&#xff1a; 节点(Nodes)关系(Relationships)属性(Properties)标签(Labels) 1.1 节点(Nodes) 节点…

Transformer: Attention Is All You Need (2017) 翻译

论文&#xff1a;Attention Is All You Need 下载地址如下: download: Transformer Attention Is All you need Attention Is All You Need 中文 《Attention Is All You Need》是《Transformer》模型的开创性论文&#xff0c;提出了一种全新的基于注意力机制的架构&#xf…

可视化报表如何制作?一文详解如何用报表工具开发可视化报表

在如今这个数据驱动的商业时代&#xff0c;众多企业正如火如荼地推进数字化转型&#xff0c;力求在激烈的市场竞争中占据先机。然而&#xff0c;随着业务规模的扩大和运营复杂度的提升&#xff0c;企业的数据量爆炸式增长&#xff0c;传统报表格式单一、信息呈现密集且不易解读…

Angular由一个bug说起之十二:网页页面持续占用CPU过高

随着网络日益发达&#xff0c;网页的内容也更加丰富&#xff0c;形式也更加多样化。而随之而来的性能问题也不容小觑。这篇文章我会根据我在实践中遇到的一个问题来总结&#xff0c;我在面对性能问题的一些解决步骤&#xff0c;希望能对大家有所启发。 查找问题原因 我接触的…

MATLAB图卷积神经网络GCN处理分子数据集节点分类研究

全文链接&#xff1a;https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络&#xff08;GCN&#xff09;对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节&#xff0c;通过对分子数据集的操作实践&#xff0c;展示了完整的节点分类流程&#…

uniapp中vuex(全局共享)的应用

一、Vuex概述 1.1 官方解释 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 它采用集中式存储管理 应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化 - Vuex 也集成到 Vue 的官方调试工具 devtools extension&#xff0c;提供了诸…

华为云服务器搭建基于LNMP部署wordpress

Ubuntu系统搭建过程目录 一、检查环境1.1 检查是否安装Nginx1.2 检查是否安装Mysql1.3 检查是否安装PHP二、更新软件包以及安装所需要的依赖 三、安装Nginx3.1 下载并解压nginx3.2. 编译安装3.3 启动和停止和测试3.4 创建服务脚本3.5 Nginx目录 四、安装Mysql4.1 安全安装配置4…

ElasticSearch01-概述

零、文章目录 ElasticSearch01-概述 1、Elastic Stack &#xff08;1&#xff09;简介 官网地址&#xff1a;https://www.elastic.co/cn/ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际…

Python学习(二)—— 基础语法(上)

目录 一&#xff0c;表达式和常量和变量 1.1 表达式 1.2 变量 1.3 动态类型特性 1.4 输入 二&#xff0c;运算符 2.1 算术运算符 2.2 关系运算符 2.3 逻辑运算符 2.4 赋值运算符 2.5 练习 三&#xff0c;语句 3.1 条件语句 3.2 while循环 3.3 for循环 四&#…