一篇文章快速教你如何搭建数据驱动自动化测试框架?

本文详细介绍了如何从零开始搭建一个数据驱动的自动化测试框架,包括项目介绍、目录结构、源码解析和关键步骤。通过实例展示了如何利用Python进行数据管理,实现126邮箱的登录和添加新联系人功能的验证。文章覆盖了配置文件解析、元素定位、数据驱动测试以及日志记录等方面,旨在帮助读者掌握数据驱动自动化测试的实现方法。
摘要由CSDN通过智能技术生成

前言

说到数据驱动自动化测试,你会不会有这样的疑问:数据怎么管理?数据怎么才能驱动测试用例执行?到底怎么样才算数据驱动?那么本篇文章就教你如何进行数据驱动测试,相信你一定能对数据驱动的自动化测试有一个不一样的理解,希望这篇文章能帮助还在懵懵懂懂的你了解数据驱动测试,如何来做数据驱动测试?那么就跟上我的脚步吧^_^

 

一、项目介绍

地址: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值