前言
说到数据驱动自动化测试,你会不会有这样的疑问:数据怎么管理?数据怎么才能驱动测试用例执行?到底怎么样才算数据驱动?那么本篇文章就教你如何进行数据驱动测试,相信你一定能对数据驱动的自动化测试有一个不一样的理解,希望这篇文章能帮助还在懵懵懂懂的你了解数据驱动测试,如何来做数据驱动测试?那么就跟上我的脚步吧^_^
一、项目介绍
地址:https://www.126.com/
1.实现126邮箱登录功能的验证
2.实现126邮箱添加新联系人功能的验证
二、目录结构
三、项目源码
1.新建config目录存放和业务无关的数据文件,比如PageElementLocator.ini 用来存放我们每个页面的定位元素表达式。
[126mail_login]
loginPage.frame=xpath>//div[@id='loginDiv']/iframe
loginPage.username=xpath>//input[@name='email']
loginPage.password=xpath>//input[@name='password']
loginPage.loginBtn=xpath>//a[@id='dologin']
[126mail_homePage]
homePage.addressbook=id>_mail_tabitem_1_4text
[126mail_addContactPage]
addContactPage.newContact=xpath>//span[text()='新建联系人']
addContactPage.newName=id>input_N
addContactPage.newMail=xpath>//div[@id='iaddress_MAIL_wrap']//input[@class='nui-ipt-input']
addContactPage.newMark=xpath>//span[@class='nui-chk-text']/preceding-sibling::span/b
addContactPage.newPhone=xpath>//div[@id='iaddress_TEL_wrap']//input[@class='nui-ipt-input']
addContactPage.newComment=id>input_DETAIL
addContactPage.newCommit=xpath>//span[text()='确 定']
2.有了上面元素的表达式我们又该如何查找我们的元素呢?这时候我们需要封装一套无论何种定位方式都可以使用的通用的查找方法。新建util目录(util目录主要存放和我们业务无关的公共方法),此目录下新建ObjectMap.py文件
from selenium.webdriver.support.wait import WebDriverWait
def getElement(driver, by, locate):
'''
查找单一个元素
:param driver: 浏览器驱动
:param by: 定位方式,id, name, class, xpath...
:param locate: 定位表达式
:return: 元素
'''
try:
element = WebDriverWait(driver, 30).until(lambda x :x.find_element(by, locate))
except Exception as e:
raise e
else:
return element
def getElelments(driver, by, locate):
'''
查找一组元素
:param driver: 浏览器驱动
:param by: 定位方式
:param locate: 定位表达式
:return: 一组元祖组成的列表
'''
try:
elements = WebDriverWait(driver, 30).until(lambda x :x.find_elements(by, locate))
except Exception as e:
raise e
else:
return elements
if __name__=='__main__':
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
inputBaidu = getElement(driver, 'id', 'kw')
inputBaidu.send_keys('python')
3.定位表达式有了,查找元素的方法封装好了,下面我们需要解析配置文件,获取配置文件中我们需要的定位方式和定位表达式。同样在util目下新建ParseConfigurationFile.py文件用来解析配置文件
from config.varCondig import pageElementLocatorPath
2 import configparser
3
4 class ParseConfigFile(object):
5 '''
6 解析ini配置文件
7 '''
8 def __init__(self):
9 try:
10 self.cf = configparser.ConfigParser() # 获取配置文件对象
11 self.cf.read(pageElementLocatorPath, encoding='utf-8') # 加载配置文件到内存中
12 except Exception as e:
13 raise e
14
15 def getItemsSection(self, sectionName):
16 '''
17 获取section下面所有section的键值
18 :param sectionName:
19 :return:
20 '''
21 try:
22 vlaues = dict(self.cf.items(sectionName))
23 except Exception as e:
24 raise e
25 else:
26 return vlaues
27
28 def getElementValue(self, sectionName, optionName):
29 try:
30 locator = self.cf.get(sectionName, optionName).split('>')
31 except Exception as e:
32 raise e
33 else:
34 return locator # 获取option键对应的value
35
36 def getAllSections(self):
37 try:
38 allsections = self.cf.sections()
39 except Exception as e:
40 raise e
41 else:
42 return allsections # 所有的sections返回值是个列表
43
44 def getAllOptions(self, section):
45 try:
46 options = self.cf.options(section)
47 except Exception as e:
48 raise e
49 else:
50 return options # 某个section下面的键
51
52 if __name__=='__main__':
53 cf = ParseConfigFile()
54 locator = cf.getElementValue('126mail_login','loginPage.username')
55 # print(locator)
56 print(cf.getItemsSection('126mail_login'))
57 print(cf.getAllSections())
58 print(cf.getAllOptions('126mail_addContactPage'))
4.我们获取到了每一个元素的定位方式和定位表达式,接下来我们又该如何查找到我们的元素对象呢?这时候我们会想到PO(pageObject)设计模式,把我们每一个page页面的元素保存到对应页面的文件中。
新建pageObjects目录,在此目录下分别创建HomePage.py LoginPage.py NewContact.py 三个页面文件
LoginPage.py文件存放我们登录页面所需要的元素, HomePage.py 存放登录成功后首页所需要的页面元素, NewContact.py文件存放我们添加联系人页面所需要的元素。
from util.ObjectMap import *
2 from util.ParseConfigurationFile import ParseConfigFile
3 class LoginPage(object):
4 '''
5 登录页面所有的操作元素对象
6 '''
7 def __init__(self, driver):
8 self.driver = driver
9 self.cf = ParseConfigFile()
10
11 def switchToFrame(self):
12 '''
13 切换到frame中
14 :return:
15 '''
16 by, locator = sel