首页 > 其他分享 >自动化测试模型

自动化测试模型

时间:2023-01-17 18:01:23浏览次数:37  
标签:name 模型 driver element self sleep 测试 自动化 find

概念
自动化测试模型可以看作自动化测试框架与工具设计的思想。自动化测试不仅仅是单纯写写脚本运行就可以了,还需要考虑到如何使脚本运行效率提高,代码复用、参数化等问题。自动化测试模型分为四大类:线性模型,模块化驱动测试、数据驱动、关键词驱动。

  • 线性模型

线性脚本中每个脚本都相互独立,且不会产生其他依赖与调用,其实就是简单模拟用户某个操作流程的脚本。

#案例一:在帝国软件主页自动登录和退出操作
from selenium import webdriver
from time import sleep

driver=webdriver.Firefox()
driver.get("http://XXXX")
#输入用户名
driver.find_element_by_name('username').clear()
driver.find_element_by_name('username').send_keys('51zxw')
#输入密码
driver.find_element_by_name('password').clear()
driver.find_element_by_name('password').send_keys('123456')

#点击登陆
driver.find_element_by_name('Submit').click()
sleep(3)

#退出
driver.find_element_by_link_text('退出').click()
sleep(2)
driver.switch_to_alert().accept()

sleep(3)
driver.quit()
#案例二:在百度主页根据定位元素并输入值
from  selenium import webdriver
from time import sleep

driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
#根据id=kw定位元素,并输入python
driver.find_element_by_id("kw").send_keys("python")
sleep(1)
#清除输入框内容
driver.find_element_by_id("kw").clear()
sleep(1)
#根据name=kw定位元素,并输入python
driver.find_element_by_name("wd").send_keys("python")
sleep(2)
#根据id=su定位元素,并点击
driver.find_element_by_id("su").click()

sleep(3)
driver.quit()
  • 模块驱动

线性模型虽然每个用例都可以拿出来独立运行,但是用例之间重复代码很多,开发、维护成本高。其实把重复的操作代码封装为独立的公共模块,当用例执行时需要用到这部分,直接调用即可,这就是模块驱动的方式。比如登录系统、退出登录、截图函数等等。*

from selenium import webdriver
from time import sleep

class Login():
 def user_login(self,driver):
    driver.find_element_by_link_text('账号密码登录').click()
    driver.find_element_by_name('username').clear()
    driver.find_element_by_name('username').send_keys('51zxw')

    driver.find_element_by_name('password').clear()
    driver.find_element_by_name('password').send_keys('123456')

    driver.find_element_by_name('Submit').click()

    def user_logout(self,driver):
        driver.find_element_by_link_text('退出').click()
        sleep(2)
        driver.switch_to_alert().accept()#点击确认退出按钮

if __name__=='__main__':
    driver = webdriver.Firefox()
    driver.get("http://localhost/")
    driver.implicitly_wait(10)#隐式等待10秒

    Login().user_login(driver)
    Login().user_logout(driver)

# 可以直接调用已有的登录模块,代码更简洁
#以下为直接调用登录模块

# from LoginClass import *  #导入模块中所有的方法也可以只导入登录或者退出的方法如:from LoginClass import user_login

driver = webdriver.Firefox()
driver.get("http://localhost/")
driver.implicitly_wait(10)

Login().user_login(driver)
Login().user_logout(driver)

  • 数据驱动

模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了。
数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。 装载数据的方式可以是列表、字典或是外部文件(txt、csv、xml、excel),目的就是实现数据和脚本的分离。

from selenium import webdriver
from time import sleep

class Login():
    def user_login(self,driver,username,password):
        driver.find_element_by_name('username').clear()
        driver.find_element_by_name('username').send_keys(username)

        driver.find_element_by_name('password').clear()
        driver.find_element_by_name('password').send_keys(password)

        driver.find_element_by_name('Submit').click()

    def user_logout(self,driver):
        driver.find_element_by_link_text('退出').click()
        sleep(2)
        driver.switch_to_alert().accept()

#以下为数据驱动调用——实现多个账户登录
from selenium import webdriver
from Loginpara import *
from time import sleep

driver=webdriver.Firefox()
driver.get("http://localhost")
driver.implicitly_wait(10)

Login().user_login(driver,'51zxw',123456)
sleep(3)
Login().user_logout(driver)

Login().user_login(driver,'51zxwPro',123456)
sleep(3)
Login().user_logout(driver)

sleep(3)
driver.quit()
  • 关键字驱动

通过关键字的改变引起测试结果的改变叫关键字驱动测试。 selenium IDE也是一种传统的关键字驱动的自动化工具,Robot Framework 是一个功能更强大的关键字驱动测试框架

from selenium import webdriver
import time


class KeyTest():

    def __init__(self, br=None):
        if "IE" == br:
            self.driver = webdriver.Ie()
        elif "Firefox" == br:
            self.driver = webdriver.Firefox()
        else:
            self.driver = webdriver.Chrome()

    def open(self, url):
        self.driver.get(url)

    def send_keys(self, text):
        try:
            self.driver.find_element_by_id('kw').send_keys(text)
        except:
            print("click fail!")
            raise

    def click(self, id):
        try:
            self.driver.find_element_by_id(id).click()
        except:
            print("click fail!")
            raise

    def sleep(self, times):
        time.sleep(int(times))

    def quit(self):
        self.driver.quit()


if __name__ == '__main__':
    dr = KeyTest()
    # 打开浏览器
    dr.open('http://www.baidu.com')
    # 输入"自动化测试"
    dr.send_keys('自动化测试')
    # 点击搜索
    dr.click('su')
    dr.quit()

标签:name,模型,driver,element,self,sleep,测试,自动化,find
From: https://www.cnblogs.com/hahaniuer/p/17058436.html

相关文章

  • 数字电路实验 04 - | 组合逻辑电路的设计与测试
    一、实验目的和任务掌握组合逻辑电路的分析与设计方法。加深对基本门电路使用的理解。二、实验原理介绍三、实验数据、计算及分析ABCDZ00000001000100001100100001010011000......
  • 数字电路实验 01 - | TTL门电路的逻辑功能测试
    一、实验目的和任务测试TTL集成芯片中的与门、或门、非门、与非门、或非门与异或门的逻辑功能。了解测试的方法与测试的原理。二、实验原理介绍实验中用到的基本门电路的符......
  • MeterSphere 接口测试深度数据驱动使用来喽
       众所周知,MeterSphere接口自动化中,用户可以添加CSV文件可以做数据驱动测试,不熟悉的小伙伴点这里​​【接口自动化做数据驱动(ddt)测试】​​。除了CSV文件以外,日常......
  • 揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!
    摘要:质量是产品的生死线。本文分享自华为云社区《​​揭开华为云CodeArtsTestPlan启发式测试设计神秘面纱!​​》,作者:华为云PaaS服务小智。2019年12月20日,是美国波音公司新......
  • 揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!
    摘要:质量是产品的生死线。本文分享自华为云社区《揭开华为云CodeArtsTestPlan启发式测试设计神秘面纱!》,作者:华为云PaaS服务小智。2019年12月20日,是美国波音公司新一代......
  • 优测着力打造全方位测试服务平台
    优测云服务平台是腾讯官方推出的一站式移动云测试服务平台,拥有十年终端测试服务经验,提供兼容性测试、自动化测试、云真机、设备分享等多种服务方式。团队拥有50余名测试领域......
  • 软件验收测试有什么注意事项?出具权威测试报告的软件检测机构安利
    软件产品在开发到发布有一个最终环节便是验收测试,软件验收测试是软件产品在部署之前的最后一个测试操作,主要是为了确保软件各方面准备就绪,可以让最终的用户将其用于执行......
  • UI自动化Selenium的使用--Java语言
    1.Selenium的运行环境依赖于Java环境,Java环境分JDK和JRE,JDK就是JavaDevelopmentKit。简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。JRE是Java......
  • Jmeter如何使用jp@gc - WebDriver Sampler做功能GUI自动化测试
    随着Jmeter的版本不断迭代更新,尤其是其插件。Jmeter不仅可以完成性能测试、接口测试,而且可以依靠jp@gc-WebDriverSampler来完成GUI的功能自动化测试了。1.jmeter的安装......
  • Sonic--开源云真机测试平台
    读者提问:开源云真机测试平台有推荐的吗 ?阿常回答:有,Sonic。官网地址:​​https://sonic-cloud.gitee.io/#/Home​​Github地址:​​https://github.com/SonicCloudOrg​​部署......