1. 执行标记用例执行次数

首先安装 repeat:

pip install pytest-repeat

@pytest.mark.repeat(n)执行当前用例 n 次 然后再往下执行其他用例

import pytest

class TestCase:

    def test_01(self):
print("\ntest_01") @pytest.mark.repeat(2)
def test_02(self):
print("\ntest_02") def test_03(self):
print("\ntest_03") if __name__ == '__main__':
pytest.main()

  

2. 调整用例的执行顺序

首先安装 ordering:

pip install pytest-ordering

@pytest.mark.last 最后一个执行用例

@pytest.mark.run(order=1) 第一个执行用例

import pytest

class TestCase:

    def test_01(self):
print("\ntest_01") @pytest.mark.last()
def test_02(self):
print("\ntest_02") @pytest.mark.run(order=1)
def test_03(self):
print("\ntest_03") if __name__ == '__main__':
pytest.main()

  

3. 用例之间的依赖关系

  • 这是一个pytest第三方插件,主要解决用例之间的依赖关系。如果依赖的上下文失败后续的用例会被标识为跳过执行,相当于执行了pytest.mark.skip
  • dependency可作用的范围有:sessionpackagemoduleclass
  • 安装 pip install pytest-dependency
    • 首先我们需要在用例开始的位置打上一个装饰器@pytest.mark.dependency(),这是代表这条用例作为主条件,如果这条用例失败,关联它的用例会跳过执行。
    • 在被关联的用例上,也打上带参数的装饰器@pytest.mark.dependency()depends接受的参数是关联的依赖用例名。
    • depends也可以用别名的方式指定用例名

  

# 类实现方式

class TestCase:

    @pytest.mark.dependency()
def test_01(self):
assert 1 ==11 @pytest.mark.dependency(depends=["TestCase::test_01"])
def test_02(self):
assert 2 == 2 if __name__ == '__main__':
pytest.main() # test_01失败 test_02跳过执行

  

  

# 函数实现方式

@pytest.mark.dependency()
def test_01():
assert 1 == 11 @pytest.mark.dependency(depends=["test_01"])
def test_02():
assert 11 == 11 if __name__ == '__main__':
pytest.main()

  

# 通过起别名

@pytest.mark.dependency(name="a")
def test_01():
assert 1 == 11 @pytest.mark.dependency(depends=["a"])
def test_02():
assert 11 == 11 if __name__ == '__main__':
pytest.main()

  

# 定义依赖范围

class TestCase1:
@pytest.mark.dependency()
def test_01(self):
assert True class TestCase2: @pytest.mark.dependency(depends=["TestCase1::test_01"], scope="class")
def test_02(self):
assert 11 == 111 if __name__ == '__main__':
pytest.main()

 

4. 多重校验 pytest-assume

正常情况下一条用例如果有多条断言,一条断言失败了,其他断言就不会执行了,而使用pytest-assume可以继续执行下面的断言

安装:pip install  pytest-assume

import pytest

def test_assume():
print('登录操作')
pytest.assume(1 == 2)
print('搜索操作')
pytest.assume(2 == 2)
print('加购操作')
pytest.assume(3 == 2)

 

5. 分布式测试(pytest-xdist)

功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完
当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间缩短一半,如果有10个小伙伴,那么执行时间就会变成十分之一,大大节省了测试时间
为了节省项目测试时间,10个测试同时并行测试,这就是一种分布式场景 分布式执行用例的原则:
1.用例之间是独立的,没有依赖关系,完全可以独立运行
2.用例执行没有顺序要求,随机顺序都能正常执行
3.每个用例都能重复运行,运行结果不会影响其他用例 插件安装:
pip3 install pytest-xdist -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 使用方法:
pytest -n 2 (2代表2个CPU)
pytest -n auto  n auto:可以自动检测到系统的CPU核数;从测试结果来看,检测到的是逻辑处理器的数量,即假12核
 使用auto等于利用了所有CPU来跑用例,此时CPU占用率会特别高

  

6. 用例失败重跑

pip install pytest-rerunfailures

# 使用方法一: 装饰器
@pytest.mark.flaky(reruns=10, reruns_delay=1) # 重跑50次,每次间隔1s
class TestDou:
def test_case1(self):
# assert 1 == 6
assert 1 == random.randint(1, 5) # 只要在多次RERUN中遇到一次成功,即可停止,并最终结果为PASSED # 使用方法二: 命令行
class TestYin:
def test_case2(self):
assert 1 == 6 if __name__ == '__main__':
pytest.main(['--reruns', '3', '--reruns-delay', '2', ])

  

  

Pytest 插件的更多相关文章

  1. Pytest插件pytest-rerunfailures失败重跑

    Pytest插件pytest-rerunfailures失败重跑 安装 pip install pytest-rerunfailures doc https://github.com/pytest-d ...

  2. Pytest插件pytest-repeat重复执行

    Pytest插件pytest-repeat重复执行 安装 pip install pytest-repeat doc https://pypi.org/project/pytest-repeat/ h ...

  3. Pytest插件pytest-assume多重断言

    Pytest插件pytest-assume多重断言 背景 import pytest def test_assume1(): assert 1 == 2 print('hello') assert 2 ...

  4. Pytest插件pytest-order指定用例顺序

    Pytest插件pytest-order指定用例顺序 安装  pip install pytest-order 注意不是pytest-ordering 说起来这里有个故事 关于pytest-order ...

  5. Pytest插件之pytest-base-url切换测试环境

    Pytest插件之pytest-base-url切换测试环境 安装  pip install pytest-base-url 应用场景 利用参数--base-url或者配置(pytest.ini中ba ...

  6. pytest特色与实用插件

    pytest特色 1.fixture的特点 fixture是pytest特有的功能,其特点如下: 必须用pytest.fixture装饰器装饰:fixture有明确的名字,在其他函数(function ...

  7. 【pytest官方文档】解读- 插件开发之hooks 函数(钩子)

    上一节讲到如何安装和使用第三方插件,用法很简单.接下来解读下如何自己开发pytest插件. 但是,由于一个插件包含一个或多个钩子函数开发而来,所以在具体开发插件之前还需要先学习hooks函数. 一.什 ...

  8. unittest和pytest的区别

    一.用例编写规则 1.unittest提供了test cases.test suites.test fixtures.test runner相关的类,让测试更加明确.方便.可控.使用unittest编 ...

  9. Pytest 简明教程

    pytest-learn 通过文章 Python 单元测试框架之 Pytest 剖解入门(第一篇) 学习 Pytest. 有很多的第三方插件可以自定义扩展,并且支持 Allure,生成可视化的测试报告 ...

  10. Pytest+allure生成测试报告

    1.Allure.zip包的下载地址: https://github.com/allure-framework/allure2 在跳转页面选择一个allure.zip包的版本下载 若以上方法无法下载z ...

随机推荐

  1. 【Android】移除 Android frameworks 层,当 Linux 系统使用。(服务移除篇)

    前言说明 此文章仅作为技术经验记录,核心思想,就是在 init.rc 里面移除服务,致使 frameworks 不被启动,其它不便多说. 此文章内容为系统服务移除篇,最终实现的效果是 Android ...

  2. GDOI 2021 PJ 总结

    Day 0.5 在门口等了好久,终于进去了. Day 1 下午来到考场,发现自己承诺书没有拿,然后就跑到宿舍去拿,回来发现只要身份证. T1一眼是个博弈,发现不太好打,先跳. T2发现最多消耗4320 ...

  3. Adobe GENP2019~2022 for Win 一键激活

    Adobe GENP2019~2022 for Win 一键激活 一.简介 GenP是一个由国外团队开发的Adobe Win全系列软件激活工具,专门在Win系统上激活所有Adobe软件的2019和20 ...

  4. 影片自由,丝滑流畅,Docker容器基于WebDav协议通过Alist挂载(百度网盘/阿里云盘)Python3.10接入

    使用过NAS(Network Attached Storage)的朋友都知道,它可以通过局域网将本地硬盘转换为局域网内的"网盘",简单理解就是搭建自己的"私有云" ...

  5. P32_全局配置 - tabBar

    什么是 tabBar tabBar 是移动端应用常见的页面效果,用于实现多页面的快速切换.小程序中通常将其分为: 底部 tabBar 顶部 tabBar 注意:tabBar中只能配置最少 2 个.最多 ...

  6. SpringCloud Sleuth链路追踪

    1.概要 一般的,一个分布式服务跟踪系统,主要有三部分: 数据收集 数据存储 数据展示 然而这三个部分其实不都是由SpringCloud Sleuth(下面我简称为Sleuth)完成的,Sleuth负 ...

  7. MVC3三层架构

    以上部分来自黑马

  8. dvgis计算两点间距离的问题

    先贴一段代码,是dvgis里的distance.js源码,dvgis是cesium的二次封装,可以参考参考: 1import{Cesium}from'@dc-modules/namespace' 2i ...

  9. input type = file 在部分安卓手机上无法调起相册

    移动端H5web 用input type = file 在部分安卓手机上无法调起摄像头拍照,有的也无法访问相册而是直接访问了文档,解决办法是: 加上 accept = "image/*&qu ...

  10. JavaWeb中的Servlet

    Servlet 目录 Servlet 一.互联网中的资源 二.Servlet 2.1.Servlet的作用 2.2.Servlet执行流程 2.3.Servlet生命周期 2.4.Servlet的继承 ...