如果在进行自动化测试的时候将测试数据写在代码中,若测试数据有变,不利于数据的修改和维护。但可以尝试通过将测试数据放到excel文档中来实现测试数据的管理。
示例:本次涉及的项目使用的12306 selenium 重构------三层架构
excel文件数据如图所示:
整体项目代码结构如图所示:
function.py 代码如下(基础代码):
# coding = utf-8'''基础常用方法'''from datetime import date,timedelta
from selenium import webdriver
from selenium.webdriver.common.by import By
import xlrd
import logging
# 将driver设置为全局变量
driver = webdriver.Chrome()defreturn_driver():'''
函数return_driver()的功能是返回driver对象
:return:driver对象
'''return driver
defopen_base_site(url):'''
打开网页
:param url:要打开的网页地址
:return:
'''
driver.get(url)defmax_window():'''
浏览器窗口最大化
:return:
'''
driver.maximize_window()defclose_driver():'''
关闭浏览器
:return:
'''
driver.quit()# 以下为定义函数部分,其目的是返回今天后的第n天后的日期,格式为“2022-03-28”defdate_n(n):returnstr((date.today()+ timedelta(days=int(n))).strftime('%Y-%m-%d'))defid(element):'''
根据元素id属性值来返回元素定位语句。
:param element: id属性值
:return:按照id属性来定位元素的语句
'''return driver.find_element(By.ID, element)defxpath(element):'''
使用xpath定位元素
:param element:
:return:按照xpath方式来定位元素的语句
'''return driver.find_element(By.XPATH, element)defread_excel(excleName, sheetName):'''
按行读取excel
:param excleName: excel文件名
:param sheetName: sheet名称
:return: 列表形式
'''
wb = xlrd.open_workbook(excleName)
sheet = wb.sheet_by_name(sheetName)
data =[]for row inrange(sheet.nrows):
data.append(sheet.row_values(row))return data
deffilelog(logName):'''
文件日志器
:return: 日志器
'''# 创建日志器
logger = logging.getLogger()# 设置日志器输出级别
logger.setLevel(logging.DEBUG)# 创建格式器
fmt ='%(asctime)s %(filename)s %(lineno)d %(levelname)s %(message)s'format= logging.Formatter(fmt=fmt, datefmt='%Y-%m-%d %H:%M:%S %a')# 创建文件处理器
fileHandler = logging.FileHandler(logName +'.log', mode='a', encoding='utf-8')# 处理器添加格式器
fileHandler.setFormatter(format)# 日志器添加文件处理器
logger.addHandler(fileHandler)# 返回日志器return logger
search_tickets.py 的代码如下:
# coding = utf-8from functions import return_driver, open_base_site,max_window,date_n,xpath,iddefsearch_tickets(from_station, to_station, n, url):'''
搜索车次
:param from_station: 出发城市
:param to_station: 到达城市
:param n: 一个数字,如1表示选择明天的车票,2表示选择后台的车票
:param url: 要访问的网站地址
:return:
'''# tomorrow变量:出发日期
tomorrow = date_n(n)# 打开浏览器
driver = return_driver()# 打开网站
open_base_site(url)# 设置窗口最大化
max_window()# 输入出发城市
xpath('//input[@id="fromStationText"]').click()
xpath('//input[@id="fromStationText"]').send_keys(from_station)
xpath('//div[@id="citem_2"]').click()# 输入到达城市
xpath('//input[@id="toStationText"]').click()
xpath('//input[@id="toStationText"]').send_keys(to_station)
xpath('//div[@id="citem_1"]').click()# 输入出发时间id('train_date').clear()id('train_date').send_keys(tomorrow)# 点击查询id('search_one').click()# 切换到新窗口
driver.switch_to.window(driver.window_handles[1])# 点击弹窗确认按钮
xpath('//a[@id="qd_closeDefaultWarningWindowDialog_id"]').click()# 点击D2244车次的预订
xpath('//tr[starts-with(@id,"ticket_76000D22440N_01_06")]/td/a').click()
login.py文件代码如下:
# coding = utf-8from functions importiddeflogin(username, password):'''
账号登录
:param username: 用户名
:param password: 密码
:return:
'''# 输入用户名id('J-userName').send_keys(username)# 输入密码id('J-password').send_keys(password)
测试代码文件test_booking_tickets.py 如下:
# coding = utf-8from search_tickets import search_tickets
from login import login
from functions import close_driver, read_excel, filelog
from time import sleep
# 搜索火车票列表
log = filelog('12306')
log.info('读取excel文件')
data = read_excel('testdata.xlsx','city')print(data)
log.info('开始搜索火车票')
search_tickets(data[0][0], data[0][1],1,'https://www.12306.cn/index/')
log.info('搜索火车票结束')
sleep(2)# 登录
log.info('输入用户名密码开始登录')
login(data[1][0], data[1][1])
log.info('登录成功')
sleep(2)# 关闭浏览器
log.info('关闭浏览器')
close_driver()
版权归原作者 王大傻0928 所有, 如有侵权,请联系我们删除。