POM+数据驱动+pytest

news2024/11/14 3:41:11

POM+数据驱动+pytest

数据驱动:将测试过程中所有测试数据,进行提取、保存以及管理,提升框架的可维护性,一般情况下会使用到的数据类型:Excel、yaml、json、py......,如:登录场景,需要测试 超长字符串、必填项不填写、账户/密码错误等,使用数据驱动就可以实现同一个用例步骤,搭配不同的数据验证不同的场景,一套用例使用不同的数据,就可以多次的测试,让用例代码可以复用,而不是使用一次就需要在写一次代码。

1、yaml数据驱动

——yaml就是一个文件,类似于xml,可以在Pycharm中直接创建后缀为yaml的文件,需要使用到list、字典,yaml就可以生成,方便配置数据、调用数据。

安装: pip install pyyaml

yaml应用:

  •  ‘ - ’ list标签
  • ‘ :' dict标签

目录:

baidu_page.py

from base import BasePage

"""
baidu_page.py文件是用来存储百度页面
"""

#创建BaiduPage类继承BasePage
class BaiduPage(BasePage):
    #定义url变量,供父类中的open()方法使用
    url = "http://www.baidu.com"

    #文本定位,并输入关键字
    def search_input(self,search_key):
        #使用父类locator方法来定位元素
        #比原生的selenium更加精简
        self.locator("id","kw").send_keys(search_key)

    #按钮定位,并点击
    def search_button(self):
        self.locator("id","su").click()

yaml_driver.py

import yaml

def load_yaml(path):
    file = open(path,'r',encoding='utf-8')
    data = yaml.load(file,yaml.FullLoader)#读取yaml文件,yaml.FullLoader加载完整的yaml文件,避免代码的任意执行
    return data

baidu.yaml

-
  txt: 狗狗币
-
  txt: selenium
-
  txt: pytest

test_param.py——这里我们可以看出优化到了只有一个执行用例的代码

import pytest
from selenium import webdriver
from baidu_page import BaiduPage
from time import sleep
from demo.data import yaml_driver


class Test_Baidu():
    # 环境准备
    @classmethod
    def setup_class(cls):
        cls.driver = webdriver.Chrome()

    """

    1、因为这3个用例步骤一模一样,因此我们可以使用数据驱动来简化代码
    将3个用例合并成2个,搭配数据驱动仍然可以执行3次
    2、需要数据驱动的测试用例:数据驱动可以以函数的形式将结果生成并返回
    
    """
    @pytest.mark.parametrize('data',yaml_driver.load_yaml('../data/baidu.yaml'))
    def test_baidu_search_case01(self,data):
        page = BaiduPage(self.driver)  # 使用BaiduPage基类,以及继承的父类的方法,就可以直接使用了
        page.open()  # 在BaiduPage中已经配置url了,这里就不需要配置了
        page.search_input(data['txt'])
        page.search_button()
        sleep(2)
        assert self.driver.title == "%s_百度搜索"%data['txt']

   # 环境清理
    @classmethod
    def teardown_class(cls):
        cls.driver.quit()  # 退出浏览器


if __name__ == '__main__':
    pytest.main(['-s', 'test_param.py'])

 结果:

============================= test session starts =============================
platform win32 -- Python 3.8.5, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: C:\Users\11130\PycharmProjects\pythonProject2\demo\data_driver
plugins: forked-1.4.0, html-3.1.1, metadata-1.11.0, rerunfailures-10.2, xdist-2.5.0
collected 3 items

test_param.py ...

============================= 3 passed in 12.01s ==============================


pytest框架写的用例

def test_list(self, config, web_session):  # 商品列表页面list接口
        key_id = config.get("business.KeyId")
        key_secret = config.get("business.KeySecret")
        request = JsonObject()
        request.storeId = config.get("storeId")
        sign_nodejs_request_package(request, key_id, key_secret)
        url_list = '/v1/list'
        resp, data = web_session.get(url_list, params=request, cookies=getattr(SetAndGet_obj, 'cookies_v1'))
        print('cookies_v1的值是', getattr(SetAndGet_obj, 'cookies_v1'))
        if resp.status_code == 200:
            print('v1_list接口请求成功')

        assert resp and resp.status_code == 200
        assert data.requestId
        assert data.exportRedeemPoints == True, "返回:False,说明XXXXX" 

 

总结:

感谢每一个认真阅读我文章的人!!!

 我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

                                                              

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《长沙市“1+2+N”先进制造业集群提质升级研究》 课题调研组莅临麒麟信安展开专题调研

为提质升级长沙“12N”先进制造业产业集群,构建与现代产业体系相适应的产业生态,7月11日下午,由长沙市制造业发展促进中心党委书记沈群等市制造业发展促进中心相关领导以及中南大学王昶、卢锋华、朱思文等教授和多位博士、硕士组成的《长沙市…

视频剪辑矩阵分发系统Unable to load FFProbe报错技术处理?

问题一 报错处理 对于视频剪辑矩阵分发系统中出现的“Unable to load FFProbe”报错问题,可以采取以下技术处理措施进行解决。 1.检查系统中是否正确安装了FFProbe工具,并确保其路径正确配置。 2.检查系统环境变量是否正确设置,包括FFPr…

Rete算法相关内容与实例,搞懂Rete算法这一篇文章就够了,有我自己的理解,也有经典的例子详解,非常详细

Rete算法是一个规则匹配算法,是一个高效的规则匹配算法。Drools从3.X版本到7.X版本一直都是基于Rete算法实现规则匹配的,为了进一步了解Drools,所以就研究一下Rete算法。 Rete算法是由美国工程师Charles L. Forgy在1979年提出的。 该算法的设计的目的就是用于高效地处理规…

【设计模式——学习笔记】23种设计模式——装饰器模式Decorator(原理讲解+应用场景介绍+案例介绍+Java代码实现)

生活案例 咖啡厅 咖啡定制案例 在咖啡厅中,有多种不同类型的咖啡,客户在预定了咖啡之后,还可以选择添加不同的调料来调整咖啡的口味,当客户点了咖啡添加了不同的调料,咖啡的价格需要做出相应的改变。 要求&#xff…

SAP安装笔记

1、准备安装介质,SWPM10SP25,51050829_NW750_JavaExport、SAP_HANA_CLIENT、kernel放到/sapcd/NetWeaver目录下 ​​​​​​​ 进入SWPM10SP25执行./sapinst安装 2、待出现 “Open your browser and paste the following URL address to access the G…

如何从0开始搭建公司自动化测试框架?25k入职新公司的我是这样做的..

搭建的自动化测试框架要包括API测试,UI测试,APP测试三类。以上三类其实可以简化为两类,那就是: 1)接口自动化测试框架搭建 2)UI自动化测试框架搭建。 没问题,安排,且是手把手教你如何…

高校宿舍报修管理系统的设计与实现(论文+源码)_kaic

摘 要 随着科技的发展,信息化的管理手段早以在人们生活的各个方面取代了传统的管理手段,以先进管理理念为基础的现代化信息管理系统已经成为了许多机构的必备工具。在如今大学的校园里,有着许许多多的信息化管理系统,如图书管理系…

尚医通06:数据字典+EasyExcel+mongodb

内容介绍 1、数据字典列表前端 2、EasyExcel介绍、实例 3、数据字典导出接口、前端 4、数据字典导入接口、前端 5、数据字典添加redis缓存 6、MongoDB简介 7、MongoDB安装 8、MongoDB基本概念 数据字典列表前端 1、测试问题 (1)报错日志 &am…

LabVIEW开发小型减阻试验平台

LabVIEW开发小型减阻试验平台 湍流摩擦在粘性流体的阻力中起着重要作用,减少湍流摩擦是流体力学领域的热门话题之一。在油气管道的长距离流体输送中,泵站提供的几乎所有动力都用于克服流体的胫骨摩擦。在流体输送领域,船舶的蒙皮摩擦阻力占总…

函数详细解析

目录 形参有默认值的函数 基本概述 指令角度 设定形参默认值 内联函数 基本概述 代码段 函数重载 答疑解惑 形参有默认值的函数 基本概述 从右向左设定形参默认值 形参默认值可以在定义时设定,也可以在声明时设定 每个形参的默认值只能被设定一次 指令角度…

华为HCIP第二节-------------------------ISIS

IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP(ConnectionLessNetwork Protocol&…

1200*B. Vanya and Lanterns

Examples input 7 15 15 5 3 7 9 14 0 output 2.5000000000 input 2 5 2 5 output 2.0000000000 解析&#xff1a; 最大距离即为每相邻两盏灯之间的最大距离/2 注意起点没有灯&#xff0c;终点可能有灯&#xff0c;需要分别判断 #include<bits/stdc.h> using nam…

前端html中让两个或者多个div在一行显示,用style给div加上css样式

文章目录 前言一、怎么让多个div在一行显示 前言 DIV是层叠样式表中的定位技术&#xff0c;全称DIVision&#xff0c;即为划分。有时可以称其为图层。DIV在编程中又叫做整除&#xff0c;即只得商的整数。 DIV元素是用来为HTML&#xff08;标准通用标记语言下的一个应用&#x…

如何在MacBook上彻底删除mysql

好久以前安装过&#xff0c;但是现在配置mysql一直出错&#xff0c;索性全部删掉重新配置。 一、停止MySQL服务 首先&#xff0c;请确保 MySQL 服务器已经停止运行&#xff0c;以免影响后续的删除操作。 sudo /usr/local/mysql/support-files/mysql.server stop如果你输入之…

DAY3,Qt(完成闹钟的实现,定时器事件处理函数的使用)

1.完成闹钟的实现&#xff0c;到点播报文本框的内容&#xff1b; ---alarm.h---头文件 #ifndef ALARM_H #define ALARM_H#include <QWidget> #include <QTimerEvent> //定时器处理函数类 #include <QTime> //时间类 #include <QPushButton> //按钮…

小红书舆情处理方法丨小红书负面笔记处理的三种技巧

小红书作为一个生活分享平台&#xff0c;经常会刷到一些负面笔记。更多用户的浏览&#xff0c;点赞收藏&#xff0c;评论行为会使笔记热度更高&#xff0c;笔记搜索排名靠前&#xff0c;如果品牌对负面舆情处置方法不当很可能影响公司品牌信誉&#xff0c;导致用户流失。 小红书…

WEB:unseping

背景知识 php序列化和反序列化 命令执行绕过方式 题目 进行代码审计 可知为反序列化 整体是创建case类&#xff0c;可接受post传来的ctf值 _consturuct函数,是在函数调动前启用&#xff0c;构造了$method和$args两个变量。 _dexstruct函数在变量摧毁的时使用&#xff0c;所…

HDU - 7315 Data Generation( 2023“钉耙编程”中国大学生算法设计超级联赛第四场 D)

题目大意 Yoshinow2001 \text{Yoshinow2001} Yoshinow2001 正在为他的问题生成数据。他想要生成 { 0 , … , n − 1 } \{0,…,n−1\} {0,…,n−1} 的一个随机排列&#xff0c;因此他使用了以下算法&#xff1a; 在这里&#xff0c;我们可以假设函数 rand ⁡ ( ) m o d n \ope…

超声功率放大器基本原理和设计流程

超声功率放大器是一种将低功率信号放大到高功率信号的设备&#xff0c;是实现超声成像、治疗和检查的关键组件。它主要由功率放大电路、控制电路、保护电路等部分组成。本文将介绍超声功率放大器的技术方案&#xff0c;包括其基本原理、设计流程及注意事项。 基本原理 超声功率…

闭环排队理论简介

闭环排队理论简介 1. 系统情景2. 数学描述 在排队理论简介一文中&#xff0c;笔者详细介绍了排队理论的基本内容。在该文中&#xff0c;申请流是来自系统外部的&#xff0c;其强度&#xff08;或密度&#xff09;并不取决于系统本身&#xff0c;也不取决于系统的状态。而在本文…