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/165021.html原文链接:https://javaforall.net

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


相关推荐

  • python中class的定义及使用_python中class的定义及使用

    python中class的定义及使用_python中class的定义及使用因为一直不太清楚面向对象的类和方法的编程思想,所以特地补了一下python-class的知识,在这里记录和分享一下。文章目录类和方法的概念和实例1.python类:`class`2.类的构造方法`__init__()`3.类中方法的参数`self`4.继承5.方法重写类的特殊属性与方法类的私有属性类的私有方法类和方法的概念和实例类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类的构造方法__init.

    2022年5月3日
    62
  • JS中取余与取整

    取余6%2取整抛弃整数parseInt(7/3)向上取整(天花板嘛,代表上)Math.ceil(7/3)向下取整(地板嘛,代表下)Math.floor(7/3)四舍五入Math.round(7/3)

    2022年4月9日
    80
  • 记念刘和珍君是什么文体_纪念原版

    记念刘和珍君是什么文体_纪念原版转载自Tony2009年12月15日19:48阅读(6)评论(0)分类:休闲搞笑权限:公开刚和蘑菇头在安中楼楼下聊天,忽闻VeryCD被封的消息,网上骂声一片,满腔愤慨无处发泄,遂成此文。鲁迅先生先知,如今中国的种种奇景,先生几十年前便已洞悉一切。———————————————…

    2022年8月10日
    11
  • 太极阳支持的Android版本,三星 Android 7.0 无法使用太极阳

    太极阳支持的Android版本,三星 Android 7.0 无法使用太极阳什么问题太极阴无法变成太极阳详细情况按照官网操作刷入magisk(+manager)magisk菜单download中搜索taichi,下载taichi4.9.1模块安装,然后重启手机从浏览器搜索稳定版网址链接,然后下载太极5.1.114.下载完成直接安装后,显示还是太极阴重启系统后,进入太极应用依然显示太极阴进入magisk菜单modules,发现Taichiv4.9.1模块已经被…

    2022年6月4日
    44
  • mysql 5.5 驱动jar包_MySQL驱动jar包下载「建议收藏」

    mysql 5.5 驱动jar包_MySQL驱动jar包下载「建议收藏」MySQLJDBC驱动是Java连接MySQL数据库时要用到的驱动包,MySQL驱动就是赋值外界与数据的连接接口,对于专业的Java开发人员一定会使用到的MySQL驱动Jar包的,有需要的赶快来试试吧!【功能特点】易于开发的特点,包括通过自动注册服务提供商机制,标准化的连接有效性检查和分类的SQLExceptions的基础上可恢复/重试能力和一流的底层错误。DriverManager隔离解开包…

    2022年5月11日
    46
  • 投影矩阵与最小二乘法_最小二乘法和矩阵求逆

    投影矩阵与最小二乘法_最小二乘法和矩阵求逆投影矩阵与最小二乘二者有什么必然的联系么,当我开始写这篇文章的时候我也这样问自己。如果Strang教授没有教授这堂课亦或者讲的这堂课没有被放到网上被别人所下载观看,那么…好在一切都是那么的幸运先说说投影吧,这个想必大家都知道,高中的知识了。一个向量(b)在另一个向量(a)上的投影:实际上就是寻找在a上离b最近的点。如果我们把p看作是a的估计值,那么我们定义e

    2022年10月4日
    2

发表回复

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

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