Selenuim自动化测试模型

本章内容:

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

一、概念

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

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

二、自动化测试模型

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

  • 线性测试
  • 模块化驱动测试
  • 数据驱动测试
  • 关键字驱动测试
2.1 线性测试

代码按照操作步骤产生相应的线性脚本,每个测试脚本相对独立,且不产生其他依赖与调用。

例子:

需求:百度搜索设置修改为20条

Selenuim自动化测试模型

实现代码:

#!/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()

    

上一篇:Zabbix之配置文件详解


下一篇:Linux的软中断处理实现 【转】