Python自动化测试框架pytest的详解安装与运行

1. pytest的介绍

pytest是一个非常成熟的全功能的python测试工具,它主要有以下特征:

简单灵活,容易上手;

支持简单的单元测试和复杂的功能测试

显示详细的断言失败信息

能自动识别测试模块和测试功能

有测试会话、测试模块、测试类、测试函数级别的fixture

可用于selenium/Appium等自动化测试和接口自动化测试(pytest+requests);

拥有丰富的第三方插件,还可自定义扩展;

可与持续集成工具进行很好的集成,如:Jenkins。

2. pytest的安装

1. 使用以下命令进行安装

1

pip install -U pytest

参数说明:
-U: 将指定的软件包升级至当前最新的可用版本
其他说明:
官网安装说明有加上-U参数,不加上-U参数亦可

2. 检查是否成功安装正确版本

1

2

$ pytest --version

pytest 6.2.4

3. pytest识别测试的条件

1.若无指定参数,pytest会从testpath(如果配置)或当前目录下递归查找与 norecursedirs不匹配的目录。

2.查找目录中所有符合test_*.py*_test.py的文件

3.从匹配到的测试文件中,搜集满足以下条件的测试用例:

  • 在类之外的所有test_*方法
  • Test*类中包含的所有test_*方法(Test*类中不能含有__init__()方法)

4. pytest的运行

pytest的运行分为以下方式:

1. Pycharm中进行调用
2. Python代码中调用
3. 使用命令行进行调用

4.1 Pycharm中调用

Pycharm中默认的test runner是Unittest,无法识别使用pytest编写的测试文件和测试用例

在这里插入图片描述

 

进入Preferences-->Tools-->Python Integrted Tools,

修改Testing下的Default test runner,改成pytest后,

则可以直接使用Pycharm中的Run按钮无参数的调用pytest。

 

 

4.2 Python代码中调用

在代码中添加入口函数—pytest.main(),即可在Python代码中调用pytest。

pytest.main()的参数:

1. args:命令行指令列表集

示例代码sample1:

1

2

3

4

5

6

7

8

import pytest

class TestDemo:

    def test_demo1(self):

        print("test_demo1")   

    def test_demo2(self):

        print("test_demo2")

    if  __name__=='__main__':

     pytest.main(['test_sample.py::TestDemo::test_demo1','-v'])

pytest.main(['test_sample.py::test_demo1','-v'])的参数说明:

''test_sample.py::TestDemo::test_demo1'':表示运行test_sample.py中的TestDemo类里面名为test_demo1的测试方式

-v:表示打印详细运行日志信息

运行结果:

 

2. plugins:在初始化过程中可自动注册的插件对象列表

示例代码sample2:

1

2

3

4

5

6

7

8

9

10

11

12

13

import pytest

import sys

class TestDemo:

    def test_demo1(self):

        print("test_demo1")

    def test_demo2(self):

        print("test_demo2")

class MyPlugin:

    def pytest_sessionfinish(self):

        print("*** test run reporting finishing")

if __name__ == '__main__':

    sys.exit(pytest.main(['-v','test_sample.py::TestDemo::test_demo1'], plugins=[MyPlugin()]))

pytest.main(['-v','test_sample.py::TestDemo::test_demo1'], plugins=[MyPlugin()])参数说明:

plugins=[MyPlugin()])):传入自定义的MyPlugin()函数

运行结果:

 

4.3 使用命令行调用

1. 使用python调用
当代码中我们添加入口函数后,可以使用python来调用pytest。
以sample2的代码为例,在终端输入一下命令:

1

python test_sample.py

运行结果:

2. 使用pytest调用

常用参数列表

以下列举了一些常用的pytest的执行参数,其他参数可使用pytest --help查看。

参数说明
pytest 目录路径运行指定目录下可收集到的测试,为空则默认执行当前目录下收集到的测试
pytest 文件名.py执行单独一个pytest模块
pytest 文件名.py::类名运行某个模块中的某个类
pytest 文件名.py::类名::方法名运行某个模块中的某个类的某个方法
pytest -v打印详细运行日志信息
pytest -v -s 文件名.py带控制台输出结果,也输出运行详细日志信息
pytest -x 文件名.py一旦运行到报错,就停止运行
pytest -k "类名 and not 方法名"执行某个关键字的用例
pytest -m [标记名]@pytest.mark.[标记名]将运行这个标记的测试用例
pytest –maxfail=[num]当运行错误到达num时候就停止运行
pytest –colection-only只收集测试用例
pytest –junitxml=./result.xml生成执行结果文件
pytest –setup-show回溯fixture的执行过程

参数演示示例:

demo目录如下

 

1.pytest目录路径:运行指定目录下可收集到的测试

在这里插入图片描述

2.pytest文件名.py:执行单独一个pytest模块

在这里插入图片描述

3.pytest 文件名.py::类名:运行某个模块中的某个类

在这里插入图片描述

4.pytest 文件名.py::类名::方法名:运行某个模块中的某个类的某个方法

在这里插入图片描述

5.pytest -v: 打印详细运行日志信息

在这里插入图片描述

6.pytest -v -s 文件名.py:带控制台输出结果,也输出运行详细日志信息

在这里插入图片描述

7.pytest -x 文件名.py:一旦运行到报错,就停止运行

在这里插入图片描述

8.pytest -k "类名 and not 方法名":执行某个关键字的用例

注意:示例中,测试用例名称中包含“test_c”和“test_d”的都会被执行

在这里插入图片描述

9.pytest -m [标记名]:@pytest.mark.[标记名]将运行这个标记的测试用例

对两个测试方法进行@pytest.mark.[标记]的标记。

 运行结果:

只运行了被标记的两个测试方法。

在这里插入图片描述

10. pytest --maxfail=[num]:当运行错误到达num时候就停止运行

对代码进行修改,模拟两条运行失败测试用例。

运行结果:

在这里插入图片描述

11. pytest --colection-only:只收集测试用例

在这里插入图片描述

12. pytest --junitxml=./result.xml:生成执行结果文件

在这里插入图片描述

执行结束后,对应目录下会生成一个结果文件。

在这里插入图片描述

13.pytest --setup-show:回溯fixture的执行过程

对原有代码进行修改。新增一个fixture修饰的函数,并对test_demo1测试方法进行修改。

 

运行结果:

在这里插入图片描述

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

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【全开源】多平台租房系统源码(Fastadmin+ThinkPHP+Uniapp)

🏠多平台租房系统:一站式租房新体验🔍 🌐一、引言:租房市场的变革 在快节奏的现代生活中,租房已成为许多人解决居住问题的首选。然而,传统的租房方式往往繁琐且效率低下。随着互联网的飞速发展…

1996-2023年各省农林牧渔总产值数据(无缺失)

1996-2023年各省农林牧渔总产值数据(无缺失) 1、 时间:1996-2023年 2、 来源:国家统计局、统计年鉴 3、 指标:农林牧渔总产值 4、 范围:31省 5、 缺失情况:无缺失 6、 指标解释&…

【课程总结】Day7:深度学习概述

前言 本篇文章,我们将通过示例来逐步学习理解导数、求函数最小值、深度学习的本质、以及使用numpy和pytorch实操深度学习训练过程。 线性回归 线性回归内容回顾 在《【课程总结】Day5(下):PCA降维、SVD分解、聚类算法和集成学习》中,我们…

6.Hugging Face Transformers 快速入门

Hugging Face Transformers 库独特价值 丰富的预训练模型:提供广泛的预训练模型,如BERT、GPT、T5等,适用于各种NLP任务。易于使用:设计注重易用性,使得即使没有深厚机器学习背景的开发者也能快速上手。最新研究成果的…

数据结构下的线性回归模型

文章目录 1. 线性回归模型的基本概念与原理2. 数据结构在构建线性回归模型中的应用2.1 数组和矩阵2.2 列表2.3 字典2.4 数据框架 3. 线性回归模型的实现方法4. 示例代码演示总结 线性回归是统计学中最基础也是应用最广泛的预测模型之一,主要用于分析两个或两个以上变…

Unity图集

概述 相信在同学们学习过程中,在UI的的使用时候一定经常听说过图集的概念。 Unity有UI的组件,有同学们好奇,那为什么还要使用图集呢? 这就需要提到一个性能优化的问题了,因为过多的UI图片,会大幅增加Dra…

pip切换至国内镜像超简单方法

新配置的python环境,pip安装包超时 这里给出最简单配置国内镜像的方法 这里将服务器地址切换为国内清华镜像,具体执行的命令如下: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 执行完,看到上面提…

6月11日 C++day6

#include <iostream>using namespace std; class Animal //讲解员 { public:Animal(){}virtual void perform(){cout << "" << endl;} }; class Lion:public Animal //狮子 { public:Lion(){}void perform(){Animal::perform();cout <<…

SpringCloud微服务架构(eureka、nacos、ribbon、feign、gateway等组件的详细介绍和使用)

一、微服务演变 1、单体架构&#xff08;Monolithic Architecture&#xff09; 是一种传统的软件架构模式&#xff0c;应用程序的所有功能和组件都集中在一个单一的应用中。 在单体架构中&#xff0c;应用程序通常由一个大型的、单一的代码库组成&#xff0c;其中包含了所有…

【ARM Cache 与 MMU 系列文章 7.5 -- ARMv8/v9 MMU FEAT_XS(XS Attribute)与 FEAT_MTE2 介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 MMU FEAT_XSXS AttributeXS Attribute 兼容性和影响XS Attribute 应用场景MMU FEAT_MTE2MTE2 主要目的和用途MTE2 工作原理MTE2 特性实现MTE2 注意事项MMU FEAT_XS 在ARMv8架构中,FE…

【投稿优惠|权威主办】2024年物联网、土木建筑与城市工程国际学术会议(ICITCEUE 2024)

2024年物联网、土木建筑与城市工程国际学术会议&#xff08;ICITCEUE 2024&#xff09; 2024 International Academic Conference on the Internet of Things, Civil Engineering and Urban Engineering&#xff08;ICITCEUE 2024&#xff09; ▶会议简介 2024年物联网、土木建…

苹果WWDC 2024:十三大亮点公布,一切都有关AI|TodayAI

在刚刚结束的苹果全球开发者大会(WWDC 2024)上,苹果公司展示了一系列令人瞩目的新功能,特别是在人工智能(AI)领域的重大进展。以下是本次大会的十三大亮点。 1. 苹果推出首个AI系统 苹果宣布推出其首个AI系统——Apple Intelligence,这一系统将强大的生成模型直接集成到…

苹果WWDC开幕发布AI大模型,股价却跌近2%

KlipC报道&#xff1a;北京时间6月11日凌晨&#xff0c;苹果一年一度的“全球开发者大会”&#xff08;WWDC&#xff09;开幕。会上&#xff0c;先后介绍了iOS 18、iPadOS 18、watchOS 11等系统的更新&#xff0c;同时还展示了多个AI功能。宣布与OpenAI构建合作伙伴关系。然而&…

Charles复制出的CURL无法转换为curl bash

如图所示&#xff0c;复制CURL Request 当复制出来的Charles CURL数据不能成功转换为burl bash时&#xff0c;如下所示 这时候查看复制出来的数据&#xff1a; curl -H Host: xxx.com -H Accept: application/json -H User-Agent: kwai-ios -H Accept-Language: zh-Hans-CN;…

健康节能台灯的设计电子实践

1.1 功能描述 根据主要功能要求&#xff0c;该设计利用 51 单片机实现了电子时钟、温度的显示以 及整点报时等功能。具体可分为一下几种&#xff1a; 1) 显示当前的日期及时间&#xff0c;24 时制的时、分、秒&#xff1b; 2) 可调节时间&#xff1b; 3) 整点报时并响铃。 4) 能…

深度学习模型调试的9个方法

第一个计算机漏洞实际上是一个 bug。1947 年&#xff0c;一只飞蛾飞进哈佛大学的一台计算机&#xff0c;导致计算中断。当工程师打开计算机机箱时&#xff0c;他们很快就发现了导致问题的 bug。如今&#xff0c;bug 不太可能爬进我们的计算机并破坏计算流程。但是&#xff0c;原…

“解锁用户留存与复购:链动2+1模式的创新应用与策略“

大家好&#xff0c;我是吴军&#xff0c;担任一家知名软件开发公司的产品经理。 今天&#xff0c;我想和大家分享的是关于如何通过链动21模式来提升用户留存和复购率的策略。 尽管链动模式已经存在一段时间&#xff0c;但许多人认为它已经过时了。实际上&#xff0c;链动模式具…

四款视频转文字工具推荐,一键提取视频文字

在这个信息爆炸的时代&#xff0c;我们每天都在接触海量的视频内容。无论是在线课程、会议记录还是社交媒体上的短视频&#xff0c;视频已成为我们获取信息的重要渠道之一。然而&#xff0c;当需要回顾或整理视频内容时&#xff0c;手动记录往往耗时耗力。这时&#xff0c;一款…

K8s 卷快照类

卷快照类 卷快照类 这个警告信息通常出现在使用 kubectl 删除 Kubernetes 集群资源时&#xff0c;如果尝试删除的是集群作用域&#xff08;cluster-scoped&#xff09;的资源&#xff0c;但指定了命名空间&#xff08;namespace&#xff09;&#xff0c;就会出现这个警告。 集…

小白学RAG:大模型 RAG 技术实践总结

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…