pytest介绍

devopsec 等级 444 0 1

概述

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

  • 简单灵活,容易上手,文档丰富;
  • 支持参数化,可以细粒度地控制要测试的测试用例;
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
  • 测试用例的skip和xfail处理;
  • 可以很好的和CI工具结合,例如jenkins

install package

pip3 install pytest pytest-html pytest-xdist pytest-rerunfailures pytest-ordering pytest-dependency --index-url https://pypi.douban.com/simple Image

验证:pytest --version

pytest框架约束

所有的单测文件名都需要满足test_*.py格式或*_test.py格式。
在单测文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以Test开头,不然pytest是不会去运行该class的)
在单测类中,可以包含一个或多个test_开头的函数。
此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。

pytest运行方式

# file_name: test_case.py
   import pytest # 引入pytest包
   def test_a(): # test开头的测试函数
       print("------->test_a")
       assert 1 == 1 # 断言成功
   def test_b():
       print("------->test_b")
       assert 1 == 2  # 断言失败
   if __name__ == '__main__':
          pytest.main("-s  test_case.py") # 调用pytest的main函数执行测试

如何运行

  1. pytest # run all tests below current dir
  2. pytest test_mod.py # run tests in module file test_mod.py
  3. pytest somepath # run all tests below somepath like ./tests/
  4. pytest -k stringexpr # only run tests with names that match the the "string expression", e.g. "MyClass and not method" will select TestMyClass.test_something but not TestMyClass.test_method_simple
  5. pytest test_mod.py::test_func # only run tests that match the "node ID", e.g "test_mod.py::test_func" will be selected only run test_func in test_mod.py

scope

fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function

  • @pytest.fixture(scope="session", autouse="true")
  • @pytest.fixture(scope="module", autouse="true")
  • @pytest.fixture(scope="class", autouse="true")
  • @pytest.fixture(scope="function", autouse="true")

测试用例执行顺序

  • pytest-ordering 通过装饰器@pytest.mark.run(order=1)来进行控制,数字越小,越前执行
  • 安装pytest-dependency 在对应的方法A上添加@pytest.mark.dependency()对所依赖的方法进行标记设置为被依赖方法,在依赖方法使用@pytest.mark.dependency(depends=["被依赖方法名"])引用依赖 可添加name=参数
  • @pytest.fixture装饰,包括session、module、class、function
  • @pytest.mark.skip() 可以装饰方法与类,用于跳过该用例

三方插件

  • pytest-selenium(集成selenium)
  • pytest-html(完美html测试报告生成)
  • pytest-rerunfailures(失败case重复执行)
  • pytest-xdist(多CPU分发)
  • pytest-ordering(控制用例执行顺序)
  • pytest-dependency(用例直接依赖调用)
收藏
评论区

相关推荐

pytest介绍
概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 简单灵活,容易上手,文档丰富; 支持参数化,可以细粒度地控制要测试的测试用例; 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytestrequests); pytest具有很多第三方插
go语言web开发框架_Iris框架讲解(六):Session的使用和控制
在实际的项目开发中,我们会经常有业务场景使用到Session功能。在iris框架中,也为我们提供了方便使用,功能齐全的Session模块。Session模块的源码目录为kataras/iris/sessions包。 Session与Cookie的区别 在学习web开发过程中,我们总会和session和cookie打交道。本节课我们学习sesion相关的
cookie和session的详解与区别
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 1.1  C
Session原理
\ 开发工具与关键技术:Java,HTTP协议,session原理 撰写时间:20190617 \ 以下这些大多都是文字表达,没有一一写实际的案例出来演示,但是详细的看一下的话,也就知道什么意思了,文中表达比较通俗。 We
iris-session梳理
入口 api : iris.New() api.Adapt(gm.NewSession()) session的构造 go func NewSession() sessions.Sessions { db : redis.New(rs.Config{Network: rs.DefaultRedisNetwork, Ad
Python编程基础(快速入门必看
Python编程基础一、Python语言基本语法 Python是一
基于Python的nessus API简析
前言最近在开发一个基于Nessus的自动化漏扫工具,来和大家分析一下关于Nessus API的使用心得。 Nessus提供了非常完善的API,可以帮助我们实现很多事情,无论是对接其他运维系统,还是用来编写自动化的漏扫工具都十分方便。 Nessus为这些api提供了详细的文档,你可以在SettingsMy AccountAPI KeysAP
PHP Cookie与Session的使用与区别
Cookie与SessionCookie和session是目前使用的两种存储机制。cookie是从一个WEB页到下一个WEB页面的数据传送方法,cookie存储在客户端;Session是让数据在页面中持续有效的一个传递方法,session存储在服务器端。掌握了cookie与session这两个技术,在WEB网站页面间信息传递的安全性是
JWT 认证方案学习
定义JWT (JSON WEB TOKEN) 是一种安全通讯标准,它定义了一种紧凑自包含的方式,用于在各方之间安全的传输 JSON 对象。常见应用场景是API之间的认证通讯。 一般的用户认证流程 1、请求方发送账户密码到服务器,验证账户可用性。 2、验证成功,生成 session,保存在服务端。 3、服务端返回一个 s
Android解析WindowManager(三)Window的添加过程
Android框架层 Android系统服务 WindowManagercategories: Android框架层本文首发于微信公众号「刘望舒」 前言在此前的系列文章中我们学习了WindowManager体系和Window的属性,这一篇我们接着来讲Window的添加过程。建议阅读此篇文章前先阅读本系列的前两篇文章。<!more 1.概述WindowMana
Android解析WindowManagerService(三)Window的删除过程
Android框架层 Android系统服务 WindowManagerService Android框架层本文首发于微信公众号「后厂技术官」 前言在本系列文章中,我提到过:Window的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分,Window的删除过程也不例外,本篇文章会介绍Window的删除过程,包括了两大处理
我终于弄清楚了redis数据结构之string应用场景
英国弗兰明曾说过一句话:“不要等待运气降临,应该去努力掌握知识。” 1 前言大家好,我是阿沐!对于redis大家是最熟悉不过了,作为缓存界的使用率一直遥遥领先。基本上整个互联网无论大小公司使用redis占绝大部分,那么很多人使用它,那就是只是使用它,对于它的使用场景并没有去理会太多(能用就行),这篇文章来讲讲redis的基础数据结构string。Redis有
Java面试真题解析火爆全网,讲的太透彻了
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
盘点Python网页开发轻量级框架Flask知识(上篇)
前言今天来给大家说一个Python的轻量级web开发框架Flask,为什么要推荐它呢?当然是因为它够轻量级了,开发迅速是它的特点,当然它也有缺点,不过这里不说,因为既用它又说它差感觉不好。一、安装flaskpip install flask 需要注意的是,还有flake,那个是检查错误的模块,不要搞混了可以看到成功了,总共下载了四个模块,分别是对应的web开
BAT这种大厂履历意味着什么?面试篇
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步