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()