pytest.mark

news2024/12/29 0:23:00

目录

一、Pytest简介

二、安装

三、pytest.mark

1.标记

2.参数化

3. skip跳过

4. xfail 该用例置为失败


一、Pytest简介

Pytest是python一个第三方测试框架,有非富的第三方插件可以扩展

特点:

  1. 简单灵活,容易上⼿;⽀持参数化;
  2. 能够⽀持简单的单元测试和复杂的功能测试,还可以⽤来做selenium/appium等⾃动化测试、接口⾃动化测试(pytest+requests);
  3. pytest具有很多第三⽅插件,并且可以⾃定义扩展, ⽐较好⽤的如 pytest-allure(完美html测试报告⽣成) pytest-xdist(并发执行测试用例)
  4. 可以很好的和jenkins集成;

二、安装

pip安装,安装命令

  pip install pytest

查看是否安装成功

  pytest --version

三、pytest.mark

1.标记

作用:

给测试用例或类打上标签,便于管理和运行测试用例

使用:

在测试用例/测试类前面加上:@pytest.mark.标签名

打标记范围:测试用例、测试类、模块文件

注册标签

使用之前,先注册标签,个人理解就是先定义标签,如果不进行注册运行时(pytest的高级版本)可能会报警告让你进行注册

注册有以下两种方法:

pytest.ini

[pytest]

addopts = -v -p no:warnings -p no:faulthandler
filterwaring =
    ignore:.*U.*mode is deprecared:DeprecationWarning

testpaths = ./test ./

markers =
    smoking :
    high    :
    medium  :
    lower   :

conftest.py需要多少个标签写多少

def pytest_configure(config):
    config.addinvalue_line("markers","P0"),
    config.addinvalue_line("markers","P1"),
    config.addinvalue_line("markers","reg")

使用mark标记

     在类或方法前加上@pytest.mark.标签名

测试代码:

class Test_mark:

    @pytest.mark.P0
    def test_mark1(self,a=1):
        print(a)

    @pytest.mark.P1
    def test_mark2(self,b=2):
        print(b)

测试结果:

2.参数化

在类前或用例前用pytest.mark.parametrize ,可进行参数化

 传参方式比较灵活,有很多种,下面是列出的几种方式,其他的可自行研究

@pytest.mark.parametrize("参数名",列表)

源码:

:param argnames:

    A comma-separated string denoting one or more argument names, or
    a list/tuple of argument strings.


:param argvalues:

    The list of argvalues determines how often a test is invoked with
    different argument values.


    If only one argname was specified argvalues is a list of values.
    If N argnames were specified, argvalues must be a list of
    N-tuples, where each tuple-element specifies a value for its
    respective argname.

翻译:

       参数名:字符串的形式存在一个或多个参数,用逗号分隔 ,或者用参数字符串的列表或元组

  参数:如果是一个,则用list;

                  如果多个,参数必须以列表中元组的形式,每一个元组对应一组参数值

单个参数:

         只传单个参数的值即可

    @pytest.mark.parametrize("a",["test1","test2"])
    def test_a(self,a):
        print(a)

运行结果:

  • 多个参数

      以元组的形式传入多个参数的值,一个元组代表一组参数的值

     例如:第一组a=1,b=2

               第二组a=3,b=4

    @pytest.mark.parametrize("a,b",[(1,2),(3,4)])

    def test_two_param(self,a,b):

        print(a+b)   

运行结果:

 参数名以列表的传入

    @pytest.mark.parametrize(["a","b","c"],[(1,2,3),(3,4,7)])
    def test_list(self,a,b,c):
        assert a+b == c
        print(a+b)

 运行结果:

  单个多次传入多个参数,排列组合传入

    a = (1,2,3)
    b = (4,5)

    @pytest.mark.parametrize("test_a",a)
    @pytest.mark.parametrize("test_b",b)
    def test_2_param(self,test_a,test_b):
        print(test_a*test_b)

  运行结果:

   json格式传入参数

       调用时,在名称后面加.items()读取内容

    data1 = {
        "test1":"test1",
        "test2":"test2"
    }

    @pytest.mark.parametrize("test",data1.items())
    def test_json(self,test):
        print(test)

    运行结果:

  3. skip跳过

自动化测试过程中,可能会遇到环境问题、已知bug、未完成接口等情况需要跳过用例,这时就需要用到pytest.mark.skip()或pytest.mark.skipif()

@pytest.mark.skip(reason)  只要有此标记就跳过,无条件

@pytest.mark.skipif(condition,reason="跳过原因")  满足输入的条件,就跳过

适用范围:

  •     放在测试类前面,跳过该类下的所有用例
  •     放在方法或者测试用例前面,跳过此方法或测试用例
  •     直接跳过 可加参数reason=“跳过原因”
    @pytest.mark.skip(reason="跳过该用例")
    @pytest.mark.parametrize(["a","b","c"],[(1,2,3),(3,4,7)])
    def test_list(self,a,b,c):
        assert a+b == c
        print(a+b)

满足条件跳过,即condition返回值为true

    @pytest.mark.parametrize(["a","b","c"],[(1,2,3),(3,4,7)])
    @pytest.mark.skipif(1==1,reason = "跳过该用例")
    def test_list(self,a,b,c):
        assert a+b == c
        print(a+b)

将skip赋值给变量,可多处调用

myskip = pytest.mark.skip(reason="跳过a,b相关用例")
class Test_param:

    @myskip
    def test_param(self,a=1,b=2):
        assert a+b == 4
        print(a+b)

4. xfail 该用例置为失败

已经知道该用例结果是失败的,又不想跳过,可以用xfail

xfail不会影响测试用例的执行,如果执行成功则报xpass,如果失败就会报xfail

  #运行结果为xpass
    @pytest.mark.xfail()
    def test_normal(self,c=10):
        print(c)

    #运行结果为xfail
    @pytest.mark.xfail()
    @pytest.mark.parametrize(["a","b","c"],[(1,2,3),(3,4,7)])
    def test_list(self,a,b,c):
        assert a+b != c
        print(a+b)

用例中标记失败,用pytest.xfail标记的测试用例,执行到这一句时,直接置为xfail,没有xpass

    data1 = {
        "test1":"test1",
        "test2":"test2"
    }

    @pytest.mark.parametrize("test",data1.items())
    def test_json(self,test):
        pytest.xfail(reason='该功能未完成')
        print(test)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASEMI代理ADM202EARNZ-REEL原装ADI车规级ADM202EARNZ-REEL

编辑:ll ASEMI代理ADM202EARNZ-REEL原装ADI车规级ADM202EARNZ-REEL 型号:ADM202EARNZ-REEL 品牌:ADI/亚德诺 封装:SOIC-16 批号:2023 引脚数量:16 安装类型:表面贴装型 ADM202EARNZ-REE…

【软件测试】Postman简单使用教程

【软件测试】Postman使用教程 创建集合 新建一个collection 新建一个请求 默认get 举例测试get请求 后端controller代码,该功能是查询所有信息 // 查询所有员工信息RequestMapping(value "/employee",method RequestMethod.GET)public String g…

ELK日志分析初

ELK是一个开源的日志分析系统 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在…

代码随想录算法训练营第三十一天| 理论基础 、455.分发饼干 、376. 摆动序列、53. 最大子序和

文章目录 491.理论基础455.分发饼干376. 摆动序列:star:53. 最大子序和:star: 491.理论基础 链接:代码随想录 解题思路: 通过局部最优,推出整体最优 如何验证贪心算法的正确性 最好用的策略就是举反例,如果想不到反例,那么就试一…

前端项目打包并部署

一、vue项目打包 1.1 方式一:vue项目命令行打包 在当前项目路径下,执行命令 npm run build 在当前项目路径下,生成 一个dist文件夹。 将来部署项目,是部署的dist这个文件。 1.2 方式二:使用vue ui打包项目 在终端中…

前端学习之路 来自前端方向学生的总结

恭喜您!您发现了宝藏! 我发现很多小伙伴,对于前端感兴趣,也很想去学好,但是却无从下手,不知道如何去学习。作为一名现处于大三即将大四的学生,借此机会来分享分享我的前端学习之路!…

扬帆优配|TMT板块密集发布减持计划 火爆行情潜藏估值难以匹配隐忧

4月以来,多家上市公司发表股东减持公告,其中一季度大热的TMT(科技、媒体和电信)板块的股东减持最为引人注目。 32只TMT股拟减持上限占比超1% 到4月18日,4月以来已有61家TMT板块上市公司发布减持方案。从拟变动数量上限…

神策数据荣登胡润百富 2023 全球独角兽榜

4 月 18 日,胡润研究院于广州 2023 全球独角兽 CEO 大会发布《2023 全球独角兽榜》(Global Unicorn Index 2023),列出了全球成立于 2000 年之后,价值 10 亿美元以上的非上市公司(估值计算日期截止 2022 年 …

自阿里P8爆出内部1031道java面试题后,在Boss直聘狂拿千份Offer

开始之前我问大家几个问题,看大家是如何思考的: 1.程序员一定要去一线城市漂泊吗?在自己家乡如何拿到一份满意的薪水? 2.程序员被裁员、找不到工作,代表什么? 3.程序员一定要进一线大厂吗?你…

手把手教你通过 Docker 部署前后端分离项目(亲测可用)

安装Docker 安装Nginx 安装Mysql 部署SpringBoot项目 部署Vue项目 一、安装Docker 1、安装: yum install docker 2、启动/停止/重启docker服务 service docker start service docker stop service docker restart 3、查看docker版本信息 docker version…

UDS 14229-1 诊断服务,两万字长文Trace版详细解读

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

Tomcat—javaEE

文章目录 1.定义及启动2.熟悉重点目录作用2.1bin2.2conf/server.xml2.3日志文件2.4webapps 3.部署和访问 1.定义及启动 (1)Tomcat属于web服务器的一种,也是servlet的一种 (2)Windows下,双击Tomcat下/bin/s…

ArcGIS|一文彻底搞懂GIS图斑编号

实际工作中,经常会有对各类图斑进行编号的需求。数据中图斑数比较少时,我们可以手动进行编号,但数据量较大时就必须得想办法自动实现图斑编号。今天,将分享几种常见的图斑自动编号方式,主要包括:图斑顺序编…

Mysql 触发器(复习)

今天考虑一个删除记录回收站的时候,突然想到了触发器这个东西,基本上之前也很少使用。废话不不多说,先看它的解释: 在MySQL中,触发器(Trigger)是一种特殊的存储过程,它会在指定的事…

[java/初学者]java常用API(2)——字符串

前言 所谓的字符串其实就是一串连续的字符,它是由许多单个字符连接而成的。如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符,这些字符必须包含在一对双引号之内,例如“Dufeng”。 而与字符串相关的类都放在java.lang包中&…

Nuitka打包PyQt项目快速上手

之前用pyinstaller打包python程序,听说Nuitka比较快,用它打包PyQt的程序练练手。 Nuitka 问了问chatGPT,总结几点:将python编译成C/C,提高速率、跨平台、编译后程序直接运行(不需要python解释器&#xff0…

【云原生】Kubernetes集群升级

【云原生】Kubernetes集群升级指南 前言一、集群升级过程辅助命令二、升级master节点2.1、升级kubeadm。2.2、验证升级计划2.3、master节点升级 三、升级node节点总结 前言 本文演示kubernetes集群从v1.24.1升级到v1.25.5。 相关文档。 一、集群升级过程辅助命令 &#xff0…

linux系统中MongoDB数据库安装及分片集群搭建

史上最全的mongodb分片集群搭建,从介绍安装到集群搭建授权,你再也找不到比他更加详细的资料了,未经允许禁止转载!! 一、简介 MongoDB是一个便于开发和扩展设计的文档数据库,属于NoSQL数据库的一种。Mongo…

计算机笔试/面试常见逻辑题/智力题汇总

说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充&#xff0c…

2023年值得关注的3个品牌趋势,帮你弯道超车

2023年,大环境开放,压抑三年的消费蓄势待发,品牌如何唤醒消费者的、热情成了重中之重的大事。 春风和煦,万物生长。又到了各类品牌、各位营销人踌躇满志、斗志昂扬的时候了,浅析一下2023品牌宣传趋势,抓住…