我所知道的自动化测试模型

简介:

线性测试                                                                             

 

  通过录制或编写脚本,一个脚本完成用户一套完整的操作,通过对脚本的回放来进行自动化测试。

这是早期进行自动化测试的一种形式。

脚本一

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get("http://passport.cnblogs.com/login.aspx?ReturnUrl=http://www.cnblogs.com/fnng/admin/EditPosts.aspx")

driver.find_element_by_id("tbUserName").send_keys("admin")
driver.find_element_by_id("tbPassword").send_keys("123456")
driver.find_element_by_id("btnLogin").click()

...... 

driver.quit ()

脚本二

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get("http://passport.cnblogs.com/login.aspx?ReturnUrl=http://www.cnblogs.com/fnng/admin/EditPosts.aspx")
driver.find_element_by_id("tbUserName").send_keys("user")
driver.find_element_by_id("tbPassword").send_keys("456123")
driver.find_element_by_id("btnLogin").click()

...... 

driver.quit ()

通过上面的两个脚本,我们很明显的发现它的问题:

  一个用例对应一个脚本,假如界面发生变化,用户名的属性发生改变,不得不需要对每一个脚本进行修改,测试用例形成一种规模,我们可能将大量的工作用于脚本的维护,从而失去自动化的意义。

  这种模式下数据和脚本是混在一起的,如果数据发生变也也需要对脚本进行修改。

      这种模式下脚本的可重复使用率很低。

 

 

模块化与库                                                                              

 

我们会清晰的发现在上面的脚本中,其实有不少内容是重复的;于是就有了下面的形式。

#coding=utf-8
from selenium import webdriver
import time

#登录模块
def login():
    driver.find_element_by_id("tbUserName").send_keys("user")
    driver.find_element_by_id("tbPassword").send_keys("456123")
    driver.find_element_by_id("btnLogin").click()

#退出模块
def  quit():
     ..............


driver = webdriver.Firefox()
driver.get("http://passport.cnblogs.com/login.aspx?ReturnUrl=http://www.cnblogs.com/fnng/admin/EditPosts.aspx")

#调用登录模块
login()

#其它个性化操作
...... 

#调用退出模块

注意,为了省事我把代码写在了一个文件里,真正的实施时需要把模块放到其它文件进行调用。还有上面代码不能完整运行。

 

  通过上面的代码发现,我们可以把脚本中相同的部分独立出来,形成模块或库;当脚本需要进行调用。这样做有两个好处:

  一方面提高了开发效率,不用重复的编写相同的脚本。

  另一方面提高了代码的复用。

 

 

数据驱动                                                                                 

 

  数据驱动应该是自动化的一个进步;从它的本意来讲,数据的改变(更新)驱动自动化的执行,从而引起结果改变。这显然是一个非常高级的概念和想法。

其实,我们能做到的是下面的形式。

d:\abc\data.txt

 

#coding=utf-8
from selenium import webdriver
import os,time
source = open("D:\\abc\\data.txt", "r")
values = source.readlines()
source.close()
# 执行循环
for serch in values:
    browser = webdriver.Firefox()
    browser.get("http://www.baidu.com")
    browser.find_element_by_id("kw").send_keys(serch)
    browser.find_element_by_id("su").click()
    browser.quit()

 好吧!不管我们读取的是txt 文件,还是csvexcel 文件的之类,又或者是数组、字典函数。我们实现了数据与脚本的分离,换句话说,我们实现了参数化。我们仍一千条数据,通过脚本的执行,可以返回一千条结果出来。

  同样的脚本执行不同的数据从而得到了不同的结构。是不是增强的脚本的复用性呢!

  其实,这对开发来说是完全没有什么技术含量的;对于当初QTP 自动化工具来说确是一个买点,因为它面对的大多是不懂开发的测试。

 

 

关键字驱动                                                                           

 

  理解了数据驱动,无非是把“数据”换成“关键字”,关键字的改变引起测试结果的改变。

  关键字驱动用编程方式就不太容易表现了。QTP 、 robot framework 等自动化工具就是典型的关键字驱动(填表格)

好吧!我能说selenium IDE 也是关键字驱动么?

转化成表格是这样的:

Selenium IDE 脚本分:命令(command)、对象(command)、值(value

格式就那里不偏不移,通过这样的格式去描述不同的对象,从而引起最终结果的改变。也就是说一切以对象为出发点。

当然,这样的脚本,显然对于不懂代码的同学非常直观!我要找谁(对象)?怎么做(命令)?做什么(值)?

更高级的关键字驱动,可以自己定义keyword然后“注册”到框架;从而实现更强大的功能和扩展性。关键字更详细的理解可以看我偶像的那偏文章。

 

 

  本文所列出了不同自动化模型,虽然简单阐述了他们的优缺点,但并不主观的说评判某一模型好坏。其实他们也并非单纯后者淘汰前者的关系,实施自动化更多的是以需求为出发点,混合的来使用以上模型去解决问题。

 

 

目录
相关文章
|
1月前
|
人工智能 搜索推荐 测试技术
模拟试错(STE)法让7B大模型测试超GPT-4
【2月更文挑战第24天】模拟试错(STE)法让7B大模型测试超GPT-4
27 1
模拟试错(STE)法让7B大模型测试超GPT-4
|
2月前
|
并行计算 Linux 计算机视觉
还在手工标注数据集?快来试一试自动化多模型标注大模型-gui交互式标注(部署运行教程-高效生产力)
还在手工标注数据集?快来试一试自动化多模型标注大模型-gui交互式标注(部署运行教程-高效生产力)
70 0
|
23天前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
测试技术
模型驱动测试:引领软件质量的新潮流
模型驱动测试:引领软件质量的新潮流
24 2
|
2月前
|
存储 XML JSON
开集目标检测-标签提示目标检测大模型(吊打YOLO系列-自动化检测标注)
开集目标检测-标签提示目标检测大模型(吊打YOLO系列-自动化检测标注)
78 2
|
4月前
|
分布式计算 测试技术 Spark
通过Langchain实现大模型完成测试用例生成的代码(可集成到各种测试平台)
通过Langchain实现大模型完成测试用例生成的代码(可集成到各种测试平台)
614 0
|
3月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
186 0
|
1月前
|
机器学习/深度学习 数据采集 运维
高效处理异常值的算法:One-class SVM模型的自动化方案
高效处理异常值的算法:One-class SVM模型的自动化方案
28 1
|
1月前
|
测试技术
模型驱动测试引领测试开发新风向
模型驱动测试引领测试开发新风向
19 3
|
2月前
|
机器学习/深度学习 JSON 自然语言处理
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
45 0