pytest介绍

devopsec 等级 738 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具有很多第三方插
Java Web:session
### 会话: HttpSession session = request.getSession(); //判断是否为新会话 session.isNew(); //获取一个已经存在的会话 HttpSession session = request.getSession(false); if(session =
Java web.xml session
在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的。Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时间)没有与服务器交互,服务器将此Session销毁,客户端再一次与服务器交互时之前的Session就不存在了。 设置Session超时时间方式: 方式一:在
005 python接口 session
![](https://oscimg.oschina.net/oscnet/68f4adce5843bed6c8614e63961e5283ddf.jpg) /* 时间:2018/09/22 功能:session 目录:   一: session 1 概念 2
PO设计模式
开发环境:python 3.6.5 + selenium 2.48.0 + pytest框架 + Android 5.1 工具:pycharm + Appium + Genymotion 测试机型:Samsung Galaxy S6 `#需求:设计3个测试用例 #1.实现点击设置->显示->放大镜(查找)->输入内容->点击返回按钮 #2.实现点击设置
unittest执行测试用例有哪几种方式?我整理好几种呢
前言 --  在我们实际工作当中,我们经常会用到unittest框架来执行用例,进行冒烟测试。如果你不懂冒烟测试,传送门链接:[unittest和pytest冒烟测试哪家强?](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fblog.csdn.net%2Flaozhu_Python%2F
JSP内置对象之session
       在实际开发中session主要用以完成用户的登陆以及注销等常见功能,每一个session都表示不同的访问用户,session对象是javax.servlet.http.HttpSession接口的实例化对象,所以session只能应用于HTTP协议中。        **取得Session Id:**当一个用户连接到一个服务器后,服务器会自动
Linux文件、目录属性
文件、目录属性 ------- > 可能有人觉得,文件这东西这么普通有什么好讲的,,,其实不然,在linux中_**一切皆文件**_,搞清楚文件的本质,将对我们大有裨益。 ### 文件、目录属性简介 举个例子 randolf@localhost:~/pytest/pythondemo $ ls -lih 总用量 16K 1
PyTest运行指定的测试集
![](https://oscimg.oschina.net/oscnet/72a231a3e4272a4b4baa1e647967bc03511.jpg) > 帮忙多点点文章末右下角的“好看”支持下,也可以将本文分享到朋友圈或你身边的朋友,谢谢 在PyTest中,提供了几种从命令行运行指定的测试集方式。 **方式一,文件/模块
Python+appium+pytest自动化教程(八)
从这篇文章我们将正式的进入正题,就是项目整合,在使用pytest+appium之前我们先进行selenium+unitest的使用,如下文: ### pageObject是Selenium自动化测试项目的最佳设计模式之一,通过对界面的元素的封装,减少冗余代码,同时在后期维护中,若元素发生定位只需要页面调整封装元素的代码 #### 重构思路 *
SESSION存储于redis(CI3)
> CI3的Session的重大改变就是默认使用了原生的Session,这符合Session类库本来的意思,似乎更加合理一些。总体来说,虽然设计理念不同,但为了保证向后兼容性,类库的使用方法与CI2.0的差别不是很大。 ###Session 驱动 CI3的Session 类自带了 4 种不同的驱动(或叫做存储引擎)可供使用: * files *
SpringBoot实现分布式session
实现分布式session ------------ > 实现基于redis的分布式session * * * ### 原理 基于HttpRequestWapper,对request获取的Session实现类进行替换,即提供一个从redis获取数据的Session实现类 ### 依赖 引入**spring-boot-starter-data-red
SpringBoot实现分布式session
实现分布式session ------------ > 实现基于redis的分布式session * * * ### 原理 基于HttpRequestWapper,对request获取的Session实现类进行替换,即提供一个从redis获取数据的Session实现类 ### 依赖 引入**spring-boot-starter-data-red
Tomcat基于MSM+Memcached实现Session共享
**前言** 在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享。 **相关介绍** **MSM** MSM–Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存
threadlocal
private static final ThreadLocal threadSession = new ThreadLocal(); public static Session getSession() throws InfrastructureException { Session s =