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

目录
  • 1. pytest的介绍
  • 2. pytest的安装
    • 1. 使用以下命令进行安装
    • 2. 检查是否成功安装正确版本
  • 3. pytest识别测试的条件
  • 4. pytest的运行
    • 4.1 Pycharm中调用
    • 4.2 Python代码中调用
    • 4.3 使用命令行调用
      • 常用参数列表
      • 参数演示示例:

1. pytest的介绍

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

简单灵活,容易上手;

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

显示详细的断言失败信息

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

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

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

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

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

2. pytest的安装

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

pip install -U pytest

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

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:

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:

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的代码为例,在终端输入一下命令:

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测试方法进行修改。

运行结果:

文末说明:
以上内容是我在阅读pytest官方文档后,依照个人理解进行整理。内容可能会有理解错误之处,欢迎大家留言指正。谢谢!

以上就是Python自动化测试框架pytest介绍安装与运行的详细内容,更多关于Python自动化测试框架pytest的资料请关注我们其它相关文章!

(0)

相关推荐

  • Pytest 使用简介

    前言 最近在听极客时间的课程,里面的讲师极力推崇 pytest 框架,鄙视 unittest 框架,哈哈!然后查了些资料,发现了一条 python 鄙视链:pytest 鄙视 > unittest 鄙视 >robotframework . pytest 是 python 的第三方单元测试框架,比自带 unittest 更简洁和高效,支持315种以上的插件,同时兼容 unittest 框架.这就使得我们在 unittest 框架迁移到 pytest 框架的时候不需要重写代码.接下来我们在文中来对

  • Python 测试框架unittest和pytest的优劣

    一.Unittest Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架. Unittest支持自动化测试,测试用例的初始化.关闭和测试用例的聚合等功能,它有一个很重要的特性:它是通过类(class)的方式,将测试用例组织在一起. 示例: 运行结果 注:unittest有一个关联模块unittest2,但unittest2仅适用于Pytho

  • 详解如何使用Pytest进行自动化测试

    为什么需要自动化测试 自动化测试有很多优点,但这里有3个主要的点 可重用性:不需要总是编写新的脚本,除非必要,即使是新的操作系统版本也不需要编写脚本. 可靠性:人容易出错,机器不太可能.当运行不能跳过的重复步骤/测试时,速度会更快. 全天运行:您可以在任何时间或远程启动测试.夜间运行正在测试你的软件,即使是在你睡着的时候. 成熟的.功能齐全的Python测试工具--pytest 目前有多种可用的测试框架和工具.这些框架的风格也各不相同,比如数据驱动.关键字驱动.混合.BDD等等.您可以选择最适合

  • pytest基本用法简介

    1.安装pytest,打开dos窗口输入: pip install pytest 2.通过pycharm工具下载 3.创建pytest测试用例步骤 # 定义测试类 class TestDivide: # 定义测试方法 def test_divide_01(self): result = divide(1,1) print(result) 问题:右键运行没有pytest运行的方式的处理步骤 第一步:检查文件名和文件所在目录是否合法,对应第一点 第二步:修改默认运行方式为pytest 第三步:删除历

  • 详解Pytest测试用例的执行方法

    pytest概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试.接口自动化测试(pytest+requests); 4.pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium).pytest-html(完美html

  • 自动化测试Pytest单元测试框架的基本介绍

    目录 一.Pytest概念 二.Pytest特点 三.Pytest安装 安装pytest命令: 查看pytest版本: 安装生成测试结果的HTML报告pytest-html 四.Pycharm配置Pytest pycharm依次选择 配置用例脚本运行模式. 菜单栏 配置项目路径 五.Pytest用例运行规则 六. Pytest简单使用 一.Pytest概念 Pytest 是 Python 的一种单元测试框架,与 Python 自带的 unittest 测试框架类似,但是比 unittest 框架

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

    目录 1. pytest的介绍 2. pytest的安装 1. 使用以下命令进行安装 2. 检查是否成功安装正确版本 3. pytest识别测试的条件 4. pytest的运行 4.1 Pycharm中调用 4.2 Python代码中调用 4.3 使用命令行调用 常用参数列表 参数演示示例: 1. pytest的介绍 pytest是一个非常成熟的全功能的python测试工具,它主要有以下特征: 简单灵活,容易上手: 支持简单的单元测试和复杂的功能测试 显示详细的断言失败信息 能自动识别测试模块和

  • Python3+RIDE+RobotFramework自动化测试框架搭建过程详解

    Python2.7已于2020年1月1日开始停用,之前RF做自动化都是基于Python2的版本. 没办法,跟随时代的脚步,我们也不得不升级以应用新的控件与功能. 升级麻烦,直接全新安装. 一.Python安装 最新版Python下载地址:https://www.python.org/ 根据操作系统选择对应版本制品下载安装即可,本机用的是Windows x86-64 executable installer. 注意事项: 安装完成后检查下环境变量,默认会配置好,可以检查下. 检测是否安装成功,可在

  • Python爬虫框架NewSpaper使用详解

    目录 写在前面 newspaper newspaper框架的使用 例如:单条新闻内容获取 newspaper文章缓存 其他功能 写在后面 写在前面 原计划继续写一篇Portia的使用博客,结果在编写代码途中发现,在windows7的DockerToolbox里面使用Portia错误实在是太多了,建议大家还是在Linux虚拟机或者直接在服务器上去运行.否则太耗费精力了~ 今天我们转移一下,介绍一款newspaper newspaper github地址 : github.com/codelucas

  • python miniWeb框架搭建过程详解

    框架概念 框架和web服务器关系 ·静态资源:不是经常变化的资源.往往是固定不变的资源 ·动态资源:经常变化的资源 ·模板文件:提供了一个显示的模板,显示的内容不同,但是结构是一样的 ·服务器的作用: o1)接受客户端请求 o2)响应客户端请求 o3)调用应用框架获取 miniWeb框架构建基本构建 ·思路: o判断请求的资源路径是 是否是 .py 结尾 o如果 .py 结尾,--> 显示动态内容 o如果.html 结尾,--> 显示静态内容 ·核心代码: 核心代码: # index.py

  • Python ORM框架Peewee用法详解

    之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类.对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如果这个模型层可以独立出来使用就好了,那我们平台操作数据库也可以这么玩了,我不喜欢写SQL语句. 后来才知道,原来这个叫ORM(Object Relational Mapping,对象关系映射),在Python下面有很多这样的类库,如SQLObject.Storm.peewee和SQLAlchemy. 这里就给你们介绍一下Peewee的基本使用,因为它非常的轻

  • java接口自动化测试框架及断言详解

    我们介绍了Get方法的设计过程和测试结果,现在我们需要对前面代码进行重构和修改,本篇需要完成以下目标. 1)重构Get方法 2)如何进行JSON解析 3)使用TestNG方法进行测试断言 1.重构Get方法 在前面文章,说过,之前写的Get方法比较繁琐,不光写了如何进行Get请求,还写了获取http响应状态码和JSON转换.现在我们需要抽取出来,设计Get请求方法,就只干一件事情,那就是如何发送get请求,其他的不要管. 我们知道,请求之后会返回一个HTTP的响应对象,所以,我们把get方法的返

  • Python测试框架pytest高阶用法全面详解

    目录 前言 1.pytest安装 1.1安装 1.2验证安装 1.3pytest文档 1.4 Pytest运行方式 1.5 Pytest Exit Code 含义清单 1.6 如何获取帮助信息 1.7 控制测试用例执行 1.8 多进程运行cases 1.9 重试运行cases 1.10 显示print内容 2.Pytest的setup和teardown函数 函数级别setup()/teardown() 类级别 3.Pytest配置文件 4 Pytest常用插件 4.1 前置条件: 4.2 Pyt

  • Python自动化测试框架之unittest使用详解

    目录 1 unittest框架 2 批量执行脚本 2.1 构建测试套件 2.2 用例的执行顺序 2.3 忽略用例执行 3 unittest断言 4 HTML报告生成 5 异常捕捉与错误截图 6 数据驱动 1 unittest框架 unittest 是python 的单元测试框架,它主要有以下作用: 提供用例组织与执行:当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到成百上千条时,大量的测试用例堆砌在一起,就产生了扩展性与维护性等问题,此时需要考虑用例的规范与组织问题了.单元

  • Python测试框架pytest核心库pluggy详解

    目录 代码案例 实例化: 添加到钩子定义中 (add_hookspecs) 注册插件 register 运行插件 pm.hook.myhook 代码案例 import pluggy # HookspecMarker 和 HookimplMarker 实质上是一个装饰器带参数的装饰器类,作用是给函数增加额外的属性设置 hookspec = pluggy.HookspecMarker("myproject") hookimpl = pluggy.HookimplMarker("m

  • Python基础教程之pytest参数化详解

    目录 前言 源代码分析 装饰测试类 装饰测试函数 单个数据 一组数据 组合数据 标记用例 嵌套字典 增加测试结果可读性 总结 前言 上篇博文介绍过,pytest是目前比较成熟功能齐全的测试框架,使用率肯定也不断攀升.在实际 工作中,许多测试用例都是类似的重复,一个个写最后代码会显得很冗余.这里,我们来了解一下 @pytest.mark.parametrize装饰器,可以很好的解决上述问题. 源代码分析 def parametrize(self,argnames, argvalues, indir

随机推荐