『德不孤』Pytest框架 — 1、Pytest测试框架介绍
1、什么是单元测试框架
单元测试是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。
2、单元测试框架主要做什么
- 测试发现:从多个文件里面去找到我们需要的测试用例。
- 测试执行:按照一定的顺序和规则去执行测试用例,并生成结果。
- 测试判断:通过断言判断预期结果和实际结果的差异。
- 测试报告:统计测试进度,耗时,通过率等数据,并生成测试报告。
3、单元测试框架和自动化测试框架有什么关系
(1)自动化测试框架作用:
- 提高测试效率,降低自动化用例的维护成本。
- 减少人工干预,提高测试的准确性,增加代码的重用性。
- 核心思想是让不懂代码的人,也能够通过这个框架去实现自动化测试。
(2)Pytest单元测试框架和自动化测试框架的关系
单元测试框架:只是自动化测试框架中的组成部分之一。
pom设计模式、数据驱动、关键字驱动、全局配置文件的封装、日志监控、Selenium和Requests的二次封装、报告邮件、断言体系的设计封装等,都是自动化测试框架中的组成部。
4、Pytest测试框架说明
Pytest是Python的一种单元测试框架,全功能且非常成熟,同自带的Unittest测试框架类似,相比于Unittest框架使用起来更简洁,效率更高。
Pytest测试框架,主要有以下几个特点:
- Pytest是一个非常成熟的Python的单元框架,比
Unittest更灵活,容易上手。 - Pytest支持参数化配置。
- Pytest能够支持简单的单元测试和复杂的功能测试,还可以和
Selenium,Requests,Appium结合实现Web自动化,接口自动化,APP自动化。 - 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败,也支持重复执行失败的
case。(跳过用例和reruns失败用例重试)
即:支持测试用例的skip和xfail处理。 - Pytest可以很好的和
Jenkins进行持续集成。 - Pytest可以和
allure生成非常美观的测试报告。 - 在Pytest框架下可以执行
Unittest框架的用例。 - Pytest有很多非常强大的第三方插件,并且这些插件能够实现很多实用的操作。
并且也可以自定义Pytest插件。
5、Pytest框架和Unittest框架区别
(1)Unittest
Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest框架则是Python语言的标准单元测试框架。
Unittest支持自动化测试,测试用例的初始化、关闭和测试用例的聚合等功能,它有一个很重要的特性:它是通过类(class)的方式,将测试用例组织在一起。
(2)Pytest
Pytest是Python的另一个第三方单元测试库。它的目的是让单元测试变得更容易,并且也能扩展到支持应用层面复杂的功能测试。
(3)区别
1)用例编写规则:
Unittest测试框架:
1、提供test.cases,test suites,test fixtures,test rurner相关类,让测试更加明确、方便、可控。
2、测试文件编写前,必须先导入Unittest测试框架,import unittest。
3、测试类必须继承unittest.TestCase类,且测试类要Test_开头。(可去掉横线,下同)
4、测试方法要以test_开头。
5、测试类必须要用unittest.main()方法执行。Pytest测试框架:
1、基于Unittest的扩展框架,比Unittest更简洁、更高效。
2、测试文件必须test_开头。
3、测试类命名必须以test_开头。
4、测试方法必须test_开头(函数也一样)。
(规则可自定义。)- 总结:
Unittest:用例格式复杂,不能兼客Pytest用例。
Pytest:用例格式简单,可以兼容Unittest用例。
2)用例的前置和后置:
Unittest测试框架:
提供了setUp/tearDowm方法,只能针对所有用例。Pytest测试框架:
(1)Pytest提供了模块级、函数级、类级、方法级的setup/teardown,比Unittest的setup/tearDowm方法更活。- 模块级
setup_module/teardown_module:开始于模块始末,全局。 - 类级
setup_class/teardown_class:只在类中前后运行一次(类中)。 - 函数级
setup_function/teardow_function:只对函数用例生效(不在类中)。 - 方法级
setup_method/teardown_method:开始于方法始末(在类中)。 - 类里面的
setup/teardown:运行在调用方法的前后。
(2)函数前加@pytest.fixtures()装饰器,在测试用例中使用Fixture函数。
可作用于function\module\class\session中。
fixture相对于setup/teardown来说的优势,如下: - 命名方式灵活,不局限于
setup/teardown。 conftest.py配置里可以实现数共享,无需import就可自动找到配置数据,可供多个.py文件调用。scope="module",可以实现多个.py文件跨文件共享前置。scope="session",可以实现多个.py文件跨文件使用一个session来完成用例。- 使用
yeild返回,相当于teardown的作用。
- 模块级
3)参数化:
Unittest测试框架:结合DDT实现参数化。Pytest测试框架:直接使用@pytest.mark.parametrize装饰器。
4)断言:
Unittest测试框架:可使用提供的assertEqual,assertIn、assertTrue,assertFalse断言方法。Pytest测试框架:直接使用Python语言内置的assert表达式。
5)用例分类执行:
Unittest测试框架:默认执行全部用例,可以通过加载testsuite执行部分模块的用例。Pytest测试框架:可以通过@pytest.mark来标记测试用例,执行命令前加上参数-m,即可运行标记的用例。
6)失败重运行:
Unittest测试框架:无。Pytest测试框架:支持用例执行失败重跑,提供了pytest-rerunfailures插件。
7)报告:
Unittest测试框架:使用HTMLTestRunnerNew库生成测试报告。Pytest测试框架:使用pytest-HTML、allure插件生成测试报告。
『德不孤』Pytest框架 — 1、Pytest测试框架介绍的更多相关文章
- 『德不孤』Pytest框架 — 2、Pytest的基本使用
目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...
- 『德不孤』Pytest框架 — 3、Pytest的基础说明
目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...
- 『德不孤』Pytest框架 — 4、Pytest跳过测试用例
目录 1.无条件跳过skip 2.有条件跳过skipif 3.练习 自动化测试执行过程中,我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了, 如果我们注释掉或删除掉这 ...
- 『德不孤』Pytest框架 — 5、Pytest失败重试
Pytest失败重试就是,在执行一次测试脚本时,如果一个测试用例执行结果失败了,则重新执行该测试用例. 前提: Pytest测试框架失败重试需要下载pytest-rerunfailures插件. 安装 ...
- 『德不孤』Pytest框架 — 10、setUp()和tearDown()函数
目录 1.setUp()和tearDown()函数介绍 2.setUp()和tearDown()函数作用 3.setUp()和tearDown()函数说明 4.示例 (1)方法级 (2)类级 (3)函 ...
- 『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)
目录 1.Fixture装饰器的用途 2.Fixture参数说明 3.Fixture装饰器简单应用 4.yield执行后置函数 1.Fixture装饰器的用途 做测试前后的初始化设置,如测试数据准备, ...
- 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...
- 『德不孤』Pytest框架 — 15、Pytest参数化
目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...
- 『德不孤』Pytest框架 — 6、Mark分组执行测试用例
目录 1.Pytest中的Mark介绍 2.Mark的使用 3.Mark的注册和使用 4.使用Mark完成失败重试 5.扩展 1.Pytest中的Mark介绍 Mark主要用于在测试用例/测试类中给用 ...
随机推荐
- 【Service】【Database】【MySQL】基础
1. 概念 1.1. 作者:Unireg 1.2. MySQL AB --> MySQL Solaris:二进制版本: 1.3. 官方网站: MySQL: www.mysql.com Maria ...
- Vue API 4 (过渡和动画)
transition name 用于自动生成 CSS 过渡类名.例如:name: fade 将自动拓展为 .fade-enter ,.fade-enter-active等.默认类名为 "v& ...
- String 、StringBuffer、StringBuilder的区别
String:字符串常量 StringBuffer:字符串变量:线程安全的 StringBuilder:字符串变量:线程非安全的 三者执行速度比较:StringBuilder > String ...
- 面向切面编程(Spring AOP)
一.什么是AOP AOP即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.主要体现在日志记录.性能统计.安全控制.事务处理和异常处理等. 1.相关概念 二.切面.切入点配 ...
- 【JavaWeb】【Maven】001 下载与配置
Maven下载与配置 Download Url:Maven – Download Apache Maven After downloading it, unpack it and configure ...
- 『与善仁』Appium基础 — 24、等待activity出现
目录 1.什么是等待activity出现 2.wait_activity()方法 3.获取当前页面的activity方法 4.综合练习 1.什么是等待activity出现 在启动APP的时候,要配置包 ...
- Linux下安装数据库sqlite3
目录 一.简介 二.安装 三.测试 一.简介 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎 ...
- 前置任务(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 在[前置任务列]中编辑任务关联,这是个正经的设置. 说他"正经",是因为在[手动模式]下,这个设置也是 ...
- nginx配置文件简析
https://blog.csdn.net/wangbin_0729/article/details/82109693 #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相 ...
- 使用proxy解决请求跨域问题
背景 在 react 项目里,前端请求接口时出现了跨域问题(类似图片中的提示) 这时最快捷的方法就是让后端同学设置请求允许跨域(如图配置响应头) 如果后端同学不配合,就需要靠我们自己来了! 实现 Re ...