web自动化--python+selenium自动化
目录
- 自动化测试用例
- 遵循原则
- 自动化测试用例设计
- 测试点转为测试用例的原则
- 验证码自动化方法
- 自动化测试模型
- 线性测试
- 模块化驱动测试
- 数据驱动测试
- 参数化的方式:
- CSV文件
- Excel文件
- 关键字驱动测试
- 检查点
- 自动化项目格式
自动化测试用例
自动化测试用例一般可以由手工测试用例转化来,但是不是所有的手工测试用例都要转化为自动化测试用例
- 考虑到脚本开发的成本,不要选择流程太复杂的用例,如果必要,可以把流程差分为多个用例来实现脚本。
- 选择的用例最好可以构建成场景,如一个功能模块,分成多个用例,多个用例使用同一个场景
- 重复执行,繁琐的部分,如字段验证,提示信息验证等,适用于回归测试
- 选取的用例可以是主体流程,适用于冒烟测试
遵循原则
- 一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器
- 一个用例只验证一个功能点,不要在用户登录后把所有功能验证一遍
- 尽可能少的编写逆向测试用例,一方面因为逆向逻辑的用例很多,二是复杂的实现起来麻烦易出错
- 用例之间尽量避免产生依赖
- 一条用例完成测试后需要对测试场景进行还原,以免影响其他用例的执行
自动化测试用例设计
测试点转为测试用例的原则
- 设计一条正向用例,覆盖足够多的有效等价类数据
- 设计一条反向用例,需要覆盖一条无效等价类数据,其他数据一概使用正向数据
验证码自动化方法
- 开发暂时屏蔽验证吗,使用万能吗
- 机器学习训练样本
- 调用OCR接口,解析图片中的验证码
自动化测试模型
线性测试
- 最基本的代码组织形式,单纯的模拟用户步骤或场景
- 维护性差
- 模块多,运行复杂,可以写在一个主运行模块中
- 所有用例步骤放在一个模块中,可读性差
from selenium import webdriver
import time
#获取qq邮箱的url
driver=webdriver.Firefox()
driver.get("http://mail.qq.com")
time.sleep(1)
#切换到内部frame
frm = driver.find_element_by_id("login_frame")
driver.switch_to.frame(frm)
#输入用户名密码点击登录
driver.find_element_by_id("u").send_keys("919917003")
driver.find_element_by_id("p").send_keys("**********")
driver.find_element_by_xpath('//*[@id="login_button"]').click()
模块化驱动测试
把重复的操作独立成公共模块,当用例执行过程中需要用到这一模块则被调用
from selenium import webdriver
import time
class mt():
#初始化qq pwddef __init__(self,qq,password):self.driver = webdriver.Firefox()self.qq = qqself.password = passwordtime.sleep(1)]#登录def login(self):self.driver.get("http://mail.qq.com")self.driver.switch_to.frame(self.driver.find_element_by_id("login_frame"))self.driver.find_element_by_id("u").send_keys(self.qq)self.driver.find_element_by_id("p").send_keys(self.password)time.sleep(1)self.driver.find_element_by_xpath('//*[@id="login_button"]').click()time.sleep(1)#点击写信def write(self):self.driver.find_element_by_xpath('//*[@id="composebtn"]').click()time.sleep(1)#点击右上角退出登录def exit(self):self.driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/div[1]/div[1]/div[1]/a[3]').click()time.sleep(1)#关闭所有网页def quit(self):self.driver.quit()
if __name__ == "__main__":a = mt('1103007486','123456')a.login()
其他模块化:
数据库操作
邮件模块
写日志模块
写测试日志模块
import os
import timep_file = os.path.dirname(__file__)#当前文件所在文件夹
path = p_file+'\logtext'def logText(filename,casename,info):file = '/test_'+time.strftime('%Y%m%d')+'.txt'print(file)with open(path+file,'a') as stream:t = time.strftime('%Y%m%d')stream.write(t+'--'+filename+'--'+casename+'--'+info+'\n')if __name__ == "__main__":logText('aaa','bbb','ccc')
数据驱动测试
数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变,数据的参数化
参数化的方式:
- 列表、字典
- 数据量小,个数少的时候比较有效率
- 定义一个列表、字典,把数据存进去,然后调用
- CSV、EXCEL
- 数据量较大,使用频率不高
- 写在外部文件中,调用
- 数据库
通过数据库读写模块直接获取 - 配置文件
数据库连接,数据库主机地址,用户名,密码,端口等
CSV文件
- 把EXCEL表格中填写数据,保存为CSV格式
- 在python中导入CSV包 import csv
- 打开文件 with open
- 读取数据 csv.reader()
- 遍历数据 for循环遍历
import csv
from selenium import webdriver
import os
import time
path = os.path.dirname(__file__)+r'\logtext\csvT.csv'
with open(path,"r") as stream:data = csv.reader(stream)print(data)#<_csv.reader object at 0x000001FE00453E80>for d in data:driver = webdriver.Firefox()driver.get("http://mail.qq.com")time.sleep(1)frm = driver.find_element_by_id("login_frame")driver.switch_to.frame(frm)driver.find_element_by_id("u").send_keys(d[0])driver.find_element_by_id("p").send_keys(d[1])time.sleep(1)driver.find_element_by_xpath('//*[@id="login_button"]').click()time.sleep(1)driver.quit()
Excel文件
- 安装 xlrd
- 导包 import xlrd
- 打开文件 xlrd.open_workbook()
- 读取一个sheet页
- Date.sheets()读取全部sheet
- Date.sheet_by_name(名)通过sheet名读取
- 读取一行、一列
Table.row_value(行数) col_value(列数) - 读取行数、列数
Table.nrows ncols - 读取单元格数据
Table.cell(行,列).value - 遍历数据
import xlrd
date = xlrd.open_workbook_xls(r'./logtext/excelt.xls')
#读取第1个工作表
table = date.sheets()[0]
#读取名为sheet1的表
#table = date.sheet_by_name("Sheet1")
#读取第一行
rw1 = table.row_values(0)
#读取行数
rws = table.nrows
#读取第一列
col1 = table.col_values(0)
#读取列数
cols = table.ncols
#读取第1行第2列的数据
celvlu = table.cell(0,1).value
print(rw1,rws,col1,cols,celvlu)
#遍历所有行的数据
for i in range(rws):print(table.row_values(i))
关键字驱动测试
通过关键字的改变引起测试结果的改变(IDE ,KATALON 等)
Target commend value
可以自行编写关键字驱动的方法和类
from selenium import webdriver
import timeclass mkt():def __init__(self):self.driver = webdriver.Firefox()# 打开网站def open_url(self):self.driver.get("http://mail.qq.com")time.sleep(1)# 输入QQdef input_qq(self,qq):self.driver.switch_to.frame(self.driver.find_element_by_id("login_frame"))self.driver.find_element_by_id("u").send_keys(qq)time.sleep(1)#输入密码def input_pwd(self,password):self.driver.find_element_by_id("p").send_keys(password)time.sleep(1)#点击登录def click_btn(self):self.driver.find_element_by_xpath('//*[@id="login_button"]').click()time.sleep(1)def assert_url(self):expU = 'https://mail.qq.com/cgi-bin/frame_html?sid=_gQlbOL-JpiDAUAh&r=e6ae6c1ec470b2206c3c0dfdbd9a625f'actU =self.driver.current_urlassert actU == expUif __name__ == "__main__":a = mkt()a.open_url()a.input_qq('3547840985')a.input_pwd('123456')a.click_btn()a.assert_url()
检查点
通过判断语言或框架中的断言和验证方法来实现,如判断登录是否成功等
自动化项目格式
web自动化--python+selenium自动化相关推荐
- chrome 控制台信息获取 python_【python+selenium自动化】设置Chrome启动参数
起因:直接用selenium的webdriver启动chrome,会弹出"Chrome正在受到自动软件的控制",并且窗口较小,是因为chrome没有加载任何配置 解决:点进sele ...
- python自动化办公都能做什么菜-python+selenium自动化(一)之环境搭建
一.环境选择 python版本:python3.7(64位)下载地址:https://www.python.org/downloads/ (推荐使用官方下载) selenium版本:selenium3 ...
- Python+selenium 自动化-mac下安装配置chrome驱动方法
我的 Python 版本有两个,先通过 which 看一下对应版本的位置. 然后找到 python 安装目录里的 bin 文件夹,把对应的驱动放里面就好了. 如果不知道怎么匹配对应 chrome 版本 ...
- Python+selenium 自动化-基本环境搭建,调用selenium库访问百度查询天气实例演示
Python+selenium 自动化 第一章:基本环境搭建 ① 安装 selenium 库 ② 下载对应版本的浏览器驱动 ③ 调用百度查天气演示 第一章:基本环境搭建 ① 安装 selenium 库 ...
- Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示
我们可以用 excel 来记录自动化,然后读取 excel 来执行命令,excel 可以很方便直观的管理我们录入的自动化.下面给大家演示一下 Python+selenium 自动化的实例,读取 exc ...
- 【Python selenium自动化环境配置】4步搞定ChromeDriver版本选择
很多刚做自动化的小伙伴,会在ChromeDriver版本选择时犯难,看来大家都被坑过,真正掌握独门绝技,都不是难事儿. 看好了主要步骤就4部 1.确定谷歌浏览器版本 2.找到谷歌浏览器版本与Chrom ...
- Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”
文章目录 一.模拟登录"中国铁路网12306 1.引入库 2.初始化 3.将点选验证码图片,通过人工打码,返回目标像素位置(json格式). 4.点选验证码位置得到后,需要鼠标左击进行模拟人 ...
- Python+selenium自动化八大元素定位方法及实例(超详细)
目录 一.selenium模块中的find_element_by_id方法无法使用 二.Python+selenium自动化八大元素定位方法 使用场景: 1.通过id属性定位:driver.find_ ...
- php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博
首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...
最新文章
- nodejs mysql 异步_Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步
- 鸿蒙系统增加了什么功能,华为再发新版鸿蒙OS系统!新增超级终端功能:可媲美iOS系统...
- oracle dbcontrol界面,oracle enterprise manager配置简介
- 数据库:悲观锁与乐观锁
- 【洛谷P3106】[USACO14OPEN]GPS的决斗Dueling GPS's
- [转]URLRewrite隐藏.aspx后缀名的应用(转载+延伸)
- 一篇讲清:数据采集与埋点
- mysql 8.0 集群_集群架构03·MySQL初识,mysql8.0环境安装,mysql多实例
- java安卓写文件路径,如何使用gradle作为构建系统,平台Android配置Protobuf(Java)文件的输出路径?...
- HTML+CSS+JS实现echarts图表炫光分布地图动画
- ListT转换为DataTable
- 记号(notation)的学习
- 人工智能、机器学习以及深度学习之间的联系是什么?
- 实际开发中的问题积累【积累】
- C语言大型程序的项目管理与实现
- linux 3.2.0 卸载,linux python3编译以及 卸载,python默认为python3 ,pip默认为pip3,亲测版...
- JAVA获取word书签内容_java操作word可操作书签
- matlab读写xlsx文件
- limits.conf文件_Limits.conf文件限制用户,在Linux中通过示例进行处理
- 服务器中“U”代表什么?1U、2U、3U、4U有多高?
热门文章
- 我所认识的BIMRevit
- 中科院自动化研究所急招!一次性个人奖励250万!提供免租公寓一套!
- 一人之下鸿蒙怎么得,一人之下:老农功是什么?不是炁体源流,不是神明灵,是一个人!...
- ##报错:DrawerLayout must be measured with MeasureSpec.EXACTLY. - 在使用ToolBar+DrawerLayout可能会报这个错误 - 1,
- iOS设计:绘图及性能
- docker容器rename改名字
- ad用户如何和计算机名对应,计算机加域和AD里相应对象的问题
- OpenCV 中cv2.threshold详解,(大白话版)
- 量化对冲策略在国内的实践历程
- 在这款任天堂游戏里,我发现了一部关卡设计的黄金教案