当前位置: 首页 > news >正文

pytest 常用方法介绍

零基础1小时快速入门pytest自动化测试教程,全套项目框架实战

 前言

   。实际在写自动化测试脚本中,还会有一些很实用的方法,下文就来讲述下这些用法。

一.pytest.mark.parametrize 装饰器

 pytest 内置装饰器 @pytest.mark.parametrize 可以让测试数据参数化,把测试数据单独管理,类似 ddt 数据驱动的作用,方便代码和测试数据分离。

1.一次传多个参数

复制代码

import pytest@pytest.mark.parametrize('x,y',[(1,2),(3,4)])
def test_sum(x,y):sum = x + yprint(sum)if __name__ =="__main__":pytest.main(['test_sample.py','-s'])

复制代码

执行结果:

复制代码

test_sample.py 
3
.
7
.============================== 2 passed in 0.06s ==============================

复制代码

2.组合传参:

 注意:这种方式一共传递了4组参数  (1,3)、(1,4)、(2,3)、(2,4)。这种方式可以简化测试数据,不用手动再将参数组合。

复制代码

import pytest@pytest.mark.parametrize('x',[1,2])
@pytest.mark.parametrize('y',[3,4])
def test_sum(x,y):sum = x + yprint(sum)if __name__ =="__main__":pytest.main(['test_sample.py','-s'])

复制代码

 执行结果:

复制代码

test_sample.py 
4
.
5
.
5
.
6
.============================== 4 passed in 0.14s ==============================

复制代码

二、fixture返回值

1.获取被调用函数返回值

复制代码

import pytest@pytest.fixture(scope='function')
def login():accesstoken = '197ce8083c38467f'return accesstokendef test_sum(login):token = loginprint(token)if __name__ =="__main__":pytest.main(['test_sample.py','-s'])

复制代码

 执行结果:

test_sample.py 
197ce8083c38467f
.============================== 1 passed in 0.04s ==============================

 若被调用函数返回多个参数:

复制代码

import pytest@pytest.fixture(scope='function')
def login():accesstoken = '197ce8083c38467f'customerguid = '096799f5-e040-11e9-8c01-0242ac11000d'return accesstoken,customerguiddef test_sum(login):token = login[0]guid = login[1]print(token)print(guid)if __name__ =="__main__":pytest.main(['test_sample.py','-s'])

复制代码

 执行结果:

复制代码

test_sample.py 
197ce8083c38467f
096799f5-e040-11e9-8c01-0242ac11000d
.============================== 1 passed in 0.07s ==============================

复制代码

2.单个用例调用多个函数

复制代码

import pytest@pytest.fixture(scope='function')
def login():print('登录')@pytest.fixture(scope='function')
def conn():print('连接数据库')def test_1(login,conn):print('测试用例1')def test_2():print('测试用例2')if __name__ =="__main__":pytest.main(['test_sample.py','-s'])

复制代码

 执行结果:

复制代码

test_sample.py 
登录
连接数据库
测试用例1
.
测试用例2
.============================== 2 passed in 0.05s ==============================

复制代码

三、测试用例分类

 有时候我们只需执行部分测试用例,比如从用例集当中挑选 smoke 测试,要怎么做呢?通过装饰器 @pytest.mark.smoke,smoke 是可以自定义的,运行时加上命令‘-m=smoke’,pytest 就会挑选带有装饰器的类或函数运行。

复制代码

import pytest@pytest.fixture(scope='function')
def login():accesstoken = '197ce8083c38467f'customerguid = '096799f5-e040-11e9-8c01-0242ac11000d'return accesstoken,customerguid@pytest.mark.smoke
def test_sum(login):token = login[0]guid = login[1]print(token)print(guid)def test_2():print('测试用例')if __name__ =="__main__":pytest.main(['test_sample.py','-s','-m=smoke'])

复制代码

 执行结果:

复制代码

test_sample.py 
197ce8083c38467f
096799f5-e040-11e9-8c01-0242ac11000d
.======================= 1 passed, 1 deselected in 0.02s =======================

复制代码


文章转载自:

http://wnXoHaHV.cwcdr.cn
http://gMZAPR8M.cwcdr.cn
http://gmB8IdGk.cwcdr.cn
http://iRFIc6Uf.cwcdr.cn
http://UtpItb6C.cwcdr.cn
http://ZXdiptyj.cwcdr.cn
http://p0p8LCJG.cwcdr.cn
http://qVGxl7pk.cwcdr.cn
http://YBYQSfCX.cwcdr.cn
http://InQhdmzr.cwcdr.cn
http://3gPb2HXL.cwcdr.cn
http://9zEeslCv.cwcdr.cn
http://X3tL4pJA.cwcdr.cn
http://MSGV1emS.cwcdr.cn
http://gS10Tr0U.cwcdr.cn
http://r7AJ01Z2.cwcdr.cn
http://V0NusIyf.cwcdr.cn
http://vodDJkgp.cwcdr.cn
http://EHRgF72j.cwcdr.cn
http://ghoud57v.cwcdr.cn
http://15tIsYFx.cwcdr.cn
http://WSWbvJPI.cwcdr.cn
http://9pMR1diI.cwcdr.cn
http://DkWQkEQs.cwcdr.cn
http://4toMQMa3.cwcdr.cn
http://mVefvtl4.cwcdr.cn
http://JUoRpql1.cwcdr.cn
http://dGj0CL3K.cwcdr.cn
http://RDu1C0M6.cwcdr.cn
http://7mxZwF37.cwcdr.cn
http://www.dtcms.com/a/385618.html

相关文章:

  • 牛客周赛 Round 109 (小红的直角三角形
  • 【C++实战⑬】解锁C++文件操作:从基础到实战的进阶之路
  • 股票进阶之成交量买卖法
  • 【LangChain指南】Prompt templates
  • CSS基础 - 选择器备忘录 --笔记5
  • Vue-30-利用Vue3大模型对话框设计之切换主题时显示对应的session列表
  • 全光谱 LED 太阳光模拟器的原理
  • 权限更改centos中系统文件无法创建文件夹,使用命令让普通用户具备操作文件夹
  • 【WebGIS】Vue3使用 VueLeaflet + 天地图 搭建地图可视化平台(基础用法)
  • 69-SQLite应用
  • Day06 双指针扫描 | 11. 盛最多水的容器
  • LeetCode 刷题【77. 组合、78. 子集、79. 单词搜索】
  • Jenkins 构建清理策略:自带功能 vs Discard Old Build 插件,全场景实操指南
  • DevOps历程-Gogs的安装与部署
  • FreeRTOS 任务静态创建与句柄详解
  • 嵌入式音视频开发——RTMP协议详解
  • 每日一题(6)
  • 信号量主要API及综合应用
  • 【开题答辩全过程】以 B站用户视频喜好倾向数据分析系统为例,包含答辩的问题和答案
  • ARM架构学习6.2——中断理解
  • 搭建Qt5.14.2+msvc2017_x64项目测试Opencv4.10功能
  • Steger 算法 的原理和流程
  • WD5030K:一款7-30V宽输入范围、12A高效同步降压DC-DC转换器芯片详解
  • 《2025年AI产业发展十大趋势报告》五十七
  • 滴滴试点返程费自主议价将会怎么改变市场?
  • 【嵌入式原理系列-第八篇】USART从原理到配置全解析
  • Python4-seaborn
  • 使用 Aamzon Step Functions 重构无服务器工作流
  • 模电基础:场效应管
  • Typescript工具类型