本章内容:

  • 概念介绍
  • 自动化测试模型

一、概念

自动化测试库、框架、工具之间的区别:

  1. 库是由代码集合成的一个产品,供程序员调用,面向对象的代码组织形成的库叫类库,面向过程的代码组织形成的库叫函数库。
  2. 框架是为了解决一个互或一类问题而开发的产品,用户一般需要只需要使用框架提供的类或函数,即可实现全部功能。
  3. 工具与框架所做的事情类似,只是工具会有更高的抽象,屏蔽了底层的代码,一般会提供单独的操作界面供用户操作。

二、自动化测试模型

  自动化测试模型可以看作自动化测试框架与工具设计思想的结合。随着自动化测试技术的发展,演化为以下几种模式:

  • 线性测试
  • 模块化驱动测试
  • 数据驱动测试
  • 关键字驱动测试
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 模块化驱动测试

  模块化测试把重复的操作独立成公共模块,当用例执行过程中需要用到这一模块操作时则被调用,这样就最大限度消除重复,从而提高测试用例的可维护性。

  1. 提高了开发效率,不用重复编写相同的操作脚本,例如:已经写好一个登录模块,后续其他地方只需调用;
  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自动化测试模型的更多相关文章

  1. Python+Selenium学习--自动化测试模型

    前言 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块.自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试.数据驱动测试.对 ...

  2. 第6章 Selenium2-Java 自动化测试模型

    6.1  自动化测试模型介绍 6.1.1  线性测试 :其实就是单纯地来模拟用户完整的操作场景. 优势就是每一个脚本都是完整且独立的:   缺陷测试用例的开发与维护成本很高. 6.1.2  模块化驱动 ...

  3. UI自动化测试模型

    所谓的自动化测试模型,可以理解为自动化测试框架+工具设计的一种思想产物. 先说说库.框架.工具之间的区别: 库:英文名Library,由代码集成的一个产品,供用户调用.面向对象的库叫做类库,面向过程的 ...

  4. Selenium(十四):自动化测试模型介绍、模块化驱动测试案例、数据驱动测试案例

    1. 自动化测试模型介绍 随着自动化测试技术的发展,演化为了集中模型:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试. 下面分别介绍这几种自动化测试模型的特点. 1.1 线性测试 通过录制或编 ...

  5. Selenium 2自动化测试实战25(自动化测试模型)

    一.自动化测试模型 自动化测试模型介绍:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试 线性测试:每个测试脚本相对独立,且不产生其他依赖与调用,只是单纯的来模拟用户完整的操作场景.模块化驱动测 ...

  6. 腾讯大牛教你简单的自动化测试模型(Python+Selenium)

    今天讲解简单的自动化测试模型,对于刚接触自动化测试的同学,由于没有编程语言的基础,是搞不懂代码里面的函数.封装.包以及其他概念,只是了解字符串.数组.元组及字典这种最基本的名词,更不懂自动化测试框架了 ...

  7. Python 自动化测试全攻略:五种自动化测试模型实战详解

    随着移动互联网的发展,软件研发模型逐步完善,软件交付质量越来越受到软件公司的重视,软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用. 与传统的手工测试技术相比,自动化测试 ...

  8. 简单的自动化测试模型(python+selenium)

             刚接触自动化测试,由于没有编程语言的基础,是搞不懂代码里面的函数.封装.包以及其他概念,只是了解字符串.数组.元组及字典这种最基本的名词,更不懂自动化测试框架了.          ...

  9. 【Python-虫师】自动化测试模型--参数化

    一.自动化测试代码最开始是线性的,后续发展为模块化代码,所以涉及到了函数和方法的引用. 1. 函数和方法的最主要区别: Python的方法中定义函数的时候,函数中必须写self.而单独定义函数的时候则 ...

随机推荐

  1. jquery选择器基础知识(复制w3c)

    jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") ...

  2. MyEclipse has detected that less than 5% of

      选择Windows->Preferences; 2 选择MyEclipse->Servers->Integrated Sandbox->MyEclispe Tomcat 6 ...

  3. web安全系列3:http拦截

    这是web安全系列第三篇,我们讲讲HTTP请求的拦截.关于http的内容请翻看我的上一篇文章. 首先,我们开始需要一个安装好的java环境,64位的.请自行安装和配置环境变量,如果遇到问题可以留言评论 ...

  4. window下github的学习心得

    准备工作: 安装git: 1.下载地址:http://msysgit.github.io/ 2.安装:本人是一路next的,现在没发现有什么问题.详细的安装过程参考:https://jingyan.b ...

  5. 2019.03.26 bzoj4447: [Scoi2015]小凸解密码(线段树)

    传送门 题意简述:咕咕咕 思路:考虑预处理出bbb数组,然后每次改动aaa都只会对第iii和i+1i+1i+1这两个位置产生影响,于是可以用线段树来维护bbb数组. 现在求答案的方法是断环为链,倍增整 ...

  6. jmeter性能测试入门

    1.jmeter介绍2.jmeter变量环境部署3.jmeter目录结构4.jmeter  Gui模式5.jmeter 非Gui模式6.jmeter 录制完显示乱码设置7.jmeter 结果分析 1. ...

  7. Linux学习---内存分布基础

    内核空间 应用程序不允许访问 -----------------------------------------3G 栈空间 局部变量 RW ----------------------------- ...

  8. redis_哈希对象

    redis哈希对象的底层编码有两种:ziplist.hashtable ziplist编码 当一个哈希键只包含少量kv对.且key和value都是小整数值.短字符串时,redis会使用压缩列表来做 z ...

  9. 两种 js下载文件的方法(转)

    function DownURL(strRemoteURL, strLocalURL){         try{             var xmlHTTP = new ActiveXObjec ...

  10. kubernetes CSI 插件机制学习笔记

    前言 最近在极客时间订阅了kubernetes的专栏,这篇文章是想记录一下自己学习 CSI 插件机制 (container-storage-interface) 的过程,加深一下记忆. 准备工作 老师 ...