Selenium3+python自动化013-自动化数据驱动及模型介绍
一、查看当前运行的浏览等相关信息
driver=webdriver.Chrome()
print(driver.capabilities["version"]) #浏览器版本
print(driver.capabilities["platform"]) #浏览器运行平台
print(driver.capabilities["browserName"]) #浏览器名称
75.0.3770.100
Windows NT
chrome
二、自动化测试框架搭建篇:数据驱动测试
1.数据驱动概述
相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动。
实施数据驱动测试步骤如下:
(1)编写测试脚本,脚本需要支持从程序对象、文件或数据库读入测试数据
(2)将测试脚本使用的测试数据存入程序对象、文件或数据库等外部介质中
(3)运行脚本过程中,循环调用存储在外部介质中的测试数据
(4)验证所有的测试结果是否符合预期结果
# @Author:lsj
# @version V1.0
# -*- coding:UTF-8 -*- import unittest
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By # 打开浏览器
def openBroswer():
driver = webdriver.Chrome()
return driver
# 获取URL地址
def openUrl(driver, url):
driver.get(url)
driver.maximize_window() # 元素是否存在
def ele_is_presence(driver, tuple_arg):
return WebDriverWait(driver, 10).until(EC.presence_of_element_located(tuple_arg)) # 点击操作
def ele_click(driver, tuple_arg):
ele_is_presence(driver, tuple_arg).click() # 发送文本
def ele_sendKeys(driver, tuple_arg, keyword):
ele_is_presence(driver, tuple_arg).send_keys(keyword) # 检查登录结果
def checkResult(driver, loginfo):
try:
ele_is_presence(driver, loginfo)
print("登录状态验证通过!")
except:
print("登录失败!")
# 退出
def quitbrowser(driver):
sleep(2)
driver.quit() class Test_Login():
url = 'http://daxue.qysxy.com.cn/admin/static/front/html/login.html'
account = ['fuguang',"admin","fuguangl"]
pwd = ['','','']
c = ['', '','']
username = (By.NAME, "username") # 用户名输入框
password = (By.NAME, "password") # 密码输入框
code = (By.ID, "code") # 验证码输入框
loginbtn = (By.ID, 'loginBtn') # 登录按钮 # 实例化driver
driver = openBroswer()
# 打开url
openUrl(driver, url)
# 首页点击登录按钮
ele_click(driver, loginbtn) length = len(account)
# 输入用户名
for i in range(0, length):
#for j in range(0, length):
ele_sendKeys(driver, username, account[i])
# 输入密码
ele_sendKeys(driver, password, pwd[i])
# 输入验证码
ele_sendKeys(driver,code,c[i])
# 点击登录按钮
ele_click(driver, loginbtn)
sleep(3)
driver.refresh()
quitbrowser(driver) if __name__ == '__main__':
Test_Login()
简单的数据驱动设计模式
对上面的数据整理到一个文件中,如下所示,导入到Excel中
2.数据驱动单元测试的环境准备
2.1、openpyxl模块的安装:pip install openpyxl,验证方式如下:from openpyxl import load_workbook
没有报错证明安装成功。
2.2、注意openpyxl只能操作xlsx文件而不能操作xls文件
2.3、在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells
(1)Workbook就是一个excel工作表,如下操作
#打开一个xlsx文件
wb=load_workbook('test.xlsx')
(2)Sheet是工作表中的一张表页,如下有三种方式
#获取一张表(一)
# sheet1=wb.get_sheet_by_name('Sheet1')
#获取一张表(二)
# sheet1=wb['Sheet1']
#获取一张表(三)
sheet1=wb.worksheets[0]
(3)Cell就是简单的一个格
# @Author:lsj
# @version V1.0
# -*- coding:UTF-8 -*- from openpyxl import load_workbook #打开一个xlsx文件
wb=load_workbook('test_budaoguan.xlsx') #获取一张表(一)
# sheet1=wb.get_sheet_by_name('Sheet1')
#获取一张表(二)
# sheet1=wb['Sheet1']
#获取一张表(三)
sheet1=wb.worksheets[0]
# 打印sheet1
print(sheet1) #表格中输入内容,注意:当文件打开时,数据写不进去。
sheet1['A1']='TEST'
#保存(修改之后需要保存,否则修改无效)
wb.save('test_budaoguan.xlsx') 运行结果如下
#打印表名
print("表名:",sheet1.title)
#读取一整行(传入行号)
print("读取一整行:",sheet1[1])
#读取某一列
print("读取某一列:",sheet1['A'])
#读取某一格的值
print("读取某一格:",sheet1['A1'])
print("读取某一格的值:",sheet1['A1'].value) #获取最大行数
print("获取最大行数:",sheet1.max_row)
#获取最大列数
print("获取最大列数:",sheet1.max_column)
运行结果:
表名: Sheet2
读取一整行: (<Cell 'Sheet2'.A1>,)
读取某一列: (<Cell 'Sheet2'.A1>,)
读取某一格: <Cell 'Sheet2'.A1>
读取某一格的值: TEST
获取最大行数: 1
获取最大列数: 1
# 获取所有行
# print(sheet1.rows)
# 获取所有的列
# print(sheet1.columns)
3.使用Excel进行数据驱动测试
测试逻辑:
1.打开百度首页,从Excel文件中读取数据作为搜索关键词
2.在搜索输入框中输入读取出的搜索关键词
3.单击搜索按钮
4.断言搜索结果页面中是否出现Excel文件中提供的预期内容,包含则认为测试执行成功,否则认为失败
如下图所示:
# 获取所有行
print(sheet1.rows)
# 获取所有的列
print(sheet1.columns) # 遍历行
for row in sheet1.rows:
# 遍历行中是格
for cell in row:
print(cell.value,end='\t')
print()
print(20*'=')
# 遍历列
for column in sheet1.columns:
#遍历列中的格
for cell in column:
print(cell.value, end='\t')
print()
运行结果
<generator object Worksheet._cells_by_row at 0x000000000BA6BFC0>
<generator object Worksheet._cells_by_col at 0x000000000BA6BFC0>
序号 搜索词 期望结果
1 郎平 排球
2 李宁 体操
3 王楠 乒乓球
====================
序号 1 2 3
搜索词 郎平 李宁 王楠
期望结果 排球 体操 乒乓球
以上的方法封装到一个类中
# @Author:lsj
# @version V1.0
# -*- coding:UTF-8 -*- from openpyxl import load_workbook # 建立一个ExcelMethod类
class ExcelMethod():
def readExcel(self,filename):
self.filename = filename
# 创建一个大列表
excel_list = [] # # 创建一个小列表
# son_list = [] # 获取workbook对象
self.wb = load_workbook(self.filename)
# 获取第二个sheet表
self.sheet = self.wb.worksheets[3]
# 获取行
for row in self.sheet.rows:
# 为了避免son_list.append无限追加值,每次换行清空一次值
son_list = []
# 获得每一行的一列
for cell in row:
# 取出值
# print(cell.value)
# 把第一行里的内容按列表加入到son_list[]中
son_list.append(cell.value) # 把小列表加入到大列表里中
excel_list.append(son_list)
# 打印出列表
print(excel_list)
# 列表切片操作从取出1以后的列表
return excel_list[1:] if __name__== "__main__":
# ExcelMethod().readExcel("test_budaoguan.xlsx")
print(ExcelMethod().readExcel("test_budaoguan.xlsx"))
建立一个ExcelMethod类,读取excel文件
# @Author:lsj
# @version V1.0
# -*- coding:UTF-8 -*- import unittest
from selenium import webdriver
from qianyan.test_budaoguan.excel_method import ExcelMethod
from time import sleep class Excel_Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
# 调用浏览器
cls.driver = webdriver.Chrome()
# 输入url地址
cls.driver.get("http://daxue.qysxy.com.cn/admin/static/front/html/login.html")
# 页面最大化
cls.driver.maximize_window()
# 读取文件
cls.excelmethod = ExcelMethod()
cls.user_list = cls.excelmethod.readExcel("test_budaoguan.xlsx") # 测试方法
def test_search(self):
for i in range(0,len(self.user_list)):
# 获取元素位置,用户名输入框
username = self.driver.find_element_by_id("username")
# 获取元素位置,密码输入框
password = self.driver.find_element_by_id("password")
# 获取元素位置,验证码输入框
code = self.driver.find_element_by_id("code")
# 清空用户名输入框
username.clear()
password.clear() # 清空用户名输入框
code.clear() # 清空验证码输入框
# 填写用户名输入框,填写第一个列表中的第二个数据,为了让数据按顺序自动往下执行,加入for循环状态
username.send_keys(self.user_list[i][1])
password.send_keys(self.user_list[i][2])
code.send_keys(self.user_list[i][3])
sleep(1)
self.driver.find_element_by_id("loginBtn").click()
# # 出现弹框
# btn = self.driver.switch_to_alert()
# sleep(3)
# # 获取按钮上的文本
# print(btn.text)
sleep(3)
self.assertTrue(self.user_list[i][4] in self.driver.page_source)
# 打印页面源码
print(self.driver.page_source) @classmethod
def tearDownClass(cls):
cls.driver.quit() if __name__ == "__main__":
unittest.main()
建一个测试方法调取ExcelMethod类
Selenium3+python自动化013-自动化数据驱动及模型介绍的更多相关文章
- python 并发编程 多进程 生产者消费者模型介绍
一 生产者消费者模型介绍 为什么要使用生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务, 生产数据目的,是为了给消费者处理. 在并发编程中,如果生产者处理速度很快,而消费者处理 ...
- python+request接口自动化框架
python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...
- Python实现浏览器自动化操作
Python实现浏览器自动化操作 (2012-08-02 17:35:43) 转载▼ 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是 ...
- [转载]Python实现浏览器自动化操作
原文地址:Python实现浏览器自动化操作作者:rayment 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没 ...
- 从零学习基于Python的RobotFramework自动化
从零学习基于Python的RobotFramework自动化 一. Python基础 1) 版本差异 版本 编码 语法 其他 2.X ASCII try: raise Type ...
- 使用appium+python做UI自动化的demo
使用appium+python做UI自动化的demo 案例使用的知乎app,下载最新的知乎apk,存在了电脑上,只需要配置本机上app目录,不需要再配置appPackage和appActivity # ...
- Linux Shell输出颜色字符学习笔记(附Python脚本实现自动化定制生成)
齿轮发出咔嚓一声,向前进了一格.而一旦向前迈进,齿轮就不能倒退了.这就是世界的规则. 0x01背景 造了个轮子:御剑师傅的ipintervalmerge的Python版本.觉得打印的提示信息如果是普通 ...
- 如何利用python实现报表自动化?让你更高效的完成工作内容
如果能够实现报表自动化,那我们将节约不少的时间,更高效的完成工作内容.那么,如何利用python实现报表自动化呢?本文将介绍xlwt .xlrd.xlutils的常用功能,xlwt写Excel时公式的 ...
- 基于python的webUI自动化-小白基础篇
最近打算研究一下基于python的webUI自动化,先自学了一下相关基础知识,大概用了一个多月的时间,主要是找视频,一边看视频或者文档一边对照着敲代码运行. 重点强调:一定要一边看一边对照着敲代码运行 ...
随机推荐
- MS14-068提权和impacket工具包提权
ms14-068提权 工具利用 a)拿下边界机win7,并已经有win7上任意一个账号的密码 -u 用户名@域 -p 用户密码 -s 用户sid -d 域控 ms14-068.exe -u test3 ...
- Android项目实战(五十九):调试方法神器Hugo
先上GitHub地址:Hugo 一句话描述该框架,以Log的形式告诉我们某个方法传入的每一个参数以及返回值,以及调用的activity 时间 等其他信息 非常适用方便代码调试 引入框架: 根目录下的b ...
- LOJ #2877. 「JOISC 2014 Day2」交朋友 并查集+BFS
这种图论问题都挺考验小思维的. 首先,我们把从 $x$ 连出去两条边的都合并了. 然后再去合并从 $x$ 连出去一条原有边与一条新边的情况. 第一种情况直接枚举就行,第二种情况来一个多源 bfs 即可 ...
- Ubuntu-Server18.04开启无线网卡并配置静态ip
手里有一个笔记本快10年了,还是奔腾处理器,最近把它做成了Ubuntu-Server的系统,花了点时间折腾无线网卡,稍微记录一下,希望看见的人能少踩点坑. 1. 制作U盘启动工具,从Ubuntu官网下 ...
- matlab仿真随机数的产生
概率论和数理统计实验(matlab中实现) 一.伯努利分布 R=binornd(N,P); //N,P为二次分布的俩个参数,返回服从参数为N,P的二项分布的随机数,且N,P,R的形式相同. R=bin ...
- maven 3.6.3 安装及配置
1.下载 下载地址:http://maven.apache.org/download.cgi 2.配置环境变量 解压压缩包到磁盘. 注意:各种系统配置环境变量位置不一样,已windows10为例. 我 ...
- P2256 一中校运会之百米跑
----------------------- 题目链接:MIKU --------------------- 我现在发现找BUG的最好方法————喝水 喝一次找一个,喝两次A道题 --------- ...
- H5---禁止长按
以上行为可以总结成这几个(每个手机以及浏览器的表现形式不一样):长按图片保存.长按选择文字.长按链接/手机号/邮箱时呼出菜单. 想要禁止这些浏览器的默认行为,可以使用以下CSS: // 禁止长按图片保 ...
- linux下安装setuptools
wget https://pypi.python.org/packages/07/a0/11d3d76df54b9701c0f7bf23ea9b00c61c5e14eb7962bb29aed866a5 ...
- Quartz.NET - 教程 4: 更多关于触发器
译者注: 目录在这 [译]Quartz.NET 3.x 教程 译者注: 原文在这 Lesson 4: More About Triggers 跟作业一样, 触发器也相当容易使用, 但确实包含各种可定制 ...