首页 > 其他分享 >2 Pytest测试框架升华篇

2 Pytest测试框架升华篇

时间:2023-02-22 17:11:07浏览次数:41  
标签:allure name 框架 self pytest Pytest print 升华 def

pytest框架实现一些前后置(固件、夹具)的处理,常用三种

一、setup/teardown, setup_class/teardown_class全部

class TestClass:

    # 这个在所有的用例之前只执行一次    def setup_class(self):
        print("在每个类执行前初始化的工作,如:创建日志对象,创建数据库的连接等")
    
    # 在每个用例之前执行一次    def setup(self):
        print("在执行测试用例之前初始化的代码,如:打开浏览器,加载网页等")
        
    def test_01(self):
        print("测试用例1")

    def test_02(self):
        print("测试用例2")
        
    def test_03(self):
        print("测试用例3")
    
    def teardown(self):
        print("在执行测试用例之后的扫尾代码,如:关闭浏览器")
    
    def teardown_class(self):
        print("在每个类执行后的扫尾工作,如销毁日志对象,销毁类等")

缺陷:每一个用例必须执行,如果只想部分执行,就需要另外的方法

二、使用fixture装饰器来实现部分用例前后置置(固件、夹具)的处理

装饰器:@pytest.fixture(scope="", params="", autouse="", ids="", name="")

  • scope表示的是被@pytest.fixture标记的方法的作用域。function(默认)、class、module、package/session

  • params:参数化(支持列表[],元组(),字典列表[{},{},{}],字典元组({},{},{})

import pytest
@pytest.fixture(scope='function', params=['zhangsan', 'lisi'])
def my_fixture(request):
    print("这是前置的方法")
    yield request.param  # return和yield都表示返回都意思,但是return后面不能有代码,yield返回后可接代码    
    print("这是后置的方法")


class TestClass:
    def test_01(self):
        print("测试用例1")

    def test_02(self, my_fixture):
        print("测试用例2")
        print("--------" + str(my_fixture))
  • autouse=True,自动使用,默认False

  • ids:当使用params参数化时,给每一个值设置一个变量名。意义不大

  • name:给表示的是被@pytest.fixture标记的方法取一个别名(当取了别名后原来的名称就不能用了)

三、通过conftest.py和@pytest.fixture结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理)

  • conftest.py文件是单独存放的一个夹具配置文件,名称是不能更改的

  • 用处:可以在不同的.py文件中使用同一个fixture函数

  • 原则上conftest.py需要和运行的用例放到同一层,不需要做任何import导入的操作(不同层也可以,作用域问题)

四、断言

assert 

asser A==B

五、pytest结合allure-pytest插件生成allure测试报告

  • allure安装

windows:下载,解压,并配置环境变量:https://github.com/allure-framework/allure2/releases
mac:brew install allure
  • 安装Python依赖

windows:pip install allure-pytest
mac:pip3 install allure-pytest
  • 加入命令生成json格式的临时报告

--alluredir ./temp

  • 生成allure报告

os.system('allure generate ./temp -o ./report --clean')
allure generate  固定指令
./temp   临时的json格式报告的路径
-o 输出output
./report 生成的allure报告的路径
--clean 情况./report路径原来的报告

六、@pytest.mark.parametrize()基本用法

@pytest.mark.parametrize(args_name, args_value)

args_name: 参数名

args_value: 参数值(列表、元组、字典列表、字典元组),有多个值用例就会执行多次

第一种方式

import pytest

class TestApi:

    @pytest.mark.parametrize('args', ['zhangsan', 'lisi'])
    def test_01_zhansan(self, args):
        print(args)

# 执行结果# xxx.py::TestApi::test_01_zhansan[zhangsan] PASSED [ 50%]zhangsan# xxx.py::TestApi::test_01_zhansan[lisi] PASSED [100%]lisi

第二种方式(同unittest的ddt里面的@unpack解包一样)

import pytest


class TestApi:

    @pytest.mark.parametrize('name, age', [['zhangsan', '20'], ['lisi', '18']])
    def test_01_zhansan(self, name, age):
        print(name, age)

# 执行结果# xxx.py::TestApi::test_01_zhansan[zhangsan-20] PASSED [ 50%]zhangsan 20# xxx.py::TestApi::test_01_zhansan[lisi-18] PASSED [100%]lisi 18

七、YAML文件详解——实现接口自动化

  • 用于全局的配置文件 ini/yaml

  • 用于写测试用例(接口测试用例)

语法规则:

  • 区分大小写

  • 使用缩进表示层级,支持注释、换行、多行字符串、裸字符串(整型、字符串)

  • 缩进没有数量要求,只要前面对其就行

  • 注释用#

数据组成:

  • Map对象,键值对 键:(空格)值

  • 多行写法:

msxy: 
  name: zhangsan
  age: 18
  • 一行的写法:msxy:{name: zhangsan, age: 18}

数组(list),用一组横线开头:

  • 多行写法:

-
  msxy: 
  name: zhangsan
  age: 18
-
  msxy: 
  name: lisi
  age: 20
  • 一行的写法:

-
  msxy: [{name: 百里}, {age: 18}]

 

 

  

 

标签:allure,name,框架,self,pytest,Pytest,print,升华,def
From: https://www.cnblogs.com/dyl0/p/17145099.html

相关文章

  • python之路75 vue框架 vue3介绍、创建项目、setup函数、ref和reactive、计算属性和监
    vue3介绍vue3的变化1.性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%2.源码的升级使用Proxy代替defineProp......
  • Pytest学习笔记
    参考链接1、pytest执行用例规则目录下执行所有的用例pytest//orpy.test执行单独一个pytest模块pytestfileName.py运行某个模块里面的某个类pytestfile......
  • 分布式任务调度框架xxl-job入门(Cron表达式、环境搭建、整合SpringBoot、广播任务与动
    (目录)xxl-Job分布式任务调度1.概述1.1什么是任务调度我们可以先思考一下业务场景的解决方案:某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。某银行......
  • .net core abp框架ddd分层如何做ef core迁移和恢复迁移
    一、从模型迁移到数据库1、visualstudio启动项里选择对应的项目,修改appsettings.json里的数据库链接(决定迁移到那个服务器以及数据库)2、打开Nuget管理控制台,执行Add-Mi......
  • 推荐一个分布式单点登录框架XXL-SSO!
    有关单点登录(SSO)之前有写过两篇文章一文读懂JWT!看完这篇不能再说不懂SSO原理了!如果说XXL-JOB你可能并不陌生,它是非常火爆的一个分布式任务调度平台。但其实在该......
  • MapReduce框架原理
    原理一:切片与MapTask并行度决定机制MapTask之前了解到了,他是在分布式程序在map阶段的一个进程,管理之一个map任务类似于一个master。那么什么是切片?说起切片,很明......
  • 28-DRF框架-搭建环境开发restful接口
    #将程序中的一个数据结构类型转换为其他格式(字典、JSON、XML等),例如将Django中的模型类对象装换为JSON字符串,这个转换过程我们称为序列化#将其他格式(字典、JSON、XML等)转......
  • Vue第三方框架之ElementUi
    目录Vue第三方框架之ElementUi1.热门组件库2.elementui的使用Vue第三方框架之ElementUi1.热门组件库使用第三方插件插件和库:https://github.com/vuejs/awesome-vu......
  • Mybatis Plus 框架项目落地实践总结
    在使用了MybatisPlus框架进行项目重构之后,关于如何更好的利用Mybatisplus。在此做一些总结供大家参考。主要总结了以下这几个方面的实践。基础设计BaseEntity逻辑......
  • Spring框架3--Web
    Spring框架之WebJavaweb三大组件和四大域顺便:Javaweb中的四大域,作用范围如下:PageContext<Request<Session<ServletContext(Application)域对象属性的作用范围......