介绍:框架采用excel驱动unittest 完成ui自动化测试

安装python、selenium的方法就不说了,网上一大把,直接进入正题

1.data数据源:

动作:封装selenium各种动作

定位类型:定位元素的方式

定位值:与定位类型匹配使用

输入值:与动作匹配使用

2.变量文件

为了数据后期更好维护,用一个csv文件放置变量

casedata中可直接引用变量值(采用jmeter变量思想)

3.框架介绍

  配置文件:config.conf

#运行模式
[mode]mode = normal#normal模式下各个文件路径
[normal]file = ./data/客户端.xlsxsheet = BB电子var_file = ./data/变量.csv

  读取excel文件:excelutil

#-*- coding:utf-8 -*-
import xlrd
import json
import csv
import re
import config
from pylog import Pylog
'''获取测试数据'''class ExcelUtil:def __init__(self,file,sheetname):self.sheetname = sheetnameself.dataSheet = xlrd.open_workbook(file).sheet_by_name(sheetname)# get titlesself.row = self.dataSheet.row_values(0)# get rows numberself.rowNum = self.dataSheet.nrows# get columns numberself.colNum = self.dataSheet.ncols# the current columnself.curRowNo = 1#获取用例数据def get_excel(self):var_file = config.get_config("normal","var_file")r = []while self.hasNext():s = {}col = self.dataSheet.row_values(self.curRowNo)i = self.colNumfor x in range(i):s[self.row[x]] = col[x]#重置用例名称s["用例No"] = self.sheetname + str(s["用例No"])#引入变量if s["输入值"][:2] == "${":var = re.findall('{(.*)}', s["输入值"], re.S)[0]vars = self.get_var(var=var,var_file=var_file)s["输入值"] = vars#引入其他用例集try:if s["动作"] == "引入":file = './data/'+json.loads(s["输入值"])["file"]sheet = json.loads(s["输入值"])["sheet"]aimslist = ExcelUtil(file=file,sheetname=sheet).get_excel()r.extend(aimslist)else:r.append(s)except Exception as e :Pylog.error("引入用例错误..." + str(e) + "|"+ s["输入值"])self.curRowNo += 1return r#遍历def hasNext(self):if self.rowNum == 0 or self.rowNum <= self.curRowNo:return Falseelse:return True#获取变量def get_var(self,var="all_vars",var_file=None):dic = {}try:with open(var_file,'r') as file:reader = csv.reader(file)for row in reader:dic[row[0]] = row[1]if var == "all_vars":return dicreturn dic[var]except Exception as e :Pylog.error("读取变量错误:"+str(e))

  日志文件:pylog

import logging
import timeclass Pylog:def __init__(self):##############################日志配置############################################################logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',# filename="./log/"+ time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+".log",filename="./Report/test.log",filemode='w')console = logging.StreamHandler()console.setLevel(logging.INFO)formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')console.setFormatter(formatter)logging.getLogger('').addHandler(console)###################################################################################################
@staticmethoddef info(data = None):logging.info(data)@staticmethoddef debug(data = None):logging.debug(data)@staticmethoddef error(data = None):logging.error(data)@staticmethoddef warning(data = None):logging.warning(data)

  获取测试数据:

import config
from pylog import Pylog
from excelutil import ExcelUtil
import jsonclass Predata:def __init__(self):passdef get_data(self):datalist = []mode = config.get_config("mode", "mode")file = config.get_config("normal","file")sheet = config.get_config("normal","sheet")if mode == "normal":datalist = self.get_exceldata(file,sheet)return datalistdef get_exceldata(self,file,sheet):datalist =  ExcelUtil(file,sheet).get_excel()n = 0for item in datalist:item["用例No"] = str(10000+n) + item["用例No"]n += 1return datalist

  单元测试部分:

import unittest
import config
import ddtSelenium
import time
from pylog import Pylog
from action import Action
from predata import Predata@ddtSelenium.ddt
class Case(unittest.TestCase):@classmethoddef setUpClass(cls):cls.action = Action()#进入浏览器设置# options = cls.action.driver.webdriver.ChromeOptions()# options.add_argument()
@classmethoddef tearDownClass(cls):time.sleep(3)# cls.action.driver.close()
@ddtSelenium.data(*Predata().get_data())def testcase(self, data):Pylog.info(str(data[list(data.keys())[0]]) + "开始")if data["动作"] == "等待":time.sleep(int(data["输入值"]))else:text = self.action.pre_do(data)if data["动作"] == "断言":Pylog.info("断言:"+ str(data[list(data.keys())[0]]))if text != data["输入值"]:Pylog.info("断言截图:" + str(data[list(data.keys())[0]]))self.action.driver.save_png('./Report/'+data['用例No']+'.jpg')self.assertEqual(text, data["输入值"])

  action部分:(pyse引用虫师封装py)

from pylog import Pylog
from pyse import Pyse
import os
import config
from predata import Predataclass Action:def __init__(self):self.driver = Pyse("chrome")def pre_do(self,data):if config.get_config("mode","mode") == "normal":return self.do_action(data)def do_action(self,data):try:if data["动作"] == "断言":text = self.driver.get_element(data["定位类型"] + '=>' + data["定位值"]).textreturn textif data["动作"] == "打开":self.driver.open(data["输入值"])if data["动作"] == "点击":self.driver.click(data["定位类型"] + '=>' + data["定位值"])if data["动作"] == "清除":self.driver.clear(data["定位类型"] + '=>' + data["定位值"])# if data["动作"] == "等待":#     self.driver.wait(int(data["输入值"]))if data["动作"] == "输入":self.driver.type(data["定位类型"] + '=>' + data["定位值"],data["输入值"])if data["动作"] == "滚动条下拉":self.driver.js( "var q=document.body.scrollTop="+data["输入值"]+";")if data["动作"] == "等待元素":self.driver.element_wait(data["定位类型"] + '=>' + data["定位值"],10)if data["动作"] == "最大化":self.driver.max_window()if data["动作"] == "关闭浏览器":self.driver.close()if data["动作"] == "外调程序":os.system(data["输入值"])except Exception as e :Pylog.error("异常截图-"+data["动作"]+str(e))self.driver.save_png('./Report/'+data['用例No']+'.jpg')

 框架源码:https://github.com/Acguo

转载于:https://www.cnblogs.com/victor123/p/7122720.html

selenium+python3+excel测试框架相关推荐

  1. python数据驱动测试设计_GitHub - 13691579846/DataDriverTestFrameWork: python+selenium+pageobject数据驱动测试框架...

    DataDriverTestFrameWork 一.说明 ``本实例为数据驱动测试框架搭建实践`` 二.框架分析 注意!注意!注意!重要的示请说3遍,本项目只用于学习使用,为了你能够成功执行本项目 e ...

  2. 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?...

    本人自动化测试接触时间不久,如有误导,概不负责. 既然有了selenium这个开源的自动化的工具,为什么还要我们自己再去写一个框架? Selenium是自动化的工具,当然是可以用在测试领域,但他不是为 ...

  3. selenium+ant+testng测试框架简单介绍

    为什么80%的码农都做不了架构师?>>>    转载于:https://my.oschina.net/qyxa/blog/264076

  4. python数据驱动读取用例_Python Selenium 之数据驱动测试

    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...

  5. python3.7界面设计_基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架

    前端自动化测试框架 项目说明 本框架是一套基于selenium+Python3.7+yaml+Robot Framework而设计的数据驱动UI自动化测试框架,Robot Framework 作为执行 ...

  6. 2020 可替代Selenium的测试框架Top15

    Selenium是一种开源自动测试工具.它可以跨不同的浏览器和平台在Web应用程序上执行功能,回归,负载测试.Selenium是最好的工具之一,但确实有一些缺点. 业界有一些强大的工具可以替代Sele ...

  7. 【测试框架】除了Selenium你还知道啥?

    Selenium是一种开源自动测试工具.它可以跨不同的浏览器和平台在Web应用程序上执行功能,回归,负载测试.Selenium是最好的工具之一,但确实有一些缺点. 业界有一些强大的工具可以替代Sele ...

  8. (上)python3 selenium3 从框架实现代码学习selenium让你事半功倍

    本文感谢以下文档或说明提供的参考. Selenium-Python中文文档 Selenium Documentation Webdriver 参考 如有错误欢迎在评论区指出,作者将即时更改. 环境说明 ...

  9. 开源测试框架-UI自动化测试工具Selenium的安装与常用操作-Java语言

    为什么选择Selenium作为测试工具: 开源免费 容易与单元测试框架结合 代码可自主掌握,对于搭建框架,平台等有不可替代的优势 ​ Selenium也是一个用于Web应用程序测试的工具,支持多平台, ...

  10. Selenium 测试框架批量注册

    Selenium 测试框架 先打开cmd下载Selenium : pip install -i https://pypi.douban.com/simple selenium 如果是用cmd 下载的: ...

最新文章

  1. 使用 CommandBuilder 生成命令 (ADO.NET)
  2. 开始报名丨CCF C³-05@亚马逊云科技:未来云计算之旅
  3. 炒股Java_基于java计算买卖股票的最佳时机
  4. opencv 霍夫曼变换 直线提取
  5. 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包
  6. navicat使用触发器
  7. java 开发注意项_JAVA开发注意事项集锦
  8. java number string_java基础系列(一):Number,Character和String类及操作
  9. 升级了 Windows 11 正式版,有坑吗?
  10. solarwinds ipam功能说明手册
  11. 【算法】剑指 Offer 48. 最长不含重复字符的子字符串
  12. 如何给自己的电脑硬盘分区
  13. matlab求两点的距离,matlab求两点间距离
  14. [RK3399][Android7.1] 调试笔记 --- 播放音乐没有声音
  15. C++函数模板(模板函数)详解
  16. c++实现吃豆子游戏
  17. 2019年下半年程序员考试上午真题自我汇总
  18. java通过Jsoup爬取下载抖音无水印视频(下载单个抖音视频)
  19. 进bios快捷键集合
  20. 微信小程序万里目_微信小程序加盟千万别忘了几个基本要求

热门文章

  1. 空巢青年,“空巢”是选择还是无奈? | 数据告诉你
  2. 润乾报表连接mysql_润乾报表与DERBY数据库的创建连接详解
  3. spark如何进行聚类可视化_利用spark做文本聚类分析
  4. 吴恩达(Andrew Ng)——机器学习笔记1
  5. Mongodb 3.2 Manual阅读笔记:CH9 存储
  6. 一个很简单的例子,从汇编层次理解函数调用
  7. .net zero power toole 破解日志
  8. keepalived vrrp_script脚本不执行解决办法
  9. BZOJ2038:[2009国家集训队]小Z的袜子——题解
  10. SQL Server 2012入门T-SQL基础篇:(7)Where子句与Having子句的区别