一文5000字详解Pytest单元测试,看完不会来打我【保姆级教程】

一、pytest单元测试框架

1.什么是单元测试框架?

单元测试是指在软件开发当中针对软件的最小单位(函数、方法)进行正确性的检查测试

2.单元测试框架有哪些?

Java:junit 和 testing

python:unittest 和 pytest

3.单元测试框架主要做什么?

1).测试发现:从多个文件里面去找到我们的测试用例

2).测试执行:按照一定的顺序和规则去执行,并生成结果

3).测试判断:通过断言判断预期结果和实际结果的差异

4).测试报告:统计测试进度、耗时、通过率、生成测试报告

二、单元测试框架和自动化测试框架有什么关系

1.什么是自动化测试框架?

把在自动化测试过程中用到的一些功能或者工具,分装成各个模块,包括如何进行自动化脚本编写以及分层功能的基础模块,进行持续集成、定时任务的管理模块,发送测试报告、进行测试结果统计分析的统计模块等,将这些模块组成一套可重用的骨架

2.作用

1)提高测试效率,降低维护成本

2)减少人工干预,提高测试的准确性,增加代码的重用性

3)核心思想是:让不懂代码的人也能够通过这个框架去实现自动化测试

3.pytest单元测试框架和自动化测试框架的关系

1)单元测试框架:只是自动化测试框架中的组成部分之一

2)pom设计模式:只是自动化测试框架中的组成部分之一

3)数据驱动、关键字驱动、全局配置文件的封装、日志监控、selenium,requests二次封装、断言、报告邮件等等

三、pytest简介

1).pytest是一个非常成熟的python的单元框架,比unittest更灵活,容易上手
2).pytest可以和selenium、requests、appium结合实现web自动化、接口自动化、app自动化
3).pytest可以实现测试用例的跳过以及reruns失败用例重试
4).pytest可以和allure生成非常美观的测试报告
5).pytest可以和Jenkins持续集成
6).pytest有很多非常强大的插件,并且这些插件能够实现很多的使用的操作
# 如:pytestpytest-html # (生成html格式的自动化测试报告)pytest-xdist # (测试用例分布式执行,多CPU分发)pytest-ordering # (用于改变测试用例的执行顺序)pytest-rerunfailures # (用例失败后重跑)allure-pytest # (用于生成美观的测试报告)

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

四、安装pytest

安装pytest:pip install pytest

五、pytest的命名规则

1).模块名必须以test_开头或者以test_结尾
2).测试类名必须以Test开头,并且不能有init方法
3).测试方法必须以test开头

六、pytest测试用例的运行方式和执行顺序

1.运行方式

1.主函数模式1).运行所有:pytest.main()2).指定模块:pytest.main(["test_01.py"])3).指定目录:pytest.main(["./test_py"])4).通过nodeid指定用例运行:nodeid有模块名、分隔符、类名、方法名、函数名组成pytest.main(["test_01.py::Test01Class"]) # 指定到类名pytest.main(["test_01.py::Test01Class::test003"]) # 指定到方法名
2.命令行模式1).运行所有:pytest2).指定模块:pytest test_01.py3).指定目录:pytest ./test_py4).通过nodeid指定用例运行:pytest test_01.py::Test01Class::test0033.通过读取pytest.ini配置文件来运行
pytest.ini这个文件他是pytest单元测试框架的核心配置文件1).位置:一般放在项目的根目录2).编码:必须是ANSI,可以使用notepad++修改编码格式3).作用:改变pytest默认的行为4).运行规则:不管是主函数的模式运行,还是命令行模式运行,都会去读取这个配置文件

2.执行顺序

unittest:根据Ascll的大小来绝对的执行的顺序
pytest:默认从上到下
改变默认执行顺序:使用mark标记
@pytest.mark.run(order=3)

七、Pytest生成自带的html测试报告

安装pytest-html:

1.直接执行pytest.main() 【自动查找当前目录下,以test开头的文件或者以test结尾的py文件】

pytest.main([‘--html=./report.html’])

2.pytest.main("模块.py")【运行指定模块下,运行所有test开头的类和测试用例】

pytest.main(["--html=./report.html","模块.py"])

3.运行指定模块指定类指定用例,冒号分割,并生成测试报

pytest.main([‘--html=./report.html’,‘模块.py::类::test_a_001'])

4.Pytest调用语句

pytst.main(['-x','--html=./report.html','t12est000.py'])-x出现一条测试用例失败就退出测试
-s:显示print内容
-v:显示更详细的信息
-vs:这两个参数一起使用
-n:支持多线程或者分布式运行测试用例
-reruns NUM: 失败用例重跑
-x:只要有一个用例报错,那么测试停止
--maxfail=2:出现两个用例失败就停止
-k:根据测试用例的部分字符串指定测试用例

5.使用@pytest.mark.skip()跳过该用例(函数)

class Test01Class():@pytest.mark.skip # 跳过test001def test001(self):assert 5 == 4  # 断言

6.pytest运行结果字符意义

. 点号,表示用例通过
F 表示失败 Failure
E 表示用例中存在异常 Error
S 表示跳过 skipped

八、读取文件

1.读取csv文件

import csv #导入csv模块
class ReadCsv():def read_csv(self):item =[] #定义一个空列表c = csv.reader(open("../commonDemo/test1.csv","r")) #得到csv文件对象for csv_i in c:item.append(csv_i) #将获取的数据添加到列表中return itemr = ReadCsv()
print(r.read_csv()

具体步骤:

1.拿到开发的代码
class CalcClass():def xf(self, a, b):c = a * breturn cdef cf(self, a, b):c = a / breturn c
# cc =CalcClass()
# ff = cc.xf(1,2)
# print(ff)
# gg = cc.cf(1,2)
# print(gg)

2.要测试的数据

2,3,6

3.读取CSV文件

import csv # 导入csv模块class ReadCsv():def read_csv(self):item = [] # 定义一个空列表c = csv.reader(open("../dataDemo/a.csv", "r", encoding="utf-8")) # 得到csv文件对象for csv_i in c:item.append(csv_i) # 将获取的数据添加到列表中return item# r = ReadCsv()
# print(r.read_csv())

4.测试用例+生成测试报告代码

"""
from readDemo.readcsv import ReadCsv
import pytest
from demo.calcDemo import CalcClass
import os
import allurer = ReadCsv()
rr = r.read_csv()
c = CalcClass()class TestCsv():def testcsv(self):for i in rr:bl = c.xf(int(i[0]), int(i[1]))assert bl == int(i[-1])if __name__ == '__main__':pytest.main(["--html=./Csvreport.html", "test_csv.py"])

5.生成测试报告

读取xml文件

from xml.dom import minidom
class Readxml():def read_xml(self,filename,onename,twoname):root =minidom.parse(filename)firstnode =root.getElementsByTagName(onename)[0]secondnode=firstnode.getElementsByTagName(twoname)[0].firstChild.datareturn secondnode

九、allure

Allure是一款轻量级并且非常灵活的开源测试报告框架。它支持绝大多数测试框架, 例如TestNG、Pytest、JUint等。它简单易用,易于集成。

1.配置allure的环境变量

2.验证allure是否配置成功

3.安装allure

pip install allure-pytest
# allure-pytest是Pytest的一个插件,通过它我们可以生成Allure所需要的用于生成测试报告的数据

4.Allure常用的几个特性

@allure.feature # 用于描述被测试产品需求
@allure.story # 用于描述feature的用户场景,即测试需求
with allure.step():# 用于描述测试步骤,将会输出到报告中
allure.attach # 用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图

5.具体效果

from readDemo.readcsv import ReadCsv
import pytest
from demo.calcDemo import CalcClass
import os
import allurer = ReadCsv()
rr = r.read_csv()
c = CalcClass()class TestCsv():@allure.feature("两数相乘") # 用于描述被测试产品需求@allure.story("乘除结果") # 用于描述feature的用户场景,即测试需求def testcsv(self):with allure.step("查看乘法结果"): # 用于描述测试步骤,将会输出到报告中allure.attach("6", "附加信息") # 用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图等for i in rr:bl = c.xf(int(i[0]), int(i[1]))assert bl == int(i[-1])if __name__ == '__main__':pytest.main(['--alluredir', 'reportCsv/result', 'test_csv.py'])split = 'allure ' + 'generate ' + './reportCsv/result ' + '-o ' + './reportCsv/html ' + '--clean'  # 将测试报告转为html格式os.system(split) # system函数可以将字符串转化成命令在服务器上运行

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!  

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

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

相关文章

SI314软硬件兼容替代GTX314L—低功耗14通道电容触摸传感器

Si314是一款具有自动灵敏度校准功能的14通道电容传感器,其工作电压范围为1.8~5.5V。 Si314设置休眠模式来节省功耗,此时,功耗电流为10uA3.3V。 Si314各个感应通道可实现独立使能、校准、灵敏度调节,可以确保可靠性,且具…

linux 安装下载conda并创建虚拟环境

目录 1. 下载安装2. 创建虚拟环境1. 下载安装 在window操作系统中下载anconda包,并通过scp传输到ubuntu操作系统 具体anconda包在如下界面: anconda包 目录 博主选择了最新的包:Anaconda3-2023.09-0-Linux-x86_64.sh 通过scp传输到ubuntu操作系统中: 并在ubuntu操作系…

Linux 安全 - LSM源码分析

文章目录 前言一、简介1.1 DAC 和 MAC1.2 LSM 调用流程图 二、LSM相关数据结构2.1 struct security_hook_list2.2 union security_list_options2.3 structure security_hook_heads 三、security_bprm_check四、LSM 源码分析3.1 early_security_init3.2 security_init3.2.1 secu…

第二证券:市场情绪或逐步修复 十月行情值得期待

第二证券指出,周一A股商场探底回升、小幅轰动收拾,沪指全天底子出现先抑后扬的运转特征。其时上证综指与创业板指数的平均市盈率分别为12.46倍、33.94倍,处于近三年中位数以下水平,商场估值仍然处于较低区域,合适中长期…

华为OD机考B卷 | 100分】阿里巴巴找黄金宝箱(JAVA题解——也许是全网最详)

前言 本人是算法小白,甚至也没有做过Leetcode。所以,我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 题干 1. 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子&…

【C++设计模式之责任链模式:行为型】分析及示例

简介 责任链模式是一种行为型设计模式,它允许将请求沿着处理链传递,直到有一个处理器能够处理该请求。这种模式将请求的发送者和接收者解耦,同时提供了更高的灵活性和可扩展性。 描述 责任链模式由多个处理器组成一个处理链,每…

香橙派、树莓派、核桃派、鲁班猫安装jupyter notebook【ubuntu、Debian开发板操作类似】

文章目录 前言一、安装环境二、使用方法总结 前言 香橙派树莓派鲁班猫安装一下调试代码还是比较方便的。 一、安装环境 假设已经安装好了miniconda3。如果还没安装可以参考我另外一篇博文,有写怎么安装。 pip install jupyter notebook # 生成Jupyter Notebook的…

算法题:K 次取反后最大化的数组和(典型的贪心算法问题)

这道题没有看题解,直接提交,成绩超越99.5%,说明思路是优的。就是考虑的情况里面弯弯绕比较多,需要考虑全面一点。(本题完整题目附在了最后面) 具体思路如下: 1、首先排序,然后从最…

智能合约漏洞,价值 5200 万美元的 Vyper 漏洞攻击原理分析

智能合约漏洞,价值 5200 万美元的 Vyper 漏洞攻击原理分析 7 月 30 日,因为 Vyper 部分版本中的漏洞,导致 Curve、JPEG’d 等项目陆续受到攻击,损失总计超过 5200 万美元。 Safful 对此事件第一时间进行了技术分析,并…

2023 IDC中国数字金融论坛丨中电金信向行业分享“源启+应用重构”新范式

9月8日,IDC主办的“2023 IDC中国数字金融论坛”在北京召开。中电金信受邀参会,并带来了深度数字化转型趋势之下关于应用重构的分享与洞见。 论坛重点关注金融科技创新发展趋势与数字化转型之路,中电金信副总经理、研究院院长况文川带来了“创…

nSoftware IPWorks IoT 2022 Java 22.0.8 Crack

物联网库,使用这个轻量级组件库,可以在任何平台上的应用程序中轻松实现物联网 (IoT) 通信协议。 nSoftware IPWorks IoT 最新的 IPWorks IoT 现已推出!最新版本的 IPWorks IoT 具有现代化和简化的体验,包括 .NET 中的异步和跨平台…

[开源]MIT协议,开源论坛程序,拥有友好的用户界面和操作体验

一、开源项目简介 尤得一物是一个开源论坛程序,提供丰富的功能,可以作为管理或分享文章的论坛博客,也可以在此基础上进行自定义开发。 二、开源协议 使用MIT开源协议 三、界面展示 四、功能概述 尤得一物是一个开源论坛程序,…

vue-7-vuex

一、Vuex 概述 目标:明确Vuex是什么,应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具,状态就是数据。 大白话:Vuex 是一个插件,可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。例如:购…

arcgis地形分析全流程

主要内容:DEM的获取与处理、高程分析、坡度分析、坡向分析、地形起伏度分析、地表粗糙度分析、地表曲率分析; 主要工具:镶嵌至新栅格、按掩膜提取、投影栅格、坡度、坡向、焦点统计 一 DEM的获取与处理 1.1 DEM是什么? DEM(D…

安全与隐私:直播购物App开发中的重要考虑因素

随着直播购物App的崭露头角,开发者需要特别关注安全性和隐私问题。本文将介绍在直播购物App开发中的一些重要安全和隐私考虑因素,并提供相关的代码示例。 1. 数据加密 在直播购物App中,用户的个人信息和支付信息是极为敏感的数据。为了保护…

Linux文件与目录的增删改查

一、增 1、mkdir命令 作用: 创建一个新目录。格式: mkdir [选项] 要创建的目录 常用参数: -p:创建目录结构中指定的每一个目录,如果目录不存在则创建,如果目录已存在也不会被覆盖。用法示例: 1、mkdir directory:创建单个目录 这个命令会在当前目录下创建一个名为…

简单好用的CHM文件阅读器 CHM Viewer Star最新 for mac

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件,支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计,支持多种浏览模式,如书籍模式、缩略图模式和文本模式等,并提供了丰富的功能和工具,如…

亚马逊流量攻略:如何将流量转化为销售,测评实现销售飙升!

在电商领域,流量获取一直是一个核心议题。对于任何希望增加订单量的商家而言,将流量引导至自身店铺并成功转化为销售至关重要。对于初入电商领域或规模较小的卖家来说,亚马逊内部的流量获取通常可带来显著的销售业绩。那么,如何利…

python—如何提取word中指定内容

假设有一个Word,该Word中存在 “联系人” 关键字,如何将该Word中的联系人所对应的内容提取出来呢? 该Word内容如下所示: 要在给定的Word文档中提取出与"联系人"关键字对应的内容,可以使用Python的py…

【抓包https请求网络异常/无数据怎么破】

当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。 当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的Ap…