Selenium模块化
概述
高内聚低耦合是软件设计的一个基本原则。
- 内聚:从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。
- 耦合:各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据,模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
自动化测试模型也遵循上面的原则,下面从本人熟悉自动化测试的过程中来了解一下。
线性测试
先看两组脚本内容,实际应用过程中以百度进行示例
脚本1
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
#打开浏览器
driver = webdriver.Ie()
driver.get('http://www.baidu.com')
#定位到搜索输入框,并输入内容查询
input=driver.find_element_by_id('kw')
input.send_keys('test')
input.send_keys(Keys.ENTER)
#退出浏览器
driver.quit()
脚本2
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
#打开浏览器
driver = webdriver.Ie()
driver.get('http://www.baidu.com')
#定位到搜索输入框,并输入内容查询
input=driver.find_element_by_id('kw')
input.send_keys('selenium')
input.send_keys(Keys.ENTER)
#退出浏览器
driver.quit()
上面脚本1和脚本2的功能一致,区别在于,脚本1打开Ie搜索centerm,脚本2打开Ie搜索selenium。
通过上面的图中的脚本,我们发现它优势就是每一个脚本都是独立的,任何一个脚本文件拿出来就能单独运行;
但一个用例对应一个脚本,假如搜索页面发生变化,输入框的属性发生改变,不得不需要对每一个脚本进行修改,当测试用例规模较大时,可以预见大量的工作用于脚本的维护,从而失去自动化的意义,这种模式下脚本的没有可重复使用的概念。
模块化处理
模块化处理:即将常用的可复用的部分功能独立出来,变成一个公共函数,当其他地方有需要用到的时候,就调用,大大降低维护成本。
从上面的两个脚本分析,可以将搜索部分作为一个公共模块,将搜索的内容作为一个参数来传递,经过改造,脚本如下:
脚本1:
def search(text):
#打开浏览器
driver = webdriver.Ie()
driver.get('http://www.baidu.com')
#定位到搜索输入框,并输入内容查询
input=driver.find_element_by_id('kw')
input.send_keys(text)
input.send_keys(Keys.ENTER)
#退出浏览器
driver.quit()
if __name__ == '__main__':
#定义要搜索的函数
text="selenium"
#调用search函数,进行搜索
search(text)
第一个脚本是将搜索功能作为一个公共模块,编写了一个函数,第二个脚本则是进行调用,这个如果搜索的数值发生变化,只需要修改第二个函数即可,不影响第一个脚本。
参数化
从上述改造后的脚本可以看出,已经节省了很大部分投入,但是在测试搜索功能的时候,不可能每一次测试都修改代码,再执行,这样也不能达到自动化的程度,所以引入了参数化的概念。
数据驱动应该是自动化的一个进步;从它的本意来讲,数据的改变(更新)驱动自动化的执行,从而引起测试结果的改变。这显然是一个非常“高级”的概念和想法。其实,我们可以直白的理解成参数化,输入数据的不同从而引起输出结果的变化。
对于后期维护来讲,完全不用更改测试代码,只需要维护参数化的数据表即可,一般参数化采用外部文件调用的方法
参考资料
http://www.cnblogs.com/jackei/archive/2012/11/25/2787231.html
http://www.cnblogs.com/jackei/archive/2012/11/25/2787231.html
Selenium模块化的更多相关文章
- selenium+python(模块化驱动测试)
模块化驱动测试,就是借鉴编程语言中模块化的思想,把重复的操作独立成功公告模块,懂用例执行过程中需要用到这一模块操作时则被调用,这样可以极大的消除重复从而提高测试用例的可维护性 下面具体以126邮箱为例 ...
- Selenium(十四):自动化测试模型介绍、模块化驱动测试案例、数据驱动测试案例
1. 自动化测试模型介绍 随着自动化测试技术的发展,演化为了集中模型:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试. 下面分别介绍这几种自动化测试模型的特点. 1.1 线性测试 通过录制或编 ...
- Selenium(八)测试用例的设计与模块化
一.设计测试用例 1.分析我之前写的登录脚本: from selenium import webdriver import time from selenium.webdriver.common.ac ...
- selenium基础(脚本模块化)
selenium基础(脚本模块化)
- selenium+Python 将登录模块化
公共模块化:(登录) login.py from selenium import webdriver from time import sleep class login(): def u ...
- Python+Selenium 自动化实现实例-模块化调用
public 目录存一些公共模块,供用例调用.login.py 内容如下: # coding=utf-8 import time # login def login(driver): driver.f ...
- Python3.5+selenium(11)脚本模块化&参数化
mail126.py脚本如下 from selenium import webdriver from time import sleep from model1 import Login driver ...
- python selenium与自动化
大学是学习过java,但是工作中没用,忘完了,而且哪怕以后有了机会,就是很不愿意去学这个语言,开始喜欢上了c#,但是随着学的升入,感觉.net太庞大了,要学习那么多,总感觉我学这个要做什么,感觉要做的 ...
- 自动化selenium开发
一.开发环境搭建 1.Firefox浏览器 1.1 下载firefix并安装. 1.2 Firefox中打开"开始菜单“ -> ”开发者“ -> ”获取更多工具“ -> 搜 ...
随机推荐
- php随机函数
<?php function generate_password( $length = 6 ) { // 密码字符集,可任意添加你需要的字符 // $chars = 'abcdefghijklm ...
- UITableView使用总结和性能优化
UITableView使用总结和性能优化 UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped.如 果我们查看UITabl ...
- Jenkins动态部署方案
在之前一个项目开发中使用到了jenkins自动化测试,根据实际应用,简单整理了其部署方案. 1.部署 2.项目构建 3.重部署 1 部署 登录Jenkins应用管理界面 1)选中一个服务器上已在jen ...
- PHP冒泡排序,选择排序,插入排序
1 冒泡排序是两个元素相互比较,找到最小值,然后冒泡到最后,代码如下:
- 域名解析 URL转发
URL转发 转发功能:如果您没有一台独立的服务器(也就是没有一个独立的IP地址)或者您还有一个域名B,您想访问A域名时访问到B域名的内容,这时您就可以通过URL转发来实现.url转发可以转发到某一个目 ...
- Webfrom基础知识
MyBeNASP.NET内置对象 (1)简述ASP.NET内置对象. 答:ASP.NET提供了内置对象有Page.Request.Response.Application.Session.Server ...
- (转)eclipse 代码自动补全
转自:http://blog.csdn.net/yushuwai2010/article/details/11856129 一般默认情况下,Eclipse的代码提示功能是比MicrosoftVisua ...
- python-整理--sqlite数据库访问
python 自带sqlite3数据库访问模块. sqlite3 以下写一个数据库访问类 ''' 2016年2月5日 描述: 操作sqlite数据库的封装 主要功能: 将sqlite数据库数据转为py ...
- mysql 5.7占用400M内存优化方案
mysql出问题了,装了一下新版本,竟然占用400多M的内存,这对于不是服务器,占用是在太高了,再开打一个开发工具,那电脑很卡了,其实是可以优化一下的,在my.ini文件找到这几个参数更改一下,占用大 ...
- [c language] getopt 其参数optind 及其main(int argc, char **argv) 参数解释
getopt被用来解析命令行选项参数.#include <unistd.h> extern char *optarg; //选项的参数指针extern int optind, //下一次调 ...