首页 > 其他分享 >pytest-笔记

pytest-笔记

时间:2023-03-07 09:34:03浏览次数:30  
标签:-- setup 笔记 用例 pytest 固件 装饰

pytest的固件
    模块级别
    类级别
    函数级别
    方法级别
setup_module(),teardown_module() :(模块级别)
一前一后,必须写成声明的函数,不能加self,可以实现整个测试模块,各执行一次,

unittest有两种固件:(类级别)
setUpclass(搭建)和tearDown(清理)比如用于连接数据库,断开数据库,测试数据的创建和清理

setUp和tearDown比如:用于打开浏览器,关闭浏览器,

函数级别的固件:
    setup_function/teardown_function(在每个函数用例    执行之前和执行之后执行一次)
方法级别的固件:(写在类里面)
    setup_method/teardown_method(也可以写为setup/teardown),前者的优先级更高

4种固件共10个的执行顺序
     ①如果只有函数用例:setup_module--setup_function--用例--teardown_function......teardown_module
     ②如果只有方法用例:setup_module--setup_class--setup_method--setup--用例--teardown--teardown_method--teardown_method--teardown_module

自定义固件

装饰器的作用:在不改变装饰对象代码函的前提下,扩展其功能,被装饰对象可以是类,函数,方法

目前用过的装饰器有;    
    parameterized.expand():参数化一个方法的用例
    classmethod:作用是实现一个方法装饰成类的方法
    staticmethod:作用是实现一个方法装饰成静态方法
    pytest.fixture来:作用是实现自定义固件
       pytest.mark.usefixtures():作用是实现固件的调用
    

函数加括号是调用,不加括号是一个对象
自定义固件的语法:通过装饰器pytest.fixture来装饰一个函数,这个函数就变成了一个固件。自定义的固件需要调用才能被执行。
pytest.fixture()装饰器中的参数:

scope:作用是定义固件的级别,scope默认值是function,它的取值可以是function/class/module/package/session之一。
        scope=function:对函数用例来讲,相当于setup_function,对方法用例来讲,相当于setup_method
        scope=class:对函数用例来讲,相当于setup_function,对方法用例来讲,相当于setup_class
        scope=module:相当于setup_module
        scope=session:相当于设置固件的级别为会话级别,它与setup_module相比,可以实现跨模块只执行一次。
 
yield语句:作用是一方面可以实现函数或方法的返回,此时相当于return语句;同时可以把函数变成一个生成器。

实现自定义固件中的teardown代码:在自定义固件中,使用yield语句来实现返回,yield之前的代码就是setup的代码,yield之后
的代码就是teardown的代码。

固件创建对象,初始化数据,

conftest.py文件(不能写错文件名)
可以在conftest.py文件中自定义固件,这样的好处是可以不用导入就可以被用例调用,注意conftest.py文件放的位置必须放到调用它的模块的同级或者上级目录,最简单的方法就是放到项    目的根目录下,这样项目下的所有模块都能调用到固件

跳过这行用例
    @pytest.mark.skip(reson = "暂时不需要执行这条用例")

判断操作系统类型的方法:
        1)os.name:返回nt表示windows,返回posix表示linux;
        2)sys.platform:返回win32表示windows,返回linux表示linux系统。

pytest中常用的装饰器:
        1)pytest.mark.skip(reason):装饰一个用例,作用是跳过这条用例不执行
        2)pytest.mark.skipif(condition,reason):装饰一个用例,作用是当满足条件时跳过这条用例不执行
        3)pytest.mark.xfail(reason):装饰一个用例,作用是标记这个用例预期是失败的,预期失败的用例如果实际运行失败,
        状态是XFAIL,预期失败的用例如果实际运行是成功的,状态是XPASS
        4)pytest.mark.usefixtures(fixture):实现自定义固件的调用。

unittest中的装饰器:
        unittest.skip(reason):标记跳过某个测试用例
        unittest.skipIf(condition,reason):标记当条件为真的时候就跳过
        unittest.skipUnless(condition,reason):标记当条件为真的时候就不跳过,条件为假的时候就跳过

    @parameterized_class ,对所有用例参数化
    @parameterized.expand,对单条用例参数化

固件参数化

    @pytest.fixture(params=[1,2,3,4,5])
    def my_fixture_30(request):  声明形参猜能返回
        yield request.param


用例参数化    
    @pytest.mark.parametrize("a,b,c",([1,2,3],(2,7,8),(2,4,6)))
            以字符串传入参数名,二维的列表或者元组传入数据
                            跳过这条用例
    # @pytest.mark.parametrize("a,b,c",([1,2,3],pytest.param(*(2,7,8),marks = pytest.mark.xfail(reason="不会成功")),(2,4,6)))
    @pytest.mark.parametrize("a,b,c",([1,2,3],pytest.param(*(2,7,8),marks = pytest.mark.skip(reason="不会成功")),(2,4,6)))

unittest和pytest的区别
    1)  unit test需要继承unit test.TestCase类,而pytest不需要继承
    2)在编写用例时,unit test只支持用例,pytest同时支持函数和方法两种用例
    3)unittest中的断言使用继承于unittest.TestCase类的assert*方法来实现,而pytest只需要使用python的assert语句实现断言;
    4)pytest支持自定义固件,在conftest.py文件中自定义固件;
    5)unittest本身没有参数化模块,需要第三方模块比如parameterized、ddt等来实现参数化,而pytest自带参数化模块,并且可以实现固件参数化和用例参数化两种形式;


ddt:data driven test 数据驱动测试
参数化用例,自动读取用例
@file_data(".\ddt_json.json")

ddt的几个装饰器:  
    ddt:装饰测试类
    data:装饰测试用例,对用例传参
    unpack:装饰测试用例,作用是当data装饰器中传入元组或列表的时候,把元组或列表中的数据拆出来传给用例的参数
      file_data:装饰测试用例,作用是对用例传参,这个装饰器中可以传入json或者yaml文件路径

生成html文件报告(插件pytest-html)
pytest .\test_cases_with_pytest.py --html=..\test_result\interfaceAtuoTest.html --self-contained-html
--html= 表示生成报告的路径
--self-contained-html表示生成的文件中html和css嵌套在一起
在pycharm运行生成报告,需要配置


pytest .\test_cases_with_pytest.py --alluredir=..\test_result --clean-alluredir
allure serve ..\test_result吧
标题参数化 allure.dynamic.title(name)



 





           

标签:--,setup,笔记,用例,pytest,固件,装饰
From: https://www.cnblogs.com/IceSparks/p/17186964.html

相关文章

  • requests-笔记
    第一个函数requests.request()post请求 data=""(字典或者元组的列表)get请求params=""(字典,元组的列表)服务器不支持json传入数据,headers来设置请求头信息,(字典的形式传入)co......
  • 接口测试—笔记
    fiddler监听端口为:8888HTTP:从万维网服务器传输超文本到本地浏览器的传送的传输协议tcp/ip协议族的四个层级应用层:HTTP/telent/ftp等传输层:tcp/udp网络层:ip/icmp/igmp链路......
  • 斜率优化学习笔记
    P3195[HNOI2008]玩具装箱容易推出式子\(dp[i]=min(dp[i],dp[j]+(i-j-1+s[i]-s[j]-L)^2)\)故设\(A[i]=i+s[i]-L-1\)(与\(j\)无关的项)\(B[i]=i+s[i]\)故如果\(dp......
  • jenkins学习笔记之九:jenkins认证集成github
    1.github创建OAuth2.jenkins安装并配置github认证插件jenkins配置使用github认证 3.注销重新登录      ......
  • python 学习笔记
     train_test_split函数在机器学习中,我们通常将原始数据按照比例分割为“测试集”和“训练集”,从sklearn.model_selection中调用train_test_split函数 简单用法如......
  • jenkins学习笔记之八:jenkins认证集成gitlab
    1.gitlab创建新应用2.jenkins安装gitlab插件3.插件安装完成后全局安全配置中使用并配置gitlab认证4.注销重新登录后自动使用gitlab当前登录账号登录jenkins必须和......
  • c#随笔记01
    C#语言的特点不允许直接操作内存,去掉了指针操作。彻底的面向对象设计:封装、继承、多态usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingS......
  • 构建之法阅读笔记01
        在第一章的学习中,我了解到了软件=程序+软件工程,程序,指的是源程序,也就是一行行代码,软件工程的核心部分是和软件开发活动相关的内容,还有一个推论就是软件企业=软件+商......
  • 《数据结构与算法》阅读笔记——表1
    1.表与链表:表:连续存储一组数的数据结构。假定表中存在着某个元素i,则i的前一个元素为i的前驱元素,i的后一个元素为i的后继元素。对表的操作:1.PrintList:输出2.MakeEmpty:创建......
  • React课堂笔记3-生命周期
    一、组件component(续)1.1、组件的state1.1.1、componentWillUnmountcomponentWillUnmount() 会在组件卸载及销毁之前直接调用。在此方法中执行必要的清理操作,例如,清除t......