Pytest系列-快速入门和基础讲解(1)

前言

  • 目前有两种纯测试的测试框架,pytestunittest
  • unittest应该是广为人知,而且也是老框架了,很多人都用来做自动化,无论是UI还是接口
  • pytest是基于unittest开发的另一款更高级更好用的单元测试框架

单元测试框架介绍

  • 单元测试框架是在自动化测试或者白盒测试中对软件的最小单元(函数、方法)进行测试的框架
  • 单元测试框架的分类:python(unitest、pytest)、Java(Testing(主流)、Junit)
  • 单元测还框架主要做什么
    • 发现测试用例
    • 执行测试用例
    • 判断测试结果
    • 生成测试报告

为什么要用Pytest

pytest 的官方网站介绍,它具有如下特点:
1、非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
2、能够支持简单的单元测试和复杂的功能测试
3、支持参数化
4、执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
5、支持重复执行(rerun)失败的 case
6、支持运行由 nose, unittest 编写的测试 case
7、可生成 html 报告
8、方便的和持续集成工具 jenkins 集成
9、可支持执行部分用例
10、具有很多第三方插件,并且可以自定义扩展

Pytest安装、简介以及常用插件安装

Pytest安装

cmd运行

pip install -U pytestpip3 install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

pycharm 直接安装
在这里插入图片描述

查看版本

pytest --version

Pytest简介及常用插件安装

pytest官方文档 : https://docs.pytest.org/en/latest/contents.html

在这里插入图片描述
步骤:打开Pycharm,在项目根路径下面 创建一个.txt的文件夹,将要安装的插件放进去 (注:使用此方法是在虚拟环境安装 DOS环境会安装不成功
在这里插入图片描述
打开控制台 输入安装语句 进行安装:
在这里插入图片描述
上面方法可能安装不成功,直接在terminal 单个安装也可以
在这里插入图片描述

Pytest 默认测试用例的规则以及基础应用

Pytest 用例设计的规则

用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的
1、文件名必须以test_.py 文件开头和test.py结尾
2、以 test
开头的函数
3、以 test 开头的类,且不能包含 _ _ init_ _ 方法
4、以 test_ 开头的类里面的方法
5、所有的包 package 必须要有__init__.py 文件

Pytest执行基础应用

    **执行:Alt+Enter自动导报**

1、通过命令行执行方式执行,再terminal 和 cmd 中 直接执行。

pytest  			执行某个目录下所有的用例
pytest 脚本名称.py	执行某一个 py 文件下用例

执行参数:
(1)运行start.py 模块里面的某个函数,或者某个类,某个类里面的方法
-v 和不加 -v 都可以,加 -v 的话,打印的信息更详细

pytest -v 08_mark.py::TestClass::test_methodpytest 08_mark.py::TestClass::test_methodpytest test.py::test_answer

(2)运行start.py 模块里面,测试类里面的某个方法

pytest start.py::TestClass::test_two

(3) -m 标记表达式(先了解)

 pytest -m login

将运行用 @pytest.mark.login 装饰器修饰的所有测试
(4)-q 简单打印,只打印测试用例的执行结果

在这里插入代码片
pytest -q test.py

(5)-s 详细打印 (输出调试信息)

 pytest -s test.py

(6)-x 遇到错误时停止测试

 pytest test.py -x

(7)—maxfail=num,当用例错误个数达到指定数量时,停止测试

 pytest test.py --maxfail=1

(8)-k 匹配用例中包含某个字符串的名称
执行测试用例名称包含http的所有用例

pytest -s -k http test.py

(9)-k 根据用例名称排除某些用例

1 pytest -s -k "not http" start.py

(10)-k 同时匹配不同的用例名称

pytest -s -k "method or weibo" start.py

(11)-n=num 多线程运行(插件:pytest-cdist 已安装成功)

pytest  -vs -n=2     两个线程一起执行

(12)–reruns=num 失败重跑, num 是重跑的次数(插件:pytest-rerunfailres 安装成功)
一个进程里面有多个线程

raise Exception()  抛出异常
try except  解决异常pytest -vs --reruns=2   抛出异常后重新执行两次

(13)–html 生成html报告 (插件:pytest-html 已安装成功)

pytest --vs --html ./reporters/result.html   后面是存放的位置

2、通过主函数main方式执行,直接在代码运行文件最后添加。

if __name__=='__main__';pytest.mian()

在项目名称下添加运行文件也可以执行:

if __name__=='__main__';pytest.mian(["-vs"])

3、通过配置文件pytest.ini文件执行
注意
① 一般放在项目的根目录下,名称必须是pytest.ini;

② 编码格式为 ANSI;当有中文时可能需要改变编码格式为UTF-8或GB2312 ;

③ pytest.ini文件可以改变默认的测试用例规则;

④ 不管是命令行也好还是说主函数运行也好,都会加载这个配置文件。
举例:

[pytest]        #配置文件
#参数
addopts = -vs -m "smoke" #表示 只执行smoke用例testpaths = ./testcases  #测试用例的位置python_files = test_*.py  #python文件名的规则,会执行对应文件的测试用例python_classes = Test* #python文件类名的规则,对应文件会执行测试用例python_functions = Test_*  #python文件方法名的规则,对应文件会执行测试用例
------------------------------------------------
#测试用例分组执行。有时候用例多只执行个别模块的可以对测试用例进行分组执行。
#标记
markers =smoke:冒烟用例denglu:登录product_manage:商品管理.....
#代码文件中的测试用例上面添加使用
@pytest.mark.smoke

Pycharm运行Pytest

1、首先,要去settings里面设置单元测试框架为Pytest
2、如果是nosetests的话,右键运行是以python脚本运行的
3、如果设置了unittest则是以unittest框架去运行
在这里插入图片描述
在这里插入图片描述

注意

pytest 是可以兼容 unittest 脚本的,写的 unittest 用例也能用 pytest 框架去运行。

Pytest跳过测试用例

无条件跳过

在测试用例上方填写代码

class Testcase@pytest.mark.skip(reason='无理由跳过')def test_01(self):print("测试")

有条件跳过

在已有条件不满足的情况下,选择跳过

class Testcase:work=1@pytest.mark.skipif(work<1,reason="工作少于1年跳过")def test_01(self):print("测试")

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

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

相关文章

【智慧工地源码】物联网和传感器技术在智慧工地的应用

物联网&#xff08;IoT&#xff09;和传感器技术在智慧工地中扮演着至关重要的角色。这些技术的应用&#xff0c;使得智慧工地能够实现对施工过程的精确监控、数据收集和分析&#xff0c;以及设备互联&#xff0c;从而提高工程效率、减少成本并改善工人的工作环境。 一、物联网…

微信小程序navigateTo进入页面后返回原来的页面需要携带数据回来

需求 如图&#xff1a;点击评论后会通过wx.navigateTo进入到评论页面&#xff0c;评论完返回count给原页面&#xff0c;重新赋值实现数量动态变化&#xff0c;不然要刷新这个页面才会更新最新的评论数量。 实现方式&#xff1a; 在评论页面通过wx.setStorageSync(‘data’…

在Android和iOS上设置手机ip详细教程

大家好&#xff01;今天我们将分享一个关于如何在Android和iOS设备上设置手机ip&#xff08;Layer 2 Tunneling Protocol&#xff09;的简易教程。如果你想要通过安全且可靠的方式连接到远程网络&#xff0c;那么跟着本文一起学习吧&#xff01;无需复杂操作&#xff0c;让我们…

jmeter调试错误大全

一、前言 在使用jmeter做接口测试的过程中大家是不是经常会遇到很多问题&#xff0c;但是无从下手&#xff0c;不知道从哪里开始找起&#xff0c;对于初学者而言这是一个非常头痛的事情。这里结合笔者的经验&#xff0c;总结出以下方法。 二、通过查看运行日志调试问题 写好…

web端调用本地摄像头麦克风+WebRTC腾讯云,实现直播功能

目录 关于直播直播流程直播视频格式封装推流和拉流 获取摄像头和麦克风权限navigator.getUserMedia()MediaDevices.getUserMedia() WebRTC腾讯云快直播 关于直播 视频直播技术大全、直播架构、技术原理和实现思路方案整理 直播流程 视频采集端&#xff1a; 1、视频采集&#…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程

详情点击链接&#xff1a;基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程 一&#xff0c;空间数据获取与制图 1.1 软件安装与应用 1.2 空间数据 1.3海量空间数据下载 1.4 ArcGIS软…

337. 打家劫舍 III

337. 打家劫舍 III C代码&#xff1a;二叉树 动态规划 typedef struct { // 每个节点都有两个状态&#xff1a;选中、不选中int selected;int notSelected; } SubtreeStatus;SubtreeStatus dfs(struct TreeNode *node) {if (!node) {return (SubtreeStatus){0, 0};}SubtreeS…

【文末送书】全栈开发流程——后端连接数据源(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Python之面向对象(一)

目录 面向对象为什么要面向对象&#xff1f;要素 定义一些特性内存空间实例的创建与初始化创建实例方法__new__初始化实例方法__init__ 类的继承多态新式类与经典类 面向对象 为什么要面向对象&#xff1f; 方便版本更新迭代&#xff0c;程序结构清晰明了 要素 类&#xff…

ffmpeg-android studio创建jni项目

一、创建native项目 1.1、选择Native C 1.2、命名项目名称 1.3、选择C标准 1.4、项目结构 1.5、app的build.gradle plugins {id com.android.application }android {compileSdk 32defaultConfig {applicationId "com.anniljing.ffmpegnative"minSdk 25targetSdk 32…

LeetCode 865. Smallest Subtree with all the Deepest Nodes【树,DFS,BFS,哈希表】1534

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

聚鑫数藏平台——引领数字资产管理新风向

随着数字经济的飞速发展&#xff0c;新金融生态应运而生。区块链技术的崭新突破&#xff0c;使数字资产的重要性日益凸显&#xff0c;为投资者带来了前所未有的机遇和挑战。在此背景下&#xff0c;聚鑫数藏平台横空出世&#xff0c;引领着数字资产管理的新风向。 聚鑫数藏平台&…