本章内容:

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

一、概念

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

  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. Eclipse 使用 ButterKnife 细节问题

    原本这都是很常见的功能 加入以下jar库就可以了. 哪里知道左右都不能获得点击时间; http://repo1.maven.org/maven2/com/jakewharton/butterknife ...

  2. 【Python】【BugList12】python自带IDLE执行print(req.text)报错:UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 93204-93204

    [代码] # -*- coding:UTF-8 -*- import requests if __name__ == '__main__': target = 'https://unsplash.co ...

  3. 微信小程序开发之搞懂flex布局1——Flexbox

    Flexbox ——弹性布局 Flexbox is a layout model for displaying items in a single dimension — as a row or as ...

  4. LOJ-10097(2-sat问题)

    题目链接:传送门 思路: 2-sat问题,如果选每个集合最多有两个元素,eg:(Ai,Ai’),(Bi,Bi’): 如果Ai,Bi冲突,就只能选Ai,Bi’(建立边),然后缩点,查找有无相同集合的点在 ...

  5. HDU 4609 3-idiots (组合数学 + FFT)

    题意:给定 n 条边,问随机选出 3 条边,能组成三角形的概率是多少. 析:答案很明显就是  能组成三角形的种数 / (C(n, 3)).现在的问题是怎么求能组成三角形的种数. 这个博客说的非常清楚了 ...

  6. java开发师笔试面试每日12题(1)

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被设计 ...

  7. c++中二级指针的使用场景

    二级指针的使用场景如下: 1.主要用来为指针变量分配内存空间: void GetMemory(char **p) { *p = ]; } 函数调用方式: char *str = NULL; GetMe ...

  8. Appium之xpath定位元素

    原文:http://www.cnblogs.com/cnkemi/p/9180525.html appium也是以webdriver为基的,对于元素的定位也基本一致,只是增加一些更适合移动平台的独特方 ...

  9. Postman+Newman+jenkins实现API自动化测试

    最近自己在学习用postman+newman+jenkins实现API自动化测试,这里做个回顾和记录.(此次是在windows上进行的环境搭建) 一.说明 1.大致思路:利用postman做接口调试所 ...

  10. webpack之牛刀小试 打包并压缩html、js

    1.创建项目文件夹test,在文件夹下创建src文件夹用来存放源码,在src文件夹下创建index.html/index.js两件文件. 我们的最终目的是将这两个文件打包压缩并输出到/test/dis ...