如果想从头学起pytest,可以去看看这个系列的文章!

https://www.cnblogs.com/miki-peng/category/1960108.html

前言​

​ 目前有两种纯测试的测试框架,就是unittest和pytest。

​ unittest这个已经是老框架了并且广为人知,很多人都是用它来做接口自动化或web自动化。它是python内嵌的测试框架,是标准库,即python自带的,安装python以后可以直接导入。unittest提供了test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控。

​ 而pytest则是python的第三方库,是基于unittest开发的扩展框架,需要独立安装,但要注意兼容性,不是一定要安装最新版,最新版如果会与你的python版本不兼容,可能会存在安装不成功,或者是某些库的功能使用不了。pytest比unittest更简洁更高效

  • 不需要像unittest需要使用TestSuite去收集、加载用例添加到测试套件再运行,它会自动发现用例自动执行
  • 使用assert断言更简洁:assert 表达式
  • 灵活运行指定的测试用例,可以给用例打上各种各样的标签,如:回归、正向、冒烟
  • 可以将某些用例跳过(skip),或者对某些预期失败的case标记成失败
  • fixture夹具灵活管理环境,可以指定哪些类、方法使用与否,功能相当于unittest的setup,teardown
  • 插件非常丰富,如returnfailures用例失败重运行机制,allure更美观的测试报告等
  • 较好的兼容性,支持运行unittest/nose编写的测试用例

安装

​ 安装:pip install -U pytest

​ 查看版本:pytest --version

用例命名规则

发现用例规则

​ pytest是自动发现、收集、执行测试用例的,当你在哪个目录下执行pytest.main()指令,那么pytest就会自动发现当前目录下所有符合规则的py文件,将这些文件当成测试用例文件,根据以下规则去发现用例:

​ 模块名: test_*.py或者是 *_test.py(即以test_开头或_test结尾的py文件)

​ 类名:Test开头,且类里没有__init__函数(否则容易报错)

​ 方法名:test_开头

注意:pytest是以方法为单位发现用例的,因此,测试用例并不一定要以类的形式存在,可以直接以函数方法的形式存在;并且它是根据规则按顺序匹配先:模块 > > 类名 > > 方法名,如果你的方法名符合规则,但方法写在一个不符合规则的类名或者模块名下,那么该方法是不会被发现也不会被执行的。

# test_search.py
def login_test():
print(11111) def test_login():
print(22222) class TestClass:
def test_one(self):
print(33333) def test_two(self):
print(44444) def test3(self):
print(44444)

​ 如上,会查找到3个测试用例,分别为test_logintest_onetest_two

自定义查找规则

​ 我们还可以自定义查找的规则,但自定义的规则配置文件要放在你要运行的项目的根目录下(见上图),且配置文件要严格以pytest.ini命名,pytest.ini文件内容举例如下:

[pytest]	# 只能修改=右边的值
python_files = demo_*.py # 模块名以demo_开头
python_functions = demo_* # 方法名以demo_开头
python_classes = Demo* # 类名名以Demo开头

运行方式

代码形式

if __name__ == '__main__':
pytest.main() # 直接写在py文件中运行,()里可以填写运行的参数,也可以不写

命令行的形式

​ 在pycharm中调出控制台,输入pytest,会自动去搜索当前目录下所有符合规则的测试用例,也可以指定运行某个文件,如:pytest start.py

或者使用windows的cmd命令行,但要先切换到项目的目录下

pycharm运行

​ 右击选择以pytest运行,但一次只能运行单个py文件,除非该文件中有pytest.main()指令,才会去搜索所在目录的所有测试用例。

​ 运行前在模块中右击可以查看运行是否是以pytest形式运行:

​ 若显示是以unittest形式则会以unittest框架去运行,可以在设置中修改运行方式:

执行代码

​ 以下均为命令行中执行的pytest命令

  • 直接执行,在当前目录即子目录搜索用例:pytest
  • 指定某个模块:pytest test_module.py
  • 指定某个目录及子目录下的所有测试文件:pytest testcase
  • 指定某个模块的某个方法,用两个英文冒号分隔:pytest test_module::test_function
  • 指定某个模块的某个类中的某个用例,用两个英文冒号分隔:pytest test_model.py::test_class::test_method

一些执行参数

  • -q:简单打印执行日志,只打印测试用例的执行结果
  • -s:详细打印执行日志
  • -x:遇到错误时停止测试
  • --maxfail=num:当用例错误个数达到指定数量时,停止测试
  • -k:匹配用例名称
    • 执行用例名称包含http的所有用例:pytest -s -k http start.py
    • 排除用例名称包含http的用例:pytest -s -k "not http" start.py
    • 同时匹配不同的用例名称:pytest -s -k "method or weibo" start.py

用例执行顺序

​ unittest用例的执行顺序是按照方法名的ASCII码顺序执行的,而pytest有自己内置的执行顺序规则,一般是从上往下,即同一个py文件中,从上往下执行测试用例。

【pytest系列】- pytest测试框架介绍与运行的更多相关文章

  1. SpringBoot系列之日志框架介绍及其原理简介

    SpringBoot系列之日志框架介绍及其原理简介 1.常用日志框架简介 市面上常用日志框架:JUL.JCL.jboss-logging.logback.log4j.log4j2.slf4j.etc. ...

  2. python pytest测试框架介绍二

    在介绍一中简单介绍了pytest的安装和简单使用,接下来我们就要实际了解pytest了 一.pytest的用例发现规则 pytest可以在不同的函数.包中发现用例,发现的规则如下 文件名以test_开 ...

  3. 『德不孤』Pytest框架 — 1、Pytest测试框架介绍

    目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...

  4. python pytest测试框架介绍一

    一.安装 pytest不是python默认的package,需要自动手工安装. pytest支持python 2.6--3.5之间的版本,同时可以在unix及windows上安装 安装方式: pip ...

  5. 【Tavern】1.tavern测试框架介绍

    目录 1. Tavern 和 Postman 2. 安装Python 3. 安装Tavern 4. 第一个测试用例 1. Tavern 和 Postman Tavern是一个用Python实现的接口自 ...

  6. 测试框架Unitest的运行原理,以及多个测试类中的执行顺序以及简化方法

    单元测试单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一 ...

  7. spring boot应用测试框架介绍

    一.spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit.spring test.assertj.hamcres ...

  8. 【转】Java学习---10个测试框架介绍

    [原文]https://www.toutiao.com/i6594302925458113027/ JAVA 程序员需要用到 10 个测试框架和库 Java 程序员需要用到十大单元测试和自动化集成测试 ...

  9. python pytest测试框架介绍三

    之前介绍了pytest以xUnit形式来写用例,下面来介绍pytest特有的方式来写用例 1.pytest fixture实例1 代码如下 from __future__ import print_f ...

随机推荐

  1. 趣谈 DHCP 协议,有点意思。

    计算机网络我也连载了很多篇了,大家可以在我的公众号「程序员cxuan」 或者我的 github 系统学习. 计算机网络第一篇,聊一聊网络基础 :计算机网络基础知识总结 计算机网络第二篇,聊一聊 TCP ...

  2. 从零学脚手架(三)---webpack属性详解

    如果此篇对您有所帮助,在此求一个star.项目地址: OrcasTeam/my-cli 在上一篇中,介绍了webpack的entry.output.plugins属性. 在这一篇,接着介绍其它配置属性 ...

  3. JVM 中的垃圾回收

    说到JVM,总是绕不开垃圾回收,因为其是JVM的核心之一,因为对象的创建是非常频繁的,想要提高程序的执行效率,拥有一个高效的垃圾回收机制是必不可少的. 首先要明确,因为对象的创建只在堆中,所以垃圾回收 ...

  4. Python之内存泄漏和内存溢出

    预习知识:python之MRO和垃圾回收机制 一.内存泄漏 像Java程序一样,虽然Python本身也有垃圾回收的功能,但是同样也会产生内存泄漏的问题.对于一个用 python 实现的,长期运行的后台 ...

  5. 攻防世界 reverse 进阶 10 Reverse Box

    攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...

  6. Redis扩展数据类型详解

    在Redis中有5种基本数据类型,分别是String, List, Hash, Set, Zset.除此之外,Redis中还有一些实用性很高的扩展数据类型,下面来介绍一下这些扩展数据类型以及它们的使用 ...

  7. Java学习笔记--文件IO

    简介 对于任何程序设计语言,输入和输出(Input\Output)都是系统非常核心的功能,程序运行需要数据,而数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备 ...

  8. 学习笔记-cordova 限制app横屏

    禁止手机app横竖屏幕转换,只需在根目录下的 config.xml 中添加如下内容 <preference name="orientation" value="po ...

  9. CVE-2021-21402 Jellyfin任意文件读取

    CVE-2021-21402 Jellyfin任意文件读取 漏洞简介 jellyfin 是一个自由的软件媒体系统,用于控制和管理媒体和流媒体.它是 emby 和 plex 的替代品,它通过多个应用程序 ...

  10. Latex的使用(Ctex+TeXstudio)

    1.下载 CTEX Latex 本来是只支持英文的,但是实在太好用了,遂结合中国的团队以及有识之士,开发了这个 CTEX , CTEX 有 TexLive( TexLive 为 Latex 安装包的名 ...