我如何搭建自动化测试框架_03参数化
参考下面的文章,但是我看这里使用xlwt,使用起来不是特别好看,就顺便改改啦,改成openyxll库,就是好看一下,不过的hua,我看网上很多的教程,代码都相对比较零散,我争取写好看一点吧.相当于是后续想要复用代码也会方便很多.
https://blog.csdn.net/huilan_same/article/details/76572466
在读写openyxl方面的话,就参考这个啦,写的还是很漂亮的,确实是
https://blog.csdn.net/David_Dai_1108/article/details/78702032
这一节主要写的就是那个工具工具方法读取配置文件,或者测试数据文件,然后将这些数据文件作为测试的输入们通常会结合subtest来使用.我觉得在各个公司中,应该还是使用的比较少的.这里的读取文件的话,也可以扩展为读mysql数据库,然后这些然后再数据载体中同时读取其实数据,过程数据和期望数据,四个不错的方案,但是缺点也很明显,那就是用例和数据不放在一起,也就是不够直观.但下面仅仅作为学习使用,后续的使用再看实际情况啦.
首先是读取excel的代码,这个是我在别人的基础上面改的.
import os.path
from openpyxl import load_workbook
from utils.log import Logger
class ExcelReader():
def __init__(self):
self.cur_file = ""
self.cur_sheet = ""
self.log = Logger()
self.basic_init()
pass
def basic_init(self):
self.log.log_file_name = "excel_reader"
def update_file_name(self, excel_file_name):
self.cur_file = excel_file_name
def update_sheet_name(self, sheet_name):
self.cur_sheet = sheet_name
def get_sheet_all_data(self):
"""
根据Excel文件名,sheet名读取信息
:return: 以矩阵的方式返回二维列表
"""
try:
wb = load_workbook(self.cur_file, read_only=True)
except:
self.log.error("文件不存在, " + self.cur_file)
return None
try:
ws = wb[self.cur_sheet]
except:
self.log.error("所要读取的标签页不存在, " + self.cur_sheet)
return None
data = []
for i in range(1, ws.max_row + 1):
data.append([])
for j in range(1, ws.max_column + 1):
data[i - 1].append(ws.cell(row=i, column=j).value)
return data
def get_sheet_data_by_file_and_sheet_name(self, excel_file_name, sheet_name="Sheet1"):
self.update_file_name(excel_file_name)
self.update_sheet_name(sheet_name)
return self.get_sheet_all_data()
def get_sheet_basic_info(self):
"""
:return: 最大行数,最大列数
"""
pass
rd_excel = r"E:\代码空间\auto_test_framework\test_file\测试用例数据.xlsx"
rd_sheet = "Sheet1"
excel = ExcelReader()
data = excel.get_sheet_data_by_file_and_sheet_name(rd_excel, rd_sheet)
print("data", data)
这个函数还算简单,主要转入文件名和标签页的名称就可以了,如果要读取其他文件或者sheet 页的时候,直接通过接口函数去更新就行.后面的四行是哪个使用的实例
然后下面是用例,用例中使用了subtest,也就是子测试的意思,这个东西的使用场景就是,在一个用例或者测试场景中,想要尽可能的多测试几个数据,这个时候就可以用得上了.上代码.
import os
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from utils.config import *
from baseCase.base_case import BaseCase
from utils.excel_reader import ExcelReader
class TestBaiDu(BaseCase):
URL = Config().get('URL')
locator_kw = (By.ID, 'kw')
locator_su = (By.ID, 'su')
locator_result = (By.XPATH, '//div[contains(@class, "result")]/h3/a')
def sub_setUp(self):
self.driver = webdriver.Chrome(executable_path=self.driver_path)
self.driver.get(self.URL)
def sub_tearDown(self):
self.driver.quit()
def test_search(self):
rd_excel = DATA_PATH + '/测试用例数据.xlsx'
rd_sheet = "Sheet1"
excel = ExcelReader()
datas = excel.get_sheet_data_by_file_and_sheet_name(rd_excel, rd_sheet)[0]
print("datas", datas)
for d in datas:
with self.subTest(data=d):
self.sub_setUp()
self.driver.find_element(*self.locator_kw).send_keys(d)
self.driver.find_element(*self.locator_su).click()
time.sleep(2)
links = self.driver.find_elements(*self.locator_result)
for link in links:
self.log.info(link.text)
self.sub_tearDown()
if __name__ == '__main__':
unittest.main(verbosity=2)
我觉得读取excel中的数据还是主要用来举例,实际使用的时候,可以直接将测试数据写在用来中,这样子会比较直观,当然尽可能的使用那个字典这种比较直观的方式就好啦!
|