Selenuim自动化测试模型
本章内容:
- 概念介绍
- 自动化测试模型
一、概念
自动化测试库、框架、工具之间的区别:
- 库是由代码集合成的一个产品,供程序员调用,面向对象的代码组织形成的库叫类库,面向过程的代码组织形成的库叫函数库。
- 框架是为了解决一个互或一类问题而开发的产品,用户一般需要只需要使用框架提供的类或函数,即可实现全部功能。
- 工具与框架所做的事情类似,只是工具会有更高的抽象,屏蔽了底层的代码,一般会提供单独的操作界面供用户操作。
二、自动化测试模型
自动化测试模型可以看作自动化测试框架与工具设计思想的结合。随着自动化测试技术的发展,演化为以下几种模式:
- 线性测试
- 模块化驱动测试
- 数据驱动测试
- 关键字驱动测试
2.1 线性测试
代码按照操作步骤产生相应的线性脚本,每个测试脚本相对独立,且不产生其他依赖与调用。
例子:
需求:百度搜索设置修改为20条

实现代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'tian'
__data__ = '2020/4/15 14:24' import time from selenium import webdriver
from selenium.webdriver.support.select import Select #下拉框 driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com") #悬停操作也可以用点击
driver.find_element_by_link_text("设置").click()
time.sleep(2)
driver.find_element_by_link_text("搜索设置").click()
time.sleep(2)
driver.find_element_by_xpath("//input[@id='s1_2']").click() #选中不显示单选框
time.sleep(2)
sel = driver.find_element_by_xpath("//select[@id='nr']")
time.sleep(2)
Select(sel).select_by_value('') #设置结果为20
#保存设置
driver.find_element_by_xpath("//a[@class='prefpanelgo']").click()
#处理弹出弹窗
alert = driver.switch_to_alert()
#获取弹窗中的文本信息
print(alert.text)
#已经记录下您的使用偏好
alert.accept() #接受警告框
优势:每个脚本都是完整且独立的。所以,任何一个测试用例脚本都可以拿出来单独执行。
缺点:开发成本高、维护成本很高
2.2 模块化驱动测试
模块化测试把重复的操作独立成公共模块,当用例执行过程中需要用到这一模块操作时则被调用,这样就最大限度消除重复,从而提高测试用例的可维护性。
- 提高了开发效率,不用重复编写相同的操作脚本,例如:已经写好一个登录模块,后续其他地方只需调用;
- 简化了维护的复杂性,例如:登录按钮的定位发生了变化,那么只需修改登录模块的脚本即可;
例如:
s1.py
from selenium import webdriver
from model import Login
from time import sleep url ="http://www.126.com/"
driver = webdriver.Chrome()
driver.get(url) driver.implicitly_wait(10) driver.title
driver.current_url #调用登录
l = Login(driver) #创建对象
l.login() #调用登录方法
l.assert_login()#调用验证方法
l.logout()#调用退出方法
model.py
import time
class Login:
def __init__(self,driver):
self.driver = driver
def login(self):
driver = self.driver
username = self.user_name
password = self.pass_word
time.sleep(5)
print("登录页面titel,输入用户名和密码",driver.title)
print("登录页面url,输入用户名和密码",driver.current_url)
driver.switch_to_frame('x-URS-iframe')
driver.find_element_by_xpath("//input[@name='email']").clear()
driver.find_element_by_xpath("//input[@name='email']").send_keys("XXXOO") #输入账号
driver.find_element_by_xpath("//input[@name='password']").clear()
driver.find_element_by_xpath("//input[@name='password']").send_keys("123456")
driver.find_element_by_xpath("//*[@id='dologin']").click()
driver.switch_to_default_content() #退出表单
time.sleep(5)
def assert_login(self):
driver = self.driver
print("登录成功后",driver.title)
print("登录成功后",driver.current_url)
user_name = driver.find_element_by_xpath("//span[@id='spnUid']").text
print("登录成功后用户名:{0}".format(user_name))
def logout(self):
driver = self.driver
driver.close()
2.3 数据驱动测试
虽然模块化驱动测试很好地解决了脚本重复问题,但是自动化测试脚本在开发的过程中还是发现诸多不便
例如:测试不同用户登录,首先用的是“张三”的用户名登录,下一个测试用例要换成“李四”的用户名登录。在这种情况下,还是需要重复的编写登录脚本,因为虽然登录的步骤相同,但是登录所用的测试数据不同。
数据驱动直白点就是数据的参数化,因为输入数据的不同从而引起输出结果的不同;
不管读取的是定义的列表、字典、或者是外部文件(excel、csv、txt、xml等),都可以看作是数据驱动,它的目的就是实现数据与脚本的分离
例一:
s1.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Tian from selenium import webdriver
from model import Login
from time import sleep url ="http://www.126.com/"
driver = webdriver.Chrome()
driver.get(url) driver.implicitly_wait(10) driver.title
driver.current_url username ="test_tx"
password ="135781tian"
#调用登录
l = Login(driver,username,password)
l.login()
l.assert_login()
l.logout()
model.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Tian
import time class Login: def __init__(self,driver,user_name,pass_word): self.driver = driver
self.user_name = user_name
self.pass_word = pass_word def login(self):
driver = self.driver
username = self.user_name
password = self.pass_word
time.sleep(5)
print("登录页面titel,输入用户名和密码",driver.title)
print("登录页面url,输入用户名和密码",driver.current_url)
driver.switch_to_frame('x-URS-iframe') driver.find_element_by_xpath("//input[@name='email']").clear()
driver.find_element_by_xpath("//input[@name='email']").send_keys(username) #输入账号 driver.find_element_by_xpath("//input[@name='password']").clear()
driver.find_element_by_xpath("//input[@name='password']").send_keys(password) driver.find_element_by_xpath("//*[@id='dologin']").click()
driver.switch_to_default_content() #退出表单
time.sleep(5) def assert_login(self): driver = self.driver
print("登录成功后",driver.title)
print("登录成功后",driver.current_url) user_name = driver.find_element_by_xpath("//span[@id='spnUid']").text
print("登录成功后用户名:{0}".format(user_name)) def logout(self):
driver = self.driver
driver.close()
Selenuim自动化测试模型的更多相关文章
- Python+Selenium学习--自动化测试模型
前言 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块.自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试.数据驱动测试.对 ...
- 第6章 Selenium2-Java 自动化测试模型
6.1 自动化测试模型介绍 6.1.1 线性测试 :其实就是单纯地来模拟用户完整的操作场景. 优势就是每一个脚本都是完整且独立的: 缺陷测试用例的开发与维护成本很高. 6.1.2 模块化驱动 ...
- UI自动化测试模型
所谓的自动化测试模型,可以理解为自动化测试框架+工具设计的一种思想产物. 先说说库.框架.工具之间的区别: 库:英文名Library,由代码集成的一个产品,供用户调用.面向对象的库叫做类库,面向过程的 ...
- Selenium(十四):自动化测试模型介绍、模块化驱动测试案例、数据驱动测试案例
1. 自动化测试模型介绍 随着自动化测试技术的发展,演化为了集中模型:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试. 下面分别介绍这几种自动化测试模型的特点. 1.1 线性测试 通过录制或编 ...
- Selenium 2自动化测试实战25(自动化测试模型)
一.自动化测试模型 自动化测试模型介绍:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试 线性测试:每个测试脚本相对独立,且不产生其他依赖与调用,只是单纯的来模拟用户完整的操作场景.模块化驱动测 ...
- 腾讯大牛教你简单的自动化测试模型(Python+Selenium)
今天讲解简单的自动化测试模型,对于刚接触自动化测试的同学,由于没有编程语言的基础,是搞不懂代码里面的函数.封装.包以及其他概念,只是了解字符串.数组.元组及字典这种最基本的名词,更不懂自动化测试框架了 ...
- Python 自动化测试全攻略:五种自动化测试模型实战详解
随着移动互联网的发展,软件研发模型逐步完善,软件交付质量越来越受到软件公司的重视,软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用. 与传统的手工测试技术相比,自动化测试 ...
- 简单的自动化测试模型(python+selenium)
刚接触自动化测试,由于没有编程语言的基础,是搞不懂代码里面的函数.封装.包以及其他概念,只是了解字符串.数组.元组及字典这种最基本的名词,更不懂自动化测试框架了. ...
- 【Python-虫师】自动化测试模型--参数化
一.自动化测试代码最开始是线性的,后续发展为模块化代码,所以涉及到了函数和方法的引用. 1. 函数和方法的最主要区别: Python的方法中定义函数的时候,函数中必须写self.而单独定义函数的时候则 ...
随机推荐
- 大面积project.pbxproj冲突问题解决
在团队开发中,经常会有project.pbxproj的冲突出现. 所以我们添加过新的文件后,要及时的提交,养成好习惯.以免出问题. 但是总有一些时候忘记提交出现大面积的冲突,然后把==== <& ...
- 每日一练ACM 2019.0417
Problem Description 给定两个正整数,计算这两个数的最小公倍数. Input 输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数. Output 对于每个测试 ...
- MySQL平时记录笔记
零,mysql的安装 http://blog.csdn.net/mhmyqn/article/details/17043921 https://www.cnblogs.com/wangjunyan/p ...
- Unity使用代码动态给按钮赋值各个状态下的图片
一个小知识点,怕忘记,所以记录下.废话不多说,直接上代码: 未赋值之前: 使用下面代码赋值: using UnityEngine; using UnityEngine.UI; public class ...
- django安装及简单使用
1 web应用2 cs和bs架构3 http协议----重点 -特点:1 2 3 4 -请求头: 请求首行 get / http/1.1\r\n key:value\r\n key:value\r\n ...
- ppt演讲者模式
步骤如下: 1 win+p 2 选择扩展 3 选幻灯片放映 4 设置幻灯片放映 5 显示器二 6 勾选显示演示者视图
- POM文件详解(1)
POM文件详解 <project xmlns=http://maven.apache.org/POM/4.0.0 xmlns:xsi="http://www.w3.org/2001/X ...
- shell实例利用crontab自动清除日志
shell实例利用crontab自动清除日志 程序运行会产生很多的日志,对于无用的日志手动删除比价麻烦,写一个自动执行的命令是很有必要的. 删除文件shell命令 find 对应目录 -mtime + ...
- VS code的疑惑之处
作为一个新手,我充满疑惑 eg:下载了git但无法使用匹配 然后在各位博主的详细解释下知道 VS code更新后的git.path被格式化了: so需要进行路径覆盖. 在这之后我的终端依旧出现问题 ...
- MySQL下创建数据库以及授权用户
一.新建数据库 1.首先登录MySQL:(输入 mysql -u root -p 命令,然后输入密码按回车即可) 2.在mysql> 下输入如下命令,回车,即可创建数据库 (test为数据库名) ...