Python + Selenium数据驱动测试

相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动。

一、使用 ddt 执行数据驱动测试

1. 安装 ddt

(1) Pip install ddt
(2) 通过 pycharm 设置来安装,如图所示:
Python + Selenium数据驱动测试_第1张图片

2. 设计一个简单的数据驱动测试

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

import unittest, time
from selenium import webdriver
import ddt
@ddt.ddt
class TestDemo(unittest.TestCase):
    def serUp(self):
        self.driver = webdriver.Firefox()
    @ddt.data(["神奇动物在哪里","叶茨"],["疯狂动物城","古德温"])
    @ddt.unpack
    def tset_dataDrienByObji(self,testdata,expectdata):
        url = "http://www.baidu.com"
        self.driver.get(url)
        self.driver.implicitly_wait(10)
        try:
            self.driver.find_element_by_id("kw").send_keys(testdata)
            self.driver.find_element_by_id("su").click()
            time.sleep(3)
            self.assertTrue(expectdata in self.driver.page_source)
        except Exception as msg:
            print(msg)
    def terDown(self):
        self.driver.quit()

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

代码解释:
(1) 在测试类 TestDemo 前声明使用 ddt (@ddt.ddt)
(2) 在测试方法前使用@ddt.data()添加该测试方法需要得测试数据,@ddt.data接受一个可迭代的类型,以此来判断需要执行的次数。
(3) 最后使用@unpack 进行修饰,也就是在测试方法被调用过程中,对测试数据进行解包,将每组测试数据中的第一个数据传给 testdata 形参,将每组测试数据中的第二个测试数据传给 expectdata 形参。

二、使用数据文件进行数据驱动

1、通过 csv 文件获取数据

结合前面的测试脚本,我们在@data 装饰附中使用外部的 csv 文件来换掉之前的测试数据。
(1) 利用 excel 建立数据文件,通过另存为建立 csvdata.csv 文件,内容为上例所用的测试数据。
(2) 编写 get_data()方法,其中包括路径、csv 文件名。这个方法调用 csv 库去读取文件并返回列表 rows,其内容为测试数据。函数代码如下:

def get_csvdata(file_name):
	rows=[]
	data_file=open(file_name,"r")
	reader=csv.reader(data_file)
	for row in reader:
		rows.append(row)
	return rows

(3) 用 get_data() 方法获取的数据提供给@ddt.data(),如下所示:@ddt.data(*get_csvdata("testdata.csv"))

2、通过 excel 获取数据

用 Excel 来维护测试数据是最常用的做法,这还可以帮助非技术人员很轻松地添加一行需要测试的数据。结合前面的测试脚本,我们在@data 装饰附中使用外部的 excel 文件来换掉之前的测试数据。
(1) 利用 excel 建立数据文件 exdata.xlsx 文件,内容如下图所示:

测试数据 断言结果
神奇动物在哪里 叶茨
神奇动物在哪里 古德温
大话西游之月光宝盒 周星驰

(2) 读取 Excel 文件,需要安装 xlrd 库,安装命令如下:
Pip install xlrd Pycharm 下安装见上例
(3) 编写 get_xldata()方法,其中包括路径、excel 文件名。这个方法调用 xlrd 库去读
取文件并返回列表 rows,其内容为测试数据。
函数代码如下:

def get_xldata(file_name):
	rows=[]
	book=xlrd.open_workbook(file_name)
	sheet=book.sheet_by_index(0)
	for row_idx in range(1,sheet.nrows):
		rows.append(list(sheet.row_values(row_idx,0,sheet.ncols)))
	return rows

(4) 用 get_xldata() 方法获取的数据提供给@ddt.data(),如下所示:@ddt.data(*get_xldata("exdata.xlsx"))

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