0基础如何使用全功能的Python测试框架?

如何使用pytest?

大纲

安装和简单使用

配置文件

断言

一. 第一步 —— 安装和简单使用

pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:

• 1、简单灵活,容易上手,文档丰富;

• 2、支持参数化,可以细粒度地控制要测试的测试用例;

• 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);

• 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;

• 5、测试用例的skip和xfail处理;

• 6、可以很好的和CI工具结合,例如jenkins

安装

pip3 install pytest

简单使用

新建一个test_sample.py文件,输入以下代码:

def inc(x):
return x + 1

def test_answer():
assert inc(3) == 5

在test_sample.py文件的目录下,执行pytest命令,pytest将运行当前目录及其子目录下所有名称为“test_*.py” 或 “*_test.py”的文件

我们使用了assert语句来验证测试期望值,pytest中有一种断言反思机制,能智能地报告assert表达式的中间值,这个测试返回了一个失败报告,因为inc(3)没有返回5

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

二. 第二步 —— 配置文件

pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行。

[pytest]
# 添加命令行参数
addopts = -s
# 文件搜索路径
testpaths = ./scripts
# 文件名称
python_files = test_*.py
# 类名称
python_classes = Test*
# 方法名称
python_functions = test_*

addopts

addopts参数可以更改默认命令行选项,这个当我们在cmd输入指令去执行用例的时候,会用到,比如我想测试完生成报告,指令比较长

pytest -s —html=report.html

每次输入这么多,不太好记住,于是可以加到pytest.ini里

在配置文件中修改 addopts = -s —html=report.html

这样我下次打开cmd,直接输入pytest,它就能默认带上这些参数了

testpaths

默认的情况下,pytest将会进入到当前目录下的目录和文件中,去收集测试用例(test_开头的函数)。但是很多时候我们只想搜索固定的某一个文件夹,比如项目目录下的scripts文件夹。这样的话,我们可以通过配置文件来是想这个功能

testpaths = ./scripts

python_files

pytest默认会找test开头的py文件,如果我们想指定某个文件或者指定某些有规律的文件名可以使用这个参数来进行修改

python_files = test_*.py

python_classes

pytest默认会找Test开头的类,如果我们想指定某个类或者指定某些有规律的类名可以使用这个参数来进行修改

python_classes = Test*

python_functions

pytest默认会找test开头的函数,如果我们想指定某个函数或者指定某些有规律的函数名可以使用这个参数来进行修改

python_functions = test_*

三. 第三步 —— 断言

编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

assert 预期结果 == 实际结果

def test_sum(self):
a = 1
b = 2
sum_num = a + b
assert 3 == sum_num

首先这个 3 是一个预期的结果,sum_num是实际的结果,框架会自动判断二者是否是 == 的关系,如果是,则断言成功,脚本通过。如果不是,则断言失败,脚本不通过。

总结

pytest 还有非常多用法,比如fixture,各式各样的第三方插件。

上面就是pytest的一个简单的入门。如果在学习一些 selenium 或者 appium 的相关知识。我们就可以结合上面的内容来做基本的自动化测试了。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

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

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

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

相关文章

miniconda安装

Miniconda是一个小型版的Anaconda,它包含了一个包管理工具conda和Python。Miniconda适用于那些只需要管理Python包和环境,而不需要Anaconda中包含的大部分科学计算工具的用户。 Miniconda的安装过程相对简单。你可以从清华大学开源软件镜像站下载Minico…

Maven下载及安装,集成eclipse中,配置环境变量,创建maven项目等

这里写目录标题 Maven环境配置环境变量&#xff1a;eclipse中配置maveneclipse创建maven项目 Maven环境 解压 配置&#xff1a; 本地仓库的位置&#xff1a; <!-- 配置maven本地仓库 --> <!-- 目录可以提前创建&#xff0c;也可以后期生成 --><localReposito…

c语言-实现动态内存管理的库函数

文章目录 前言一、什么是动态内存分配&#xff1f;二、malloc()和free()2.1 malloc()介绍2.2 malloc()的使用2.3 free()介绍 三、calloc()3.1 calloc()介绍3.2 calloc()使用 四、realloc()4.1 realloc()介绍4.2 realloc()使用 总结 前言 本篇文章介绍c语言中实现动态内存管理的…

【Python从入门到进阶】47、Scrapy Shell的了解与应用

接上篇《46、58同城Scrapy项目案例介绍》 上一篇我们学习了58同城的Scrapy项目案例&#xff0c;并结合实际再次了项目结构以及代码逻辑的用法。本篇我们来学习Scrapy的一个终端命令行工具Scrapy Shell&#xff0c;并了解它是如何帮助我们更好的调试爬虫程序的。 一、Scrapy Sh…

MyBatis关联查询实战:一对一与一对多详细解析

MyBatis关联查询实战&#xff1a;一对一与一对多详细解析 MyBatis是一款强大的持久层框架&#xff0c;提供了多种方式来处理关联查询&#xff0c;其中包括一对一和一对多的情况。在本文中&#xff0c;我们将深入探讨这两种关联查询的实现方式&#xff0c;并通过具体的示例代码进…

poi-tl模板引擎根据树形结构输出word文档(文档模板)

最近在做一个需求&#xff0c;就是根据当前的树形结构&#xff0c;输出到word文档中。下面展示一下小demo 目录 1、输入&#xff1a; 2、输出&#xff1a;文档.docx 3、代码展示 4、测试结果 4.1、模板文档内容 4.2、输出文档 5、总结 1、输入&#xff1a; root---树节…

Unity New Input System 及其系统结构和源码浅析【Unity学习笔记·第十二】

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/132534422 作者&#xff1a;CSDN|Ringleader| 主要参考&#xff1a; 官方文档&#xff1a;Unity官方Input System手册与API官方测试用例&#xff1a;Unity-Technologies/InputS…

Aria2 WebUI控制台 任意文件读取漏洞复现(CVE-2023-39141)

0x01 产品简介 Aria2 WebUI控制台是用于下载文件的实用程序。它支持 HTTP(S)/FTP/SFTP/BitTorrent 和 Metalink 协议。aria2可以从多个来源/协议下载文件,并尝试利用您的最大下载带宽。它支持同时从HTTP(S)/FTP/SFTP和BitTorrent下载文件,而从HTTP(S)/FTP/SFTP下载的数据上…

算法之【前缀和】讲解

前言&#xff1a; 我们首先要明白何前缀和&#xff1f; 前缀和就是快速求出数组中某一个连续区间的和。算法的时间复杂度会将一个等级&#xff01; 本文章主要讲解前缀和模板&#xff0c;分别为一维前缀和和二维前缀和。 一维前缀和&#xff1a; 第一步&#xff1a;预处理…

Vue+ElementUI渲染select下拉框

User.java /*实现getter和setter方法注解*/ Data public class User {private Integer id;private String name; } UserMapper.java Mapper public interface CommonUserMapper {/**查询所有*/List<CommonUser> selectAllCommonUser(); } UserMapper.xml <?xml …

makefile 编译动态链接库使用(.so库文件)

makefile 编译动态链接库使用&#xff08;.so库文件&#xff09; 动态链接库:不会把代码编译到二进制文件中&#xff0c;而是在运行时才去加载&#xff0c; 好处是程序可以和库文件分离&#xff0c;可以分别发版&#xff0c;然后库文件可以被多处共享 动态链接库 动态&#…

支付宝:多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!

1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败&#xff0c;则…