目录

  • 自动化测试用例
  • 遵循原则
  • 自动化测试用例设计
  • 测试点转为测试用例的原则
    • 验证码自动化方法
  • 自动化测试模型
    • 线性测试
    • 模块化驱动测试
    • 数据驱动测试
      • 参数化的方式:
      • 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自动化相关推荐

  1. chrome 控制台信息获取 python_【python+selenium自动化】设置Chrome启动参数

    起因:直接用selenium的webdriver启动chrome,会弹出"Chrome正在受到自动软件的控制",并且窗口较小,是因为chrome没有加载任何配置 解决:点进sele ...

  2. python自动化办公都能做什么菜-python+selenium自动化(一)之环境搭建

    一.环境选择 python版本:python3.7(64位)下载地址:https://www.python.org/downloads/ (推荐使用官方下载) selenium版本:selenium3 ...

  3. Python+selenium 自动化-mac下安装配置chrome驱动方法

    我的 Python 版本有两个,先通过 which 看一下对应版本的位置. 然后找到 python 安装目录里的 bin 文件夹,把对应的驱动放里面就好了. 如果不知道怎么匹配对应 chrome 版本 ...

  4. Python+selenium 自动化-基本环境搭建,调用selenium库访问百度查询天气实例演示

    Python+selenium 自动化 第一章:基本环境搭建 ① 安装 selenium 库 ② 下载对应版本的浏览器驱动 ③ 调用百度查天气演示 第一章:基本环境搭建 ① 安装 selenium 库 ...

  5. Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示

    我们可以用 excel 来记录自动化,然后读取 excel 来执行命令,excel 可以很方便直观的管理我们录入的自动化.下面给大家演示一下 Python+selenium 自动化的实例,读取 exc ...

  6. 【Python selenium自动化环境配置】4步搞定ChromeDriver版本选择

    很多刚做自动化的小伙伴,会在ChromeDriver版本选择时犯难,看来大家都被坑过,真正掌握独门绝技,都不是难事儿. 看好了主要步骤就4部 1.确定谷歌浏览器版本 2.找到谷歌浏览器版本与Chrom ...

  7. Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”

    文章目录 一.模拟登录"中国铁路网12306 1.引入库 2.初始化 3.将点选验证码图片,通过人工打码,返回目标像素位置(json格式). 4.点选验证码位置得到后,需要鼠标左击进行模拟人 ...

  8. Python+selenium自动化八大元素定位方法及实例(超详细)

    目录 一.selenium模块中的find_element_by_id方法无法使用 二.Python+selenium自动化八大元素定位方法 使用场景: 1.通过id属性定位:driver.find_ ...

  9. php selenium模拟登陆,python+selenium自动化实战携带cookies模拟登陆微博

    首先获取cookies,使用手机扫码登录斗鱼,然后利用网页cookies保存在本地 有些同学可能会问,这不是相当于自己登录了吗,还模拟什么呢,其实来说这是一次获取cookies可以使用很久 #!/us ...

最新文章

  1. nodejs mysql 异步_Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步
  2. 鸿蒙系统增加了什么功能,华为再发新版鸿蒙OS系统!新增超级终端功能:可媲美iOS系统...
  3. oracle dbcontrol界面,oracle enterprise manager配置简介
  4. 数据库:悲观锁与乐观锁
  5. 【洛谷P3106】[USACO14OPEN]GPS的决斗Dueling GPS's
  6. [转]URLRewrite隐藏.aspx后缀名的应用(转载+延伸)
  7. 一篇讲清:数据采集与埋点
  8. mysql 8.0 集群_集群架构03·MySQL初识,mysql8.0环境安装,mysql多实例
  9. java安卓写文件路径,如何使用gradle作为构建系统,平台Android配置Protobuf(Java)文件的输出路径?...
  10. HTML+CSS+JS实现echarts图表炫光分布地图动画
  11. ListT转换为DataTable
  12. 记号(notation)的学习
  13. 人工智能、机器学习以及深度学习之间的联系是什么?
  14. 实际开发中的问题积累【积累】
  15. C语言大型程序的项目管理与实现
  16. linux 3.2.0 卸载,linux python3编译以及 卸载,python默认为python3 ,pip默认为pip3,亲测版...
  17. JAVA获取word书签内容_java操作word可操作书签
  18. matlab读写xlsx文件
  19. limits.conf文件_Limits.conf文件限制用户,在Linux中通过示例进行处理
  20. 服务器中“U”代表什么?1U、2U、3U、4U有多高?

热门文章

  1. 我所认识的BIMRevit
  2. 中科院自动化研究所急招!一次性个人奖励250万!提供免租公寓一套!
  3. 一人之下鸿蒙怎么得,一人之下:老农功是什么?不是炁体源流,不是神明灵,是一个人!...
  4. ##报错:DrawerLayout must be measured with MeasureSpec.EXACTLY. - 在使用ToolBar+DrawerLayout可能会报这个错误 - 1,
  5. iOS设计:绘图及性能
  6. docker容器rename改名字
  7. ad用户如何和计算机名对应,计算机加域和AD里相应对象的问题
  8. OpenCV 中cv2.threshold详解,(大白话版)
  9. 量化对冲策略在国内的实践历程
  10. 在这款任天堂游戏里,我发现了一部关卡设计的黄金教案