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中打开"开始菜单“ -> ”开发者“ -> ”获取更多工具“ -> 搜 ...
随机推荐
- jquery.validate详解一
jQuery校验 官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一导入js库 <script src=&q ...
- 【转】invokeRequired属性和 invoke()方法
C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它. 此时它将会在内部调用n ...
- The account is locked
SQL> select * from v$version where rownum=1; BANNER --------------------------------------------- ...
- yii使用寻呼功能
CDbCriteria这是类包使用,包是yii自带专门用来处理类似分类这种功能的. 而我们使用yii框架然后调用这种方法会起到事半功倍的效果,会发现使用这个可以节省非常多的时间.让你高速的使用PHP中 ...
- LR选择哪种方式录制
LR选择哪种方式录制,有以下考虑原则: 1.基于浏览器的应用程序推荐使用HTML-basic script方式录制 2.不是基于浏览器的应用程序推荐使用URL-basic script方式录制 3.如 ...
- 2016-XCTF Final-Richman
抽时间将XCTF Final中Richman这个题总结了下.题目及ida idb所在的链接在:http://files.cnblogs.com/files/wangaohui/richman-blog ...
- 改进的简单Tooltips显示
使用js简单改进了Tooltips的显示效果,可进一步使用CSS对改进的Tooltips进行美化. 前台布局代码: <asp:Panel ID="Panel1" runat= ...
- Android--------Java接口回调
>###回调说明 回调说明: 1.class A,class B 2.class A 实现接口callback 3.class B拥有一个参数为c ...
- The run destination XXX的 iPhone is not valid for Running the scheme 'Day7通讯录Demo'.
错误:
- Delphi 接口托管实现
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...