pytest 执行用例_测试用例执行结果有哪些

pytest 执行用例_测试用例执行结果有哪些前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

  • 平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完
  • 当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间缩短一半,如果有10个小伙伴,那么执行时间就会变成十分之一,大大节省了测试时间
  • 为了节省项目测试时间,10个测试同时并行测试,这就是一种分布式场景
  • 同样道理,当我们自动化测试用例排常多的时候, 一条条按顺序执行会非常慢(虽然接口很快),pytest-xdist的出现就是为了让自动化测试用例可以分布式执行,从而节省自动化测试时间
  • pytest-xdist是属于进程级别的并发
     

安装

pip3 install pytest-xdist

 

pytest-xdist插件扩展了一些独特的测试执行模式pytest:

  • 测试运行并行化:如果有多个CPU或主机,则可以将它们用于组合测试运行。会加快运行速度

  • –looponfail:在子进程中重复运行测试。每次运行之后,pytest会等待,直到项目中的文件发生更改,然后重新运行以前失败的测试。重复此过程直到所有测试通过,之后再次执行完整运行。

  • 多平台覆盖:您可以指定不同的Python解释器或不同的平台,并在所有平台上并行运行测试。

在远程运行测试之前,pytest有效地将您的程序源代码“rsyncs”到远程位置。报告所有测试结果并显示给您的本地终端。您可以指定不同的Python版本和解释器。
 

并行测试

多cpu并行执行用例,直接加个-n参数即可,后面num参数就是并行数量,比如num设置为3

pytest -n 3

运行以下代码,项目结构如下

web_xdist是项目工程名称
│  conftest.py
│  __init__.py
│              
├─baidu
│  │  conftest.py
│  │  test_1_baidu.py
│  │  test_2.py
│  │  __init__.py 
│          
├─blog
│  │  conftest.py
│  │  test_2_blog.py
│  │  __init__.py 

具体代码

# web_conf_py/conftest.py
import pytest

@pytest.fixture(scope="session")
def start():
    print("\n打开首页")
    return "jkc"

# web_xdist/baidu/conftest.py
import pytest

@pytest.fixture(scope="session")
def open_baidu():
    print("打开百度页面_session")

# web_xdist/baidu/test_1_baidu.py
import pytest
import time

def test_01(start, open_baidu):
    print("测试用例test_01")
    time.sleep(1)
    assert start == "jkc"

def test_02(start, open_baidu):
    print("测试用例test_02")
    time.sleep(1)
    assert start == "jkc"

if __name__ == "__main__":
    pytest.main(["-s", "test_1_baidu.py"])


# web_xdist/baidu/test_2.py
import pytest
import time

def test_06(start, open_baidu):
    print("测试用例test_01")
    time.sleep(1)
    assert start == "jkc"
def test_07(start, open_baidu):
    print("测试用例test_02")
    time.sleep(1)
    assert start == "jkc"

if __name__ == "__main__":
    pytest.main(["-s", "test_2.py"])


# web_xdist/blog/conftest.py
import pytest

@pytest.fixture(scope="function")
def open_blog():
    print("打开blog页面_function")

# web_xdist/blog/test_2_blog.py

import pytest
import time
def test_03(start, open_blog):
    print("测试用例test_03")
    time.sleep(1)
    assert start == "jkc"

def test_04(start, open_blog):
    print("测试用例test_04")
    time.sleep(1)
    assert start == "jkc"

def test_05(start, open_blog):
    '''跨模块调用baidu模块下的conftest'''
    print("测试用例test_05,跨模块调用baidu")
    time.sleep(1)
    assert start == "jkc"

if __name__ == "__main__":
    pytest.main(["-s", "test_2_blog.py"])

 

不使用分布式测试的命令和所需执行时间:7.09s

collecting ... 
 web_xdist/baidu/test_1_baidu.py ✓✓                                                                                                                                                                       29% ██▉       
 web_xdist/baidu/test_2.py ✓✓                                                                                                                                                                             57% █████▊    
 web_xdist/blog/test_2_blog.py ✓✓✓                                                                                                                                                                       100% ██████████

Results (7.09s):
       7 passed

 

使用分布式测试的命令和所需执行时间:2.77s

pytest -n auto

测试结果

gw0 [7] / gw1 [7] / gw2 [7] / gw3 [7] / gw4 [7] / gw5 [7] / gw6 [7] / gw7 [7] / gw8 [7] / gw9 [7] / gw10 [7] / gw11 [7]

 web_xdist/baidu/test_2.py ✓✓                                                                                                                                                                            100% ██████████
 web_xdist/baidu/test_1_baidu.py ✓✓                                                                                                                                                                       71% ███████▎  
 web_xdist/blog/test_2_blog.py ✓✓✓                                                                                                                                                                        86% ████████▋ 

Results (2.77s):
       7 passed

 

知识点

  • 可以看到,最终运行时间只需要2.77s,我的电脑是真6核,假12核
  • -n auto:可以自动检测到系统的CPU核数;从测试结果来看,检测到的是逻辑处理器的数量,即假12核
  • 使用auto等于利用了所有CPU来跑用例,此时CPU占用率会特别高
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166345.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UDP协议解析

    UDP协议解析????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????????‍????UDP协议简介UDP是UserDatagramProtocol的简称,中文名是用户数据报协议,是OSI(OpenSystemInt

    2022年6月7日
    42
  • maven中net.sf.json报错

    maven中net.sf.json报错今天需要JSONObject,因此需要引入net.sf.json.包,于是去Maven上面找<!– https://mvnrepository.com/artifact/net.sf.json-lib/json-lib –><dependency> <groupId>net.sf.json-lib</groupId> &l…

    2022年6月13日
    45
  • 4g通信系统的网络结构_4g通信

    4g通信系统的网络结构_4g通信1、4G通信网络的关键技术研究4G通信网络,就必须加强对其关键技术的研究,这是决定4G网络通信与3G网络通信不同的关键因素,其主要包括正交频分复用技术、软件无线电技术、智能天线技术、多输入多输出技术、IP核心网技术和多用户检测技术等。1.1正交频分复用技术所谓的正交频分复用技术,简称OFDM技术,是4G通信网络的核心技术,主要是将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。OFDM技术不同于一般性的网络技术,它可以通过相关技术将信号分开,有

    2022年9月15日
    0
  • NPS监控体系详解

    NPS监控体系详解1.NPS监控原理及意义原理:通过定期调研市场用户的净推荐值,牵引质量在具体领域的改进;优势:践行绝对的用户导向将品牌影响力、产品销量、市场份额与历史数据表现联系起来2.NPS数据回收以手机产品为例,从用户使用产品之日起的整个使用体验周期分三次发送调研问卷:首月,6月,18月;3.NPS监控指标体系NPS:产品NPSNPS1,NPS2,NPS3:按生命周期阶段分NPS1,NPS2,NPS3δNPS:阶段差值为δNPS=NPSM-NPS1领域NPSM关注度好评率差评率**用户

    2022年6月2日
    63
  • java 程序设计题库

    java 程序设计题库答题要求:单选题,每题只有一个正确答案,选择正确给分,不正确不给分。1、下面(A)数据类型可用于main()方法中传递的参数A、StringB、IntegerC、BooleanD、Variant2、以下的选项中能正确表示Java语言中的一个整型常量的是(B)A、12.B、-20C、1,000D、4563、下列的变量定义…

    2022年6月21日
    21
  • Win7与debian6搭建双系统(手动修复启动项)[通俗易懂]

    Win7与debian6搭建双系统(手动修复启动项)[通俗易懂]因为实验需要,要在一台机器上搭建win7和debian6的双系统。下面记录一下系统搭建过程。1.安装Windows764位版。一切按照默认选项进行安装,系统安装在第一个分区。2.进入windows7系统,使用分区工具在磁盘的尾部分出两个FAT32分区(这里为D和E),其中D盘为linux安装分区,E盘将作为swap分区。3.用光盘或者U盘安装debian6.0.5,在选

    2022年10月18日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号