Pytest用例自定义 - 重复、并行、串行

简介:面对快速迭代和持续交付的需求,提高测试效率变得至关重要。并行测试因其显著的时间节省优势而备受青睐。然而,并非所有测试都适合并行执行。在某些情况下,串行执行是必要的,以确保测试的正确性和稳定性。本文将探讨在自动化测试中部分串行、部分并行执行的必要性和实践方法,帮助测试开发者在提高测试效率的同时,确保测试结果的可靠性和准确性。

历史攻略:

pytest运行结果解析及其改造

pytest+allure安装和使用

pytest:并行和并发运行用例

python:消息推送 - 企业微信机器人推送

让你的pytest日志更有序:配置和使用技巧

Python配置与测试利器:Hydra + pytest的完美结合

Playwright - 04:pytest并行、并发、运行浏览器兼容性测试

安装:

yaml 复制代码
pip install pytest-xdist
pip install pytest-repeat

使用案例:main.py

yaml 复制代码
# -*- coding: utf-8 -*-
# time: 2024/03/24 10:30
# file: main.py
# 公众号: 玩转测试开发
import os
import pytest

if __name__ == "__main__":
    # step-1:use pytest run test_case
    pytest.main(["-s", "test_case", '-n', 'auto', "--alluredir", "./report"])

    # step-2:auto report json data,zip to allure-html
    os.system("allure serve report")

test_case/test_demo.py

yaml 复制代码
# -*- coding: utf-8 -*-
# time: 2024/3/22 0:34
# file: test_demo.py
# 公众号: 玩转测试开发
import time
import unittest


class TestDemo(unittest.TestCase):
    def test_01(self):
        time.sleep(5)
        print('测试用例1执行')

    def test_02(self):
        time.sleep(5)
        print('测试用例2执行')

    def test_03(self):
        time.sleep(5)
        print('测试用例3执行')

test_case/test_parallel.py

yaml 复制代码
# -*- coding: utf-8 -*-
# time: 2024/3/24 12:16
# file: test_parallel.py
# 公众号: 玩转测试开发
import time
import pytest


class TestParallel:
    @pytest.mark.repeat(2)
    def test_parallel_1(self):
        time.sleep(5)
        print("Parallel Test 1")

    @pytest.mark.repeat(3)
    def test_parallel_2(self):
        time.sleep(5)
        print("Parallel Test 2")

    @pytest.mark.repeat(1)
    def test_parallel_3(self):
        time.sleep(5)
        print("Parallel Test 3")

    @pytest.mark.repeat(3)
    def test_parallel_4(self):
        time.sleep(5)
        print("Parallel Test 4")

test_case/test_serial.py

yaml 复制代码
# -*- coding: utf-8 -*-
# time: 2024/3/24 12:16
# file: test_serial.py
# 公众号: 玩转测试开发
import time
import pytest


@pytest.mark.serial
class TestSerial:
    def test_serial_1(self):
        time.sleep(5)
        print("Serial Test 1")

    def test_serial_2(self):
        time.sleep(5)
        print("Serial Test 2")

配置文件:pytest.ini

yaml 复制代码
# pytest.ini
[pytest]
markers =
    serial: mark test to run serially

运行结果:

注意事项:

1、同一文件中混合串行和并行测试,并且需要更精细的控制,可能需要编写更复杂的自定义逻辑或查找是否有现成的插件能满足这种特定的需求。

2、不关心执行顺序,简单地将 -n 参数设置为 auto,让 pytest-xdist 插件自动管理并行执行,通常是最简单也是最有效的方法。

结论:适当拆分错开并行和串行的测试类,通过pytest-xdist auto参数,可以便捷有效的大幅度提升运行测试用例的效率。

相关推荐
小丑西瓜6662 小时前
CMake基础用法,cmake_minimum_required,project,add_executable
linux·服务器·c++·camke
晚风吹长发2 小时前
初步了解Linux中的命名管道及简单应用和简单日志
linux·运维·服务器·开发语言·数据结构·c++·算法
全栈测试笔记2 小时前
异步函数与异步生成器
linux·服务器·前端·数据库·python
Lee_SmallNorth2 小时前
变态需求之【角色不同访问数据库的用户不同】
java·开发语言·数据库
李慕婉学姐2 小时前
Springboot连锁火锅管理及预测系统sh5s1gn1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
dishugj3 小时前
【oracle】19c集群巡检问题
数据库·oracle
知识分享小能手3 小时前
Oracle 19c入门学习教程,从入门到精通,Oracle 其他数据对象 —— 语法详解与综合实践(11)
数据库·学习·oracle
木风小助理3 小时前
JavaStreamAPI的性能审视,优雅语法背后的隐形成本与优化实践
java·前端·数据库
爱丶狸3 小时前
Linux三剑客之sed
linux·运维·服务器
Knight_AL3 小时前
MySQL InnoDB 锁机制深度解析:行锁、表锁、间隙锁、临键锁(Next-Key Lock)
数据库·mysql