一、如下是用例格式,第一个sheet为用例汇总,后面的sheet为具体的用例步骤

sheet:测试用例

sheet:搜索

sheet:刘江博客验证

二、读取该excel文件取出关键字等信息,作为关键字的参数,通过反射机制传递给关键字方法去执行。

  关键字模块如下:ObjectMap.py

# coding:utf-8
from selenium.webdriver.support.ui import WebDriverWait # 获取单个页面元素对象
def get_element(driver, locationType, locatorExpression):
try:
element = WebDriverWait(driver, 3).until(lambda x:x.find_element(by=locationType,value = locatorExpression))
return element
except Exception, e:
raise e # 获取一组元素
def get_elements(driver , locationType, locatorExpression):
try:
elements = WebDriverWait(driver, 3).until(lambda x:x.find_elements(by=locationType,value=locatorExpression))
return elements
except Exception, e:
raise e # 由于关键字函数的参数个数不一样,所以通过传递动态参数*args实现传参,关键字方法
# 最多需要(driver , locationType, locatorExpression, operationValue)四个参数
def open_browser(driver, *args):
driver.get(args[2]) def input_string(driver, *args):
try:
WebDriverWait(driver, 3).until(lambda x: x.find_element(by=args[0], value=args[1])).send_keys(args[2])
except Exception:
raise def click(driver, *args):
WebDriverWait(driver, 3).until(lambda x: x.find_element(by=args[0], value=args[1])).click() def assert_equal(driver, *args):
try:
assert args[2] in driver.title
except AssertionError, e:
raise AssertionError(e)
except Exception, e:
raise e

三、测试用例执行模块

# coding:utf-8
from util import ObjectMap, ExcelUtil
import xlrd, xlwt
import time
from xlutils.copy import copy def run_test():
from selenium import webdriver
start_time = time.time()
# 读取excel中的关键字的值,定位方式的值,定位表达式,和操作值等参数值。然后将参数值传到对应关键字方法中
excelFile = xlrd.open_workbook(r"D:\KeyWordsFrameWork\testScripts\search.xlsx", formatting_info=True)
sheet0 = excelFile.sheet_by_index(0) # 获取第一个sheet页
# 循环第一个sheet页,其中每一行代表一条用例
for row0 in range(1, sheet0.nrows):
# 一定要在这个for循环里面再写一次excelFile,要不然执行多条用例时只会在最后一条用例写入结果
excelFile = xlrd.open_workbook(r"D:\KeyWordsFrameWork\testScripts\search.xlsx", formatting_info=True)
driver = webdriver.Chrome()
case_name = sheet0.row_values(row0)[3] # 获取用例对应的sheet页
sheet = excelFile.sheet_by_name(case_name) # 从第一个sheet中获取对应的用例名称找到对应的用例sheet
maxRows = sheet.nrows # 获取用例的最大行数,也就是步骤数
successfulSteps = 0 # 定义执行成功的步骤数
retDict = {} # 存放用例结果的字典 if sheet0.row_values(row0)[4] == 'y': # 只执行标记为y的用例
# print case_name
for row in range(1, maxRows): # 循环用例步骤
keyword = sheet.row_values(row)[2] # 读取关键字列
# print keyword
locationType = sheet.row_values(row)[3] # 获取定位方式
if locationType not in ['id','xpath','name']:
pass
locatorExpression = sheet.row_values(row)[4] # 获取定位表达式的值
operationValue = sheet.row_values(row)[5] # 获取操作值
# dir(ObjectMap)获取该模块的所有方法和变量
# print dir(ObjectMap)
# 遍历ObjectMap中的方法和属性,如果有名称一致的则通过反射调用对应方法执行关键字
for i in dir(ObjectMap):
if keyword == i:
# print i
# 要用到反射机制,通过函数名字符串调用对应方法:http://www.liujiangblog.com/course/python/48
if hasattr(ObjectMap, keyword):
# print '有这个方法'
func = getattr(ObjectMap, keyword)
try:
func(driver, locationType, locatorExpression, operationValue)
print '%s:execute OK' % keyword
# 执行每个关键字成功后,成功步数+1
successfulSteps += 1
except Exception:
print '%s:excute ERROR' % keyword
finally:
# 如果成功的步骤数等于用例的步骤数,则整条用例执行成功,写入执行结果
if successfulSteps == sheet.nrows - 1:
retDict['result'] = 'PASS'
print retDict['result']
end_time = time.time()
take_time = end_time - start_time
print take_time
# 向已经存在的excel中写入时,需要先copy,copy后sheet页获取sheet方法为get_sheet,与
# 原来的获取方法不一样
excleFileCopy = copy(excelFile)
case_sheet = excleFileCopy.get_sheet(0)
case_sheet.write(row0, 5, take_time)
case_sheet.write(row0, 6, retDict['result'])
# 写入后需要save
excleFileCopy.save(r"D:\KeyWordsFrameWork\testScripts\search.xlsx")
print 'pass write is ok'
else:
retDict['result'] = 'FAIL'
print retDict['result']
end_time = time.time()
take_time = end_time - start_time
print take_time
excleFileCopy = copy(excelFile)
case_sheet = excleFileCopy.get_sheet(0)
case_sheet.write(row0, 5, take_time)
case_sheet.write(row0, 6, retDict['result'])
excleFileCopy.save(r"D:\KeyWordsFrameWork\testScripts\search.xlsx")
print 'fail write is ok'
else:
raise Exception
driver.quit() if __name__ == '__main__':
run_test()

基于python+selenium的框架思路(二)的更多相关文章

  1. 基于python+selenium的框架思路

    设想: 1.使用excel编写用例第一个sheet页为用例概要格式如下: 后面的sheet页为具体的用例步骤: 实现所有定位信息都与测试代码分离 2.读取该excel文件取出关键字等信息,作为关键字的 ...

  2. web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

    基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  3. 基于python的接口测试框架设计(二)配置一些参数及文件

    基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里  毕竟导入的时候方便了一些 首先是url 图略 建 ...

  4. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  5. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  6. python+selenium+unnittest框架

    python+selenium+unnittest框架,以百度搜索为例,做了一个简单的框架,先看一下整个项目目录结构 我用的是pycharm工具,我觉得这个工具是天使,超好用也超好看! 这些要感谢原作 ...

  7. 一次简单完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试,手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文就基于python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化 ...

  8. 基于python的接口测试框架设计(三)接口测试的框架

    基于python的接口测试框架设计(三)接口测试的框架 其实我这里用到的是unittest单元测试框架,,这个框架好就好在比较清楚,,setup terdown都可以处理一些初始化及完成后的工作 主要 ...

  9. 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码

    引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...

随机推荐

  1. Linux 下VI文件乱码解决

    linux在vi 模式查看文件会有乱码问题 如图: 怎么解决呢? 在vi中输入冒号 然后执行下面的命令 如果系统编码不是utf8,vi看uft8编码文件时这样用:set termencoding=ut ...

  2. 如何有效地学习《空中英语教室》&《彭蒙惠英语》

    读者定位: <大家说英语>是学习美式口语入门书,内容全部是情境会话,定位为“初级美式生活会话”. <空中英语教室>以浅显英语提供从新闻.旅游到时尚等流行话题,丰富会话材料,定位 ...

  3. 当一个项目中同时存在webroot和webcontext时

    当一个项目中同时存在webroot和webcontext时,注意一定要删除那些没在使用的.还有要发布其中一个想要的目录到服务器中,具体方法是  选择相应工程-----properties-----de ...

  4. webService 入门级

    1,建立一个项目名为Trans,web项目,普通java项目都可以!这里我们就以简单的java应用程序来作为示范吧! 1.1在建立一个方法属于com.shu.function.Function类: / ...

  5. SPI子系统分析之一:框架

    内核版本:3.9.5 SPI子系统概述: 一个SPI主控制器对应一条SPI总线,当然在系统中有唯一的总线编号. SPI总线上有两类设备: 其一是主控端,通常作为SOC系统的一个子模块出现,很多嵌入式M ...

  6. input子系统分析之三:驱动模块

    内核版本:3.9.5 本节将以even handler来分析设备的注册和打开的过程,分析之前不妨回顾一下上节介绍的数据结构. 结合前两节分析可知,input子系统分为3层,最上一层是event han ...

  7. Makefile里面打印信息

    Makefile的规则相对来说还是比较复杂的,上手不容易,没有系统研究过,往往搞不清楚状况.如果掌握了基本的调试手段,那对我们写出正确的Makefile会非常有帮助.而在Makefile中,最重要的调 ...

  8. 用css实现文本不换行切超出限制时显示省略号(小tips)

    div{ max-width: 500px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;/*文本不换行*/ } 如上 ...

  9. markdown转HTML,目录生成

    1.首先,准备好已经编辑好的markdown文件放到指定目录下. 2.下载node.js,下载地址:https://nodejs.org/en/download/ 3.下载好node.js文件后,配置 ...

  10. 146. LRU Cache (List, HashTable)

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...