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

时间: 2024-10-11 06:03:48

Selenium模块化的相关文章

selenium 模块化实例

一.函数的定义,并引用 public_model.py #登陆def login(driver): driver.find_element_by_id("idInput").clear() driver.find_element_by_id("idInput").send_keys('username') driver.find_element_by_id("pwdInput").clear() driver.find_element_by_id

Selenium+Python参数化:读取TXT文件

概述 从Selenium模块化一文中,可以看出参数化的必要性,本文来介绍下读取外部txt文件的方法. 如何打开文件 打开文件有以下两个函数可以应用: 1.open(file_name,access_mode) file_name: 文件路径及名称: access_mode :访问方式,具体参数如下,,未提供参数,则默认为r: r:表示读取: w:表示写入: a:表示添加: +: 表示读写: b:表示2进制访问; 2.file函数 file()内建函数它的功能等于open(),如下根据文档说明可知

selenium+python(模块化驱动测试)

模块化驱动测试,就是借鉴编程语言中模块化的思想,把重复的操作独立成功公告模块,懂用例执行过程中需要用到这一模块操作时则被调用,这样可以极大的消除重复从而提高测试用例的可维护性 下面具体以126邮箱为例: 首先对每次要都用到的登录登出独立出来,放在公共模块中 public.py # coding=utf-8 class Login(): # login 登录 def login(self,driver): driver.find_element_by_id("IdInput").clea

selenium - 自动化测试模型 - 模块化、数据驱动(参数化)

按自动化测试的发展顺序,主要以下几种模型: 线性模型:按顺序编写操作步骤产生线性脚本,开发维护成本高(例如登录的重复操作,每个脚本都需要开发和维护) 模块化驱动测试:将重复的操作独立成公共模块,需要时调用即可,降低开发和维护成本 数据驱动测试:数据的参数化,可以通过定义变量.数组.字典.外部文件(excel.csv.txt.xml等)进行,例如不同的登录名和密码登录系统 关键字驱动测试:典型的工具如QTP.seleniumIDE等 下面主要介绍模块化驱动测试和数据驱动测试: 1. 模块化驱动测试

selenium学习:模块化驱动测试实例

登陆模块封装文件:public.py #coding=utf-8 from selenium import webdriver from time import sleep class Login():     #登陆     def user_login(self,driver):         driver.find_element_by_id("loginform-username").clear()         driver.find_element_by_id(&quo

Python+selenium(11)脚本模块化&参数化

mail126.py脚本如下 from selenium import webdriver from time import sleep from model1 import Login driver = webdriver.Chrome() driver.get("http://www.126.com") print("登录前") title = driver.title print("title:" + title) #调用登录 l = Lo

Python+Selenium 自动化实现实例-模块化调用

public 目录存一些公共模块,供用例调用.login.py 内容如下: # coding=utf-8 import time # login def login(driver): driver.find_element_by_class_name("ui-dialog-close").click() # 关闭弹窗 driver.find_element_by_xpath("//*[@id='topbar_nav']/li[1]/a[1]").click() #

selenium之自动化测试脚本的模块化设计

自动化测试用例一个一个的执行写起来比较复杂麻烦,一些通用的重复使用的的方法可以封装成一个函数,需要的时候调用,这样简化了代码从而提升了写脚本的效率. 比如: 以百度为例,搜索的一个线性脚本 上图中画红框的为脚本的公共部分,把这部分封装成一个函数,函数名为search demo1里要把demo2里封装的函数导进来,方便后面调用 直接通过调用封装好的函数,这样代码写起来简单了很多,也减少了代码的冗余. 原文地址:https://www.cnblogs.com/xyx-001/p/9561841.ht

selenium基础(脚本模块化)

原文地址:https://www.cnblogs.com/jingdenghuakai/p/11700765.html