• pytest测试框架


    一、基础 - requests模块

    从web抓取信息——Requests_power query怎么先提交web请求再提取返回数据-CSDN博客

    第三方模块requests常用方法及Response对象属性和方法详解

    第三方模块requests中data和json传参方式详解

    第三方模块requests对于Cookie鉴权以及Session鉴权的处理

    requests模块底层原理以及接口统一请求封装

    二、框架 - Pytest框架

    Pytest框架简介,默认测试用例规则,运行方式详解以及前后置夹具应用处理。

    Pytest框架之@pytest.fixtrue装饰器以及通过 conftest.py文件实现全局前置应用。

    Pytest实现接口自动化断言以及结合allure- pytest插件生成企业级Allure测试报告

    接口自动化测试框架请求封装以及接口关联框架封装改进。

    pytest简介

    pytest是python的第三方单元测试框架,比自带unittest更简洁和高效,支持非常丰富的插件,同时兼容 unittest 框架。

    它可以和很多的工具或框架,selenium,requests,appium实现多种自动化测试。
    它可以和allure结合生成美观的报告以及和jenkins实现持续集成。

    最重要的是,它有很多的插件:

    • pytest-html生成html报告插件
    • pytest-xdist 多线程
    • pytest-ordering标记测试用例的执行顺序
    • pytest-returnfailers失败用例重跑
    • pytest-base-url 管理基础路径
    • allure-pytest 生成allure报告
    • pytest
    • requests
    • pyyaml

    pytest框架的安装:pip install pytest

    pytest框架优点

    1、简单灵活,容易上手;

    2、支持参数化;

    3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appium等自动化测试,接口自动化测试(pytest+request);

    4、pytest具有很多第三方插件,并且可以自定义扩展。

    pytest框架使用注意事项

    1、 .py 测试文件必须以test_开头(或者以_test结尾)

    2、测试类必须以Test开头,并且不能有 init 方法

    3、测试方法必须以test_开头

    4、断言必须使用 assert

    pytest运行方式

    1、如果不提供任何参数,那么pytest会在当前目录及子目录下寻找以test_开头或者以_test结尾的测试文件,且该文件中以test_开头的测试函数

    2、当运行时指定测试文件的时候

        ①此时目录一定要切换到测试文件所在的目录,否则pytest搜索不到测试,不会执行.

        ②执行测试文件里的函数的时候,会搜索以test_开头的测试函数执行,不符合此规则的函数不会被执行

        ③如果含有测试类,那么允许该测试文件时,会搜索类名以Test开头的类,且该测试类中的函数命名也必须符合要求才会被执行

        ④运行的方式可以在命令行也可以在主方法上面运行

    例如:指定运行pythonDemo目录下的test_01模块

    ......

    if __name__ == "__main__":

    pytest.main(["pythonDemo/test_01.py"])

    或者命令行模式:

    pytest pythonDemo/test_01.py

    pytest.main(['-vs'])运行时打印调试信息

    pytest框架作用

    1.发现用例:根据每个框架默认的规则去发现并且加载测试用例

    2.执行用例:将测试用例安装一定的顺序和条件执行,并生成结果

    3.判断结果:通过断言来判断实际结果和预期结果是否相同

    4.生成报告:统计测试进度,耗时,通过率,生成报告。

    执行测试用例时的前后置处理

    第一种:和unittest相似

    测试用例之前:setup()

    测试用例之后:teardown()

    类前执行:setup_class()

    类后执行:teardown_class()

    第二种:fixture固件

    更强大,可以更加随心所欲地设置前后置处理。

    装饰器

    @pytest.fixture(scope="",params="",autouse="",ids="",name="")

    • scope:作用域,作用于哪些用例
      • function(): 默认
      • class
      • module
      • package/session 包/会话
    • params:数据驱动
    • autouse:True:自动作用,False:手动作用
    • ids:当数据驱动时更改参数名
    • name:fixture的别名

    第三种:@pytest.mark.usefixtures

    使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例。

    叠加usefixture  ,如果一个方法或者一个class用例想要同事调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加,注意叠加顺序,先执行的放底层,后执行的放上层。

    usefixtures和传fixture的区别:

    如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别,当fixture需要用到return的参数时,只能将参数名称直接当参数传入,不适合使用usefixtures,只有不需要用到return出来的参数时,两种方式都可以。

    举例1:在test_register前执行查询数据库操作

    结果:

    举例2:在test_register前后都执行查询数据库操作

    yeild是生成器,可以多次返回数据,在此处的作用是唤醒执行用例后的操作。 

    结果

     举例3:在每个用例前后执行查询数据库的操作 

     举例4:yeild可以返回值

    举例5: 利用params传参进行数据驱动

    结果

    举例6 :ids当数据驱动时更改参数名

     举例7:name:fixture的别名,调用时直接使用别名

    python+pytest+requests

    单个接口调试

    1.Post请求

    文件上传,文件所在路径

    如果用左斜杠,一个就好;用右斜杠,要用两个,其中一个表示转义符;如果是绝对路径,也可以在前面加r。

    2.Get请求,查询已上传的文件

    3.PUT请求,更新文件

    接口关联

    举例:PUT请求更新文件后,再用GET请求查询是否已更新。

    思路:在类中创建一个全局变量,可以供类中的每个方法调用,从而实现接口关联。PUT请求的返回值(更改全局变量)作为GET请求的输入值。

    接口自动化框架封装

    1.统计数据

    2.异常处理

        try except

    3.日志监控 

    统一封装:所有封装放在common包里面

    WEB项目接口间基本都存在cookie关联。requests.session能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。

        requests.session的作用:
            自动处理cookie,即下一次请求会带上前一次的cookie。
        requests.session的应用场景:
            自动处理连续的多次请求过程中产生的cookie。

     

    ​ 

    ​ 

    三、封装

    Yaml测试用例详解以及Yaml语法规则详解以及读写和清除

    Pytest+Paramatrizes+Yaml实现接口自动化 yaml测试用例数据驱动。

    接口自动化框架集成Jenkins实现CI持续集成构建接口自动化生态体系

    企业级接口自动化测试框架技术深入探讨和实现

    1.YAML文件用途,结构,数据类型详解
    2.Pytest用例管理框架数据驱动详解
    3.Pytest结合Yaml实现数据驱动
    4.pytest结合allure-pytest插件生成alture测试报告
    5.接口自动化测试框架技术框架深入探讨和落地实施 

    requirements.txt

    所有模块、插件放进requirements.txt中。在Terminal中输入pip install -r requirement.txt,可以安装全部模块/插件。

    一般来说,main方法放在最外层,新建一个run.py文件。

    -s:表示输出调试信息,包括print打印的信息

    -v显示更详细的信息

    -vs一起使用

    -n支持多线程或者分布式运行测试用例

    统一封装:所有封装放在common包里面 

    conftest.py (命名固定)专门用来保存固件的文件

    数据怎么实现关联?——用Yaml 文件保存,Yaml文件可以自动转换为json/字典格式。不用excel格式是因为Excel不能自动转换为字典,不好处理各种数据格式。

    New file - xxx.yaml (例子:extract.yaml),所有数据都放到yaml文件。

    Commom包下 - New Python file - yaml_util.py,对yaml文件做读写

    读取yaml文件

    with open(os.getcwd()+"/extract.yaml", encoding="utf-8") as f:

    #os.getcwd根目录

    结果:

     写入Yaml文件、清空yaml文件

    mode = 'a',表示追加;

    mode = 'w',表示清空。

    运行结果: 

     实战:将access_token写入Yaml文件

    再获取access_token

    结果:把access_token自动存入yaml

     

    改进:在执行之前先清空yaml文件。

    Yaml文件 

    YAML文件用途,结构,数据类型详解

    Yaml是一种数据类型,它可以和json之间灵活切换,支持注释,换行,字符串。

    用途:配置文件;编写测试用例。

    数据结构:

    1.Map对象(键:(空格)值)

    name: Amy

    2.数组(list):用一组横线“-”开头来表示

    - name: Amy

    - name: Bob

    Pytest用例管理框架数据驱动

    数据驱动 :其实就是把我们测试用例的数据放到excel,yaml,csv,mysql,然后通过去改变数据达到改变测试用例的执行结果 。

    数据驱动装饰器

    @pytest.mark.parametrized() 装饰器可以实现对测试用例的参数化,方便测试数据的获取。

    第一个参数是字符串,多个参数中间用逗号隔开

    第二个参数是list,多组数据用元组类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应

    • 传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化
    • 传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化

     

  • 相关阅读:
    Java Number & Math 类
    如何用Python做量化交易策略?
    2022年值得关注的5个区块链项目 数字藏品平台开发搭建
    Ubuntu连不上WiFi 或者虽然能连上校园网,但是浏览器打不开登录页面
    linux 打开相机工具cheese/guvcview
    16 一元线性回归
    【由浅入深_打牢基础】HOST头攻击
    大数据项目之电商数仓、实时数仓同步数据、离线数仓同步数据、用户行为数据同步、日志消费Flume配置实操、日志消费Flume测试、日志消费Flume启停脚本
    Linux常用命令
    Error:java: Annotation processing is not supported for module cycles.
  • 原文地址:https://blog.csdn.net/guo_qingxia/article/details/133648666