POM+数据驱动+pytest

文章介绍了如何结合PageObjectModel(POM)、数据驱动和pytest框架进行自动化测试。通过yaml文件存储测试数据,简化了测试代码,实现了测试用例的复用。示例展示了如何读取yaml文件中的数据,并在测试中应用,最后运行pytest执行测试,得到了三个测试用例全部通过的结果。
摘要由CSDN通过智能技术生成

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" 

 

总结:

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

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

                                                              

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值