Selenium 自动化测试(六)

pytest 参数化实现 Data Drive Testing (DDT )

读取 CSV 文件

import csv
import pytest


def get_data():
    print("start get data")
    with open('test.csv') as f:
        my_data = []
        lst = csv.reader(f)
        for row in lst:
            my_data.extend(row)
        return my_data


@pytest.mark.parametrize('name', get_data())
def test01(name):
    print(f'test01 {name}')

test.csv:

name1,name2
name3,name4

执行结果:

Launching pytest with arguments test_csv.py::test01 --no-header --no-summary -q in C:\Users\yolan\PycharmProjects\pythonProject\testcases\ddt

============================= test session starts =============================
collecting ... collected 4 items

test_csv.py::test01[name1] PASSED                                        [ 25%]test01 name1

test_csv.py::test01[name2] PASSED                                        [ 50%]test01 name2

test_csv.py::test01[name3] PASSED                                        [ 75%]test01 name3

test_csv.py::test01[name4] PASSED                                        [100%]test01 name4


============================== 4 passed in 0.02s ==============================

Process finished with exit code 0

读取 JSON 文件

读取 excel 文件

安装xlrd来处理excel 文件, 需要下载xlrd==1.2.0版本,xlrd新版本2.0.1只支持.xls文件。如果需要读取.xlsx文件,需要安装旧版本。

pip uninstall xlrd
pip install xlrd==1.2.0
import pytest
import xlrd


def get_data():
    filename = 'testExcel.xlsx'
    wb = xlrd.open_workbook(filename)
    sheet = wb.sheet_by_index(0)
    rows = sheet.nrows
    cols = sheet.ncols
    lst = []
    for row in range(rows):
        for col in range(cols):
            cell_data = sheet.cell_value(row, col)
            lst.append(cell_data)

    return lst


@pytest.mark.parametrize('name', get_data())
def test01(name):
    print(f'test01 {name}')

读取数据库数据

用MySQL举例,安装 mysqlclient模块 > 链接数据库 > 查询

Selenium ddt

安装:pip install ddt
使用 @ddt、@data、@unpack、@file_data 加载数据
在pytest中不怎么用到ddt,因为pytest有自己的数据参数化方法

POM 简介

页面对象模型是一种设计模式,用例管理维护一组web元素集对象库,松耦合
每一个页面都有一个对应的page class
每一个page class 维护该web也的元素集和元素操作方法
page class中的方法命名建议根据起对应业务场景进行

设计 BasePage 类

PO page object页面对象设计

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import  sleep

class BasePage(object):
    def __init__(self, driver):
        self.driver = driver

    def get_element(self, *loc):
        return self.driver.find_element(*loc)

    def input_text(self, text, *loc):
        self.get_element(*loc).send_keys(text)

    def click(self, *loc):
        self.driver.find_element(*loc).click()

    def get_title(self):
        return self.driver.title

class BaiduPage(BasePage):

    search_input =  (By.ID, 'kw')
    search_button = (By.ID, 'su')

    def __init__(self, driver):
        BasePage.__init__(self, driver)
        driver.get('http://www.baidu.com')

    def test_search(self):
        self.input_text('selenium', *self.search_input)
        self.click(*self.search_button)
        sleep(5)

if __name__ == '__main__':
    driver = webdriver.Chrome()
    baidupage = BaiduPage(driver)
    baidupage.test_search()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值