python执行测试用例_java随机函数random使用方法

python执行测试用例_java随机函数random使用方法前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。pytest默认运行用例的顺序是按模块和用例命名的ASCII编码

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

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

前言

通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。
pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码顺序执行的,这就意味着每次运行用例的顺序都是一样的。
app 测试里面有个 monkey 测试,随机在页面点点点,不按常理的点点点能找到更多的不稳定性 bug。那么我们在写pytest用例的时候,既然每个用例都是相互独立的,
那就可以打乱用例的顺序随机执行,用到 pytest 的插件 pytest-random-order 可以实现此目的,github 地址https://github.com/jbasko/pytest-random-order
 

说明

pytest-random-order是一个pytest插件,用于随机化测试顺序。这对于检测通过的恰好是有用的,因为它恰好在不相关的测试之后运行,从而使系统处于良好状态。

该插件使用户可以控制要引入的随机性级别,并禁止对测试子集进行重新排序。通过传递先前测试运行中报告的种子值,可以按特定顺序重新运行测试。
python执行测试用例_java随机函数random使用方法

快速开始

 

安装

pip3 install pytest-random-order

 

注意

从v1.0.0开始,默认情况下,此插件不再将测试随机化。要启用随机化,您必须以下列方式之一运行pytest:

pytest --random-order
pytest --random-order-bucket=<bucket_type>
pytest --random-order-seed=<seed>

 

配置方式

如果要始终随机化测试顺序,请配置pytest。有很多方法可以做到这一点,我最喜欢的一种方法是addopts = --random-order在pytest选项(通常是[pytest]或[tool:pytest]部分)下添加特定

# pytest.ini文件内容
[pytest]
addopts = --random-order

 

案例演示

# test_random.py
def test_1():
    print("用例1")


def test_2():
    print("用例2")


def test_3():
    print("用例3")

# test_random2.py
def test_4():
    print("用例4")


def test_5():
    print("用例5")


def test_6():
    print("用例6")

 

执行命令

pytest -s --random-order

 

执行结果

Using --random-order-bucket=module
Using --random-order-seed=63275
collecting ... 
 case/random_case/test_random2.py::test_5 ✓                                                                                                                                                               17% █▋        
 case/random_case/test_random2.py::test_6 ✓                                                                                                                                                               33% ███▍      
 case/random_case/test_random2.py::test_4 ✓                                                                                                                                                               50% █████     
 case/random_case/test_random.py::test_3 ✓                                                                                                                                                                67% ██████▋   
 case/random_case/test_random.py::test_1 ✓                                                                                                                                                                83% ████████▍ 
 case/random_case/test_random.py::test_2 ✓                                                                                                                                                               100% ██████████
Results (0.04s):

从运行的结果可以看出,默认使用–random-order-bucket=module,模块下的用例会被打乱随机执行,每次运行会重新生成–random-order-seed=63275,seed值不一样,用例的顺序也会不一样
 

更改重新排序与范围

要更改重新排序与范围,运行pytest –random-order-bucket=选项,其中可以是global,package,module,class,parent,grandparent:

插件组在存储桶中进行测试,在存储桶中进行混洗,然后对存储桶进行混洗,设计原理如图
python执行测试用例_java随机函数random使用方法
给定上面的测试套件,以下是一些可能生成的测试顺序中的两个:
python执行测试用例_java随机函数random使用方法
可以从以下几种类型的存储桶中进行选择:

class 测试将在一个类中进行混洗,而各类将被混洗,但是来自一个类的测试将永远不会在其他类或模块之间运行来自其他类的测试。

  • module 模块级别。如果仅使用–random-order运行pytest,同时带上参数–random-order-seed=。
  • package 程序包级别。请注意,属于package的模块(以及这些模块内的测试)x.y.z不属于package x.y,因此在对存储package桶类型进行随机分配时,它们将落入不同的存储桶中。
  • parent 如果使用的是不属于任何模块的自定义测试项,则可以使用此项将测试项的重新排序限制在它们所属的父级中。对于正常测试函数,父级是声明它们的模块。
  • grandparent 类似于上面的parent,但是使用测试项的父级作为bucket key。
  • global 所有测试属于同一存储桶,完全随机,测试可能需要更长的时间才能运行。
  • none (已弃用) 禁用混洗。自1.0.4起不推荐使用,因为此插件默认不再重做测试,因此没有禁用的功能。
    如果你有测试三个桶A,B和C三个测试1和2,并3在他们每个人,那么许多潜在的排序的一个非全局随机化可以产生可能是:
c2,c1,c3,a3,a1,a2,b3,b2,b1

运行示例,带上参数–random-order-bucket=global,所有的用例都会被打乱。

Using --random-order-bucket=global
Using --random-order-seed=784641
collecting ... 
 case/random_case/test_random2.py::test_5 ✓                                                                                                                                                               17% █▋        
 case/random_case/test_random.py::test_3 ✓                                                                                                                                                                33% ███▍      
 case/random_case/test_random2.py::test_6 ✓                                                                                                                                                               50% █████     
 case/random_case/test_random2.py::test_4 ✓                                                                                                                                                               67% ██████▋   
 case/random_case/test_random.py::test_2 ✓                                                                                                                                                                83% ████████▍ 
 case/random_case/test_random.py::test_1 ✓                                                                                                                                                               100% ██████████

Results (0.04s):
       6 passed

 

模块或类中禁用随机

如果我们在一个模块或类中,不想让里面的用例随机,可以设置 disabled=True 来禁用随机参数
 

模块中禁用随机

# 写在.py文件最上面即可
import pytest
pytestmark = pytest.mark.random_order(disabled=True)


def test_1():
    print("用例1")


def test_2():
    print("用例2")


def test_3():
    print("用例3")

 

类中禁用随机

import pytest


class TestRandom():
    pytestmark = pytest.mark.random_order(disabled=True)

    def test_1(self):
        print("用例1")

    def test_2(self):
        print("用例2")

    def test_3(self):
        print("用例3")

这样在执行的时候,TestRandom里面的用例顺序就是test_1,test_2,test_3不会被打乱
 

重现测试结果:–random-order-seed 随机种子

如果由于重新排序测试而发现测试失败,则可能希望能够以相同的失败顺序重新运行测试。为了允许重现测试订单,该插件报告其与伪随机数生成器一起使用的种子值:

============================= test session starts ==============================
..
Using --random-order-bucket=module
Using --random-order-seed=36775
...

现在,您可以使用该–random-order-seed=…位作为下一次运行的参数以产生相同的顺序:

pytest -v --random-order-seed = 36775

 

禁用插件

如果你觉得这个插件不好用,或者对你的其它功能会有影响,则可以将其禁用

pytest -p no:random_order

 

注意

默认情况下禁用随机化。通过传递,-p no:random_order您将阻止插件的注册,因此其钩子将不会被注册,并且命令行选项也不会

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • ffmpeg hevc_ffmpeg视频解码

    ffmpeg hevc_ffmpeg视频解码本次目标:1)将容器中的音频码流和视频码流分离出来。2)针对mp4文件中的码流情况进行修复。解封装的基本过程:#include<stdio.h>#include”libavcodec/avcodec.h”#include”libavformat/avformat.h”//MPEG-TS文件解封装得到的码流可播放,MP4解封装得到的码流不可播放;//这与容器的封装方式有关。voiddemuxer(constchar*url){//初始化格式上下文

    2022年10月16日
    3
  • checkbox(复选框)和radio(单选按钮)的区别与详解

    checkbox(复选框)和radio(单选按钮)的区别与详解选中和取消选中一个复选框后,再次点击它,即可取消选中选中一个单选按钮后,再次点击它,不能取消选中&amp;amp;amp;amp;amp;amp;lt;!DOCTYPEhtml&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;lt;htmllang=&amp;amp;amp;amp;amp;quot;en&amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp

    2022年5月7日
    157
  • 文献精读(第二十七篇)——基于残差密集网络的图像超分辨率(RDN)「建议收藏」

    文献精读(第二十七篇)——基于残差密集网络的图像超分辨率(RDN)「建议收藏」一、文献梳理1、研究背景传统网络特点:增加了网络深度,使用残差,梯度裁剪等方法降低训练难度;使用memoryblock记忆块建立MeMNet,希望能够保存底层,浅层的特征。传统网络问题:不能充分使用每层的图片信息,大部分方法没有使用层次特征2、实验1)数据集设置训练数据集:DIV2K 训练数据增强:随机水平或垂直翻转90度 测试数据集:Set5、Set14、BSD100自然场景图像、Urban100城市场景图像2)训练集预处理BI方式:双线性插值、缩小比率2,8,16

    2022年6月20日
    26
  • js之校验邮箱_如何验证邮箱

    js之校验邮箱_如何验证邮箱JavaScript使用正则表达式校验邮箱有效性,方法如下:functionvalidateMail(mail){//校验邮箱if(mail!=""){varstrRegex=/^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;if(!strRegex.test(mail)){jAlert("&lt;divid=’popup_me…

    2022年9月23日
    5
  • pytest的assert_Python断言

    pytest的assert_Python断言前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

    2022年7月31日
    8
  • python3.0菜鸟教程100例_python入门到精通教程完整版

    python3.0菜鸟教程100例_python入门到精通教程完整版Python3100例原题地址:http://www.runoob.com/python/python-100-examples.htmlgit地址:https://github.com/RichardFu123/Python100Cases原例为Python2.7版本重写过程中有不少是随意发挥的重写运行版本:Python3.7总…

    2026年1月29日
    5

发表回复

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

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