python执行测试用例_执行测试用例的工作

python执行测试用例_执行测试用例的工作前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。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执行测试用例_执行测试用例的工作

快速开始

 

安装

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执行测试用例_执行测试用例的工作
给定上面的测试套件,以下是一些可能生成的测试顺序中的两个:
python执行测试用例_执行测试用例的工作
可以从以下几种类型的存储桶中进行选择:

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

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


相关推荐

  • 百度面试题

    百度面试题1.一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。这道题的解答请看下一篇日志2.一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对,如abc和

    2022年7月15日
    26
  • CentOs6.5升级内核到3.0+[通俗易懂]

    CentOs6.5升级内核到3.0+[通俗易懂]1、查看内核版本 命令: uname -a 2、导入key 命令: rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 如果报SSL错误, 则需要更新网络安全服务 yum update nss3、安装elrepo的yum源命令:rpm -U…

    2022年6月13日
    30
  • mysql锁机制_类加载机制的作用和过程

    mysql锁机制_类加载机制的作用和过程Mysql锁:在多线程当中如果想保证数据的准确性是如何实现的呢?没错,通过同步实现。同步就相当于是加锁。加了锁以后有什么好处呢?当一个线程真正在操作数据的时候,其他线程只能等待。当一个线程执行完毕后,释放锁。其他线程才能进行操作!那么我们的MySQL数据库中的锁的功能也是类似的,处理事务的隔离性中,可能会出现脏读、不可重复读、幻读的问题,所以,锁的作用也可以解决这些问题!在数据库中,数据是一种供许多用户共享访问的资源,如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,

    2022年9月28日
    3
  • XMLHTTPREQUEST_ASP.NET

    XMLHTTPREQUEST_ASP.NET移除X-AspNet-VersionHTTP头在Web.Config的节点下添加如下内容:<httpRuntimeenableVersionHeader=”false”/>移除X-AspNetMvc-VersionHTTP头X-AspNetMvc-VersionHTTP头会自动被Asp.netMVC框架加入进去,如果你没有使用Asp.net…

    2022年9月29日
    4
  • 低压差降压稳压电路设计

    低压差降压稳压电路设计TPS73xx系列(TPS7301,25,30,33,48,50等)是一款低压差串联型降压稳压芯片,可以提供500mA的稳压电流,在输出100mA电流的情况下,输入输出电压压差可以最多不超过35mV,这可以大大提高稳压电源的效率,或者提供大的电源稳压范围。除了主要提供电源稳压功能之外,芯片内部还集成了电压检测模块,可以输出低电平RESET信号,为供电的微控制器、处理器提供复位功能。TPS7…

    2022年6月20日
    30
  • Ubuntu16.04 完全卸载cuda

    Ubuntu16.04 完全卸载cudasudoapt-get–purgeremovecuda-*

    2022年6月17日
    27

发表回复

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

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