简单版-数据驱动-excel数据源

  1. 目的
    相同的测试脚本使用不同的测试数据来执行,实现测试数据和测试脚本分离。
    从excel表中读取测试数据,用于程序的参数。

  2. 步骤
    (1)编写测试脚本,脚本需要指出从程序对象、文件或数据库读入测试数据;
    (2)将测试脚本使用的测试数据存入程序对象、文件或数据库等外部介质中;
    (3)运行脚本过程中,循环盗用存储在外部介质中的测试数据;
    (4)验证所有的测试结果是否符合预期结果。

  3. 测试逻辑:
    (1)打开百度首页
    (2)在搜索框输入一个搜索关键词
    (3)点击搜索按钮
    (4)验证搜索结果页面是否包含预期关键字,包含则认为测试执行通过,否则认为测试执行失败。

  4. 百度搜索代码1:
    4.1. 程序文件结构
    DataDrivenProject |---------------python工程
    Data.xls |---------------excel数据文件,存储测试数据
    ExcelDataDrivenTest.py |---------------测试程序文件

4.2. data.txt
简单版-数据驱动-excel数据源_第1张图片

4.3. ExcelDataDrivenTest.py

from selenium import webdriver
from openpyxl import *
import unittest
import time


class ExcelDriven(unittest.TestCase):
    # 初始化加载数据
    def setUp(self):
        self.driver = webdriver.Firefox()
        path = './data.xlsx'
        # 加载excel
        self.wb = load_workbook(path)
        # 设置第一个sheet为活动页
        self.ws = self.wb.active

    def test_excel_driven(self):
        for row in self.ws[2:self.ws.max_row]:
            # 读取每一行的第1、第2单元格中的值
            key, key_assert = row[1].value, row[2].value
            # 进行百度搜索
            self.driver.get('https://www.baidu.com')
            self.driver.find_element_by_id('kw').send_keys(key)
            self.driver.find_element_by_id('su').click()
            time.sleep(3)
            try:
                # 断言关键词
                assert key_assert in self.driver.page_source
                print('ok')
            except:
                print('error')
    # 测试数据清理
    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()
  1. 百度搜索代码2(ddt):
    5.1. 程序文件结构
    DataDrivenProject |---------------python工程
    Data.xls |---------------excel数据文件,存储测试数据
    ExcelUtil.py |---------------读取excel单元格中数据
    ExcelDataDrivenTest.py |---------------测试程序文件

5.2. data.txt
简单版-数据驱动-excel数据源_第2张图片
5.3. ExcelUtil.py

from openpyxl import load_workbook


class ParseExcel(object):
    def __init__(self, excelPath, sheetName):
        # 将excel加载到内存中
        self.wb = load_workbook(excelPath)
        # 通过工作表名称设置当前活动工作表
        self.sheet = self.wb.get_sheet_by_name(sheetName)
        # 当前活动工作表的最大行数
        self.maxRowNum = self.sheet.max_row

    def getDatasFromSheet(self):
        # 用于存放读取的数据
        dataList = []
        # 去掉第一行的数据,遍历工作表每一行
        for line in self.sheet.rows:
            tmpList = []
            # 把每一个的每一个单元格中内容存放的到列表中
            tmpList.append(line[1].value)
            tmpList.append(line[2].value)
            # 将行列表数据存存放数据列表中,格式[[],[],[]]
            dataList.append(tmpList)
        return dataList[1:]


if __name__ == '__main__':
    excelPath = u'./data.xlsx'
    sheetName = u"搜索数据表"
    pe = ParseExcel(excelPath, sheetName)
    print (pe.getDatasFromSheet())
    for i in pe.getDatasFromSheet():
        print (i[0], i[1])
5.4.	ExcelDataDrivenTest.py
from selenium import webdriver
from excelData.ExcelUtil import ParseExcel
import unittest
import time
import ddt


excelpath = './data.xlsx'
sheetName = '搜索数据表'
# 创建ParseExcel类的实例对象
excel = ParseExcel(excelpath, sheetName)

@ddt.ddt
class ExcelDriven(unittest.TestCase):
    # 初始化加载数据
    def setUp(self):
        self.driver = webdriver.Firefox()
    # 通过ddt获取excel类中的数据
    @ddt.data(*excel.getDatasFromSheet())
    def test_excel_driven(self, data):
        key, key_assert = tuple(data)
        # 访问百度首页
        self.driver.get('https://www.baidu.com')
        # 找到搜索输入框并输入测试数据
        self.driver.find_element_by_id('kw').send_keys(key)
        # 找到查询按钮,并点击查询按钮
        self.driver.find_element_by_id('su').click()
        time.sleep(3)
        try:
            # 断言期望结果是否出现在页面中
            assert key_assert in self.driver.page_source
            print('ok')
        except:
            print('error')
    # 测试数据清理
    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

你可能感兴趣的:(自动化测试)