当前位置:网站首页>pytest 之 fixture参数化
pytest 之 fixture参数化
2022-08-09 13:06:00 【沉觞流年】
pytest 之 fixture参数化
前面通过unittest
框架介绍了UI自动化PO模式
,basepage封装后,unittest
框架搭建的UI自动化框架,基本就成型了。
前面的几篇pytest
文章,也简要介绍了pytest
和unittest
框架的相同与不同之处。将unittest
框架替换为pytest
框架,主要在 fixture:前置后置
、断言的表达
这两方面改动比较大。
pytest替换unittest
在PO分层中,元素定位、元素操作和测试数据这三层,是不需要进行改动的,需要进行改动的,是测试用例层
修改前置后置
在TestCases目录下新建一个 conftest.py 文件
,用于存放前置与后置的内容
import pytest
from selenium import webdriver
from PO.PageObjects.login_page import LoginPage
from PO.PageObjects.home_page import HomePage
import ddt
from PO.TestDatas import global_datas as GD
from PO.TestDatas import login_datas as lds
import logging
@pytest.fixture
def init_driver():
''' 用例前置:打开谷歌浏览器访问163邮箱登录页面并最大化窗口 用例后置:退出浏览器 :return: '''
logging.info("*********初始化driver的前置**************")
driver = webdriver.Chrome()
driver.get(GD.base_url)
driver.maximize_window()
yield driver
logging.info("*********初始化driver的后置**************")
driver.quit()
修改测试用例文件
先拿登录成功的测试用例来说:
- 1、将
unittest
替换为pytest
。unittest 通过定义一个类,继承unittest.TestCase;而pytest是通过其搜索机制发现测试用例 - 2、前置和后置的替换。调用了
conftest.py 文件
中的init_driver
fixture函数 - 3、断言的替换
import pytest
from selenium import webdriver
from PO.PageObjects.login_page import LoginPage
from PO.PageObjects.home_page import HomePage
import ddt
from PO.TestDatas import global_datas as GD
from PO.TestDatas import login_datas as lds
import logging
from PO.Common import logger
# @ddt.ddt()
@pytest.mark.usefixtures("init_driver")
class TestLogin:
def test_login_success(self,init_driver):
logging.info("*********登录操作正常场景-登录成功**************")
# 步骤:
# 1、登录页面-登录操作
LoginPage(init_driver).login(*lds.success_case) # 输入账号密码
# 断言:
# 1、首页-获取元素是否存在 (进行断言操作,元素可见返回True)
assert HomePage(init_driver).get_element_exists()
在终端输入命令 pytest -s -v
,执行一下登录成功的用例,执行通过,说明 pytest替换unittest 第一步已经成功了
pytest 之 fixture参数化
在unittest框架
中,数据驱动使用ddt模块
,然而,ddt 模块
不能和pytest
中的 fixture
共用,所以要换用 pytest 的参数化
来实现 ddt
参数化的使用
在测试用例的前面加上:
@pytest.mark.parametrize(“参数名”,列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:一组测试数据。
@pytest.mark.parametrize("参数1,参数1",[(数据1,数据2),(数据1,数据2)])
示例:
@pytest.mark.parametrize("a,b,c",[(1,2,3),(10,10,20),(100,100,200),(101,102,203)])
def test_add(a,b,c)
res = a + b
assert res == c
修改测试用例文件
@pytest.mark.parametrize("case",lds.fail_cases)
def test_login_failed(self,case,init_driver):
logging.info("*********登录操作异常场景-登录失败**************")
# 步骤:
# 1、登录页面-登录操作
lp = LoginPage(init_driver)
lp.login(case["user"], case["psd"]) # 输入 cases 数据中的 账号和密码
# print(case["user"], case["psd"], case["check"])
# 断言:
# 1、登录页面-获取错误提示信息 进行对比
# print(lp.get_error_msg())
re_error_msg = lp.get_error_msg()
assert re_error_msg == case["check"]
logging.info("返回的错误提示信息为{}".format(re_error_msg))
其中 lds.fail_cases
对应的是列表数据,也就是登录失败要用到的测试数据,pytest
中就不用像 ddt
一样再用星号解包了,pytest的参数化内部机制自己做了解包处理;
case
对应的是参数名,这个参数名需要和测试用例函数中的参数名一致,不然无法识别。
本质就是pytest
将 lds.fail_cases
中的列表数据进行解包,然后通过 case
传参到测试用例函数中
边栏推荐
- NC192 二叉树的后序遍历
- 2.微服务'黑话'集锦及Eureka注册中心相关概念
- NFS pays special attention to the problem of permissions
- 搭建大型分布式服务(四)Docker搭建开发环境安装Mysql
- FFmpeg长时间无响应的解决方法
- 周末看点回顾|我国IPv6网络全面建成;2022昇腾AI开发者创享日·南京站成功举办…
- Come and throw eggs.
- Professor Chen Qiang's "Machine Learning and R Application" course Chapter 16 Assignment
- 缓存和数据库一致性问题
- ArcEngine(九)图形绘制
猜你喜欢
TCP三次握手和四次挥手及拥塞控制
蓝桥历届真题-跑步锻炼
问题系列-如何修改或更新localhost里的值
Q_04_05 使用Qubits
蓝桥历届真题-既约分数
How to solve the 0x80070005 error when the computer is reinstalled and the system is restored
FFmpeg多媒体文件处理(ffmpeg处理流数据的基本概念)
七夕力扣刷不停,343. 整数拆分(剑指 Offer 14- I. 剪绳子、剑指 Offer 14- II. 剪绳子 II)
缓存和数据库一致性问题
Explanation of RTSP protocol
随机推荐
NC193 二叉树的前序遍历
现在40系显卡都快出来了,为何1060型号的显卡还有这么多人用?
WSA toolkit installed app store tip doesn't work how to solve?
X264性能优化
IDEA Gradle 常遇问题(二)(持续更新)
Map mixed density function and quantile added line
搭建大型分布式服务(四)Docker搭建开发环境安装Mysql
Come and throw eggs.
Oracle Recovery Tools修复空闲坏块
Standing wave ratio calculation method
ArcEngine(九)图形绘制
Sandbox中的进程/线程相关-2
Q_06_02 类型模型
NC96 判断一个链表是否为回文结构
FFmpeg multimedia file processing (the basic concept of ffmpeg processing stream data)
【瑞吉外卖】day05:增、删、改、查分类以及公共字段自动填充
WPF 系统托盘 图标闪烁
七夕力扣刷不停,343. 整数拆分(剑指 Offer 14- I. 剪绳子、剑指 Offer 14- II. 剪绳子 II)
JS动画函数封装
[FPGA Tutorial Case 48] Image Case 8 - Realization of Converting RGB Image to HSV Image Based on FPGA, Assisted Verification by MATLAB