自动化测试模型

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

1、线性模型

通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。线性脚本中每个脚本都相互独立,且不会产生其他依赖与调用,其实就是简单模拟用户某个操作流程都脚本。
操作,重复操作,数据都混合在一起。
优点:每个脚本相对独立,且不产生其他依赖和调用。
缺点:开发成本高,用例之间存在重复的操作。比如重复的用户登录和退出。维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改。

'''
案例:自动登录与退出操作
'''from selenium import webdriver
from time import sleepdriver = webdriver.Firefox()
driver.get_cookie("http://localhot/")# 输入用户名
driver.find_element_by_name('username').clear()
driver.find_element_by_name('username').send_keys('zxw')# 输入密码
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()
driver.switch_to.alert().accept()
sleep(3)driver.quit()

2、模块化驱动测试

线性模型虽然每个用例都可以拿来独立运行,但是用例之间重复代码很多,开发、维护成本高。其实把重复的操作代码封装为独立的公共模块,当用例执行时需要用到这部分,直接调用即可,这就是模块驱动的方式。比如登录系统、退出登录、截图函数等等。
操作+(重复操作,数据)混合在一起。
优点:由于最大限度消除了重复,从而提高了开发效率和提高测试用例的可维护性。
缺点:虽然模块化的步骤相同,但是测试数据不同。比如说重复的登录模块,如果登录用户不同,依旧要重复编写登录脚本。

from selenium import webdriver
from time import sleepclass Login():def user_login(self, driver):# 输入用户名driver.find_element_by_name('username').clear()driver.find_element_by_name('username').send_keys('zxw')# 输入密码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(3)driver.switch_to.alert().accept()if __name__ == '__main__':driver = webdriver.Firefox()driver.get("http://127.0.0.1")# 隐式等待driver.implicitly_wait(10)Login.user_login(driver)Login.user_logout(driver)# 调用登录模块
from LoginClass import *driver = webdriver.Firefox()
driver.get("http://localhost/")
driver.implicitly_wait(10)Login().user_login(driver)
Login.user_logout(driver)

3、数据驱动测试(参数化)

模块驱动测试等模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不狠适合了。数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。装载数据的方式可以使列表、字典或是外部文件(txt、csv、xml、excel),目的就是实现数据和脚本的分离。
操作+重复操作+数据分开。
优点:通过这种方式,将数据和重复操作分开,可以快速增加相似测试,完成不同数据情况下的测试。

from selenium import webdriver
from time import sleepclass 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(3)driver.switch_to.alert().accept()if __name__ == '__main__':driver = webdriver.Firefox()driver.get("http://127.0.0.1")# 隐式等待driver.implicitly_wait(10)Login.user_login(driver, "test", "123456")Login.user_logout(driver)# 调用登录模块
from LoginClass_para import *driver = webdriver.Firefox()
driver.get("http://localhost/")
driver.implicitly_wait(10)Login().user_login(driver, "test", "123456")
Login.user_logout(driver)

4、关键字驱动测试

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

转载于:https://www.cnblogs.com/xidian2014/p/10422736.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串

自定义取出第几个分割字符前的字符串,默认位置(0)格式:dbo.split(字段名,分隔字符,取出的第几个字符串)如果没有分隔的字符,则返回整个字符串。如果取出的位置字符串的位置超出Index则返回空。CREATE FUNCTION [dbo].[…

mysql 开发 生产_在没有表锁定的情况下在巨大的MySQL生产表...

[2017]更新:MySQL 5.6支持在线索引更新In MySQL 5.6 and higher, the table remains available for read and write operations while the index is being created or dropped. The CREATE INDEX or DROP INDEX statement only finishes after all transactions tha…

ListView性能优化

ListView在ScrollView中无法正确计算它的大小, 故不能显示正常的条目。 解决办法有: 1.重写ListView, 覆盖onMeasure()方法。 1 public class WrapperListView extends ListView {2 public WrapperListView(Context context) {3 super(context);4 }…

判断页面关闭的方法 UNLOAD/onbeforeunload

最近一个朋友做在线统计,问我怎么判断用户登陆和离开。获得用户登陆不用说了,大家都知道,判断离开的话就有一点问题了,如果说用户都是按照设计者的规定的范围触发退出事件离开的话那就没什么难度了,但是用户的离开方式…

mysql 第几周 时间戳_php时间戳函数实现计算第几周,以及当天所在周的具体日期范围...

<html><script language"javascript">function showdate(){c new Date(2008,1,29);//输入开学的日期.注意,月份是从0-11;comperc.getTime();//以2008年2月29日作为上半学期结束。然后记录新的开学日期var now new Date();//获取当前时间var d_nownow.ge…

java学习笔记④MySql数据库--03/04 DQL查询

03 使用DQL查询数据&#xff08;一&#xff09; 04 使用DQL查询数据&#xff08;二&#xff09; DQL 数据查询语言 select select * 方式效率低 AS 取别名 (给字段取别名,给表取别名,给计算结果取别名) as取别名时,可省略as distinct 去重 所有字段一起不重复算一条记录 selec…

2005国产空间信息系统软件测评结果揭晓

记者&#xff1a;云洲 来源&#xff1a;www.3sNews.net 责编&#xff1a;小柯 [3sNews讯]2005年12月27&#xff0c;为期两天的“地球观测与导航技术领域科技发展研讨会”于中国科技会堂胜利召开&#xff0c;备受业界关注的2005国产空间信息系统软件测评结果在会上揭晓&am…

mysql变量string_mysql sql语句有变量 time_t变量转换为string

1.char*变量 如果有两个指针变量不可以 需要一个转换为stringstring strCall ;strCall.assign(pCallInfo->m_szCallerNo,strlen(pCallInfo->m_szCallerNo));//char* 转换为stringstring sql "insert into tcallrecord values("strCall","pCallInfo-…

axios+vue实现动态渲染员工数据+数据是对象

<style>table{width: 600px;margin: 0 auto;text-align: center;border-collapse: collapse; /*合并边框哦*/}tr th,tr td{border: 1px solid pink;}</style><script src"../vue.js"></script><script src"../axios.js">&l…

[Translation]《击鼓》

"Live or die,meet or part,weve made oath,you and I;,7UZGive me your hand,Ill hold,and live together,till old.l"From: 《击鼓》I?©MYUP2U社区 -- 整理童年的记忆&#xff0c;释放知识的潜力&#xff0c;共享青春的激情&#xff0c;尽在MYUP2U&#xff0…

[vue] vue自定义事件中父组件怎么接收子组件的多个参数?

[vue] vue自定义事件中父组件怎么接收子组件的多个参数&#xff1f; 子组件传递多个参数&#xff0c;父组件用展开运算符获取个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

FLASH全屏,左右侧,闪烁广告及对错觉的代码补充.

<!--焦点图开始--> <script type"text/javascript"><!--var focus_width250; ------ flash的宽度var focus_height160; ------ flash的高度同样可以加上背景颜色 var focus_bgcolor160; ------ flash的背景颜色…

vscode调试angular2

调试步骤&#xff1a; 1.安装nodejs 2.安装vscode 3.vscode安装debugger for chrome插件 4.选择调试->打开调试配置&#xff0c;选择chrome配置&#xff0c;打开lauch.json,修改如下&#xff1a; {"version": "0.2.0","configurations": [{&q…

python实现组合问题_python3 最基本且简单的实现组合设计模式

&#xfeff;组合模式是把一个类别归为一个整体&#xff0c;并且组织多个整体之间的关系&#xff0c;使用通过树形结构来描述所有整体。一般的编写方式为一个类别对象下添加多个该对象的元素&#xff0c;该对象又为其它对象下的元素。简单来说就是一个学校有一个总部&#xff0…

[vue] 说下$attrs和$listeners的使用场景

[vue] 说下attrs和attrs和attrs和listeners的使用场景 <template><el-button v-on"$listeners" v-bind"$attrs" :loading"loading" click"myClick"><slot></slot></el-button> </template><s…

Windows下安装SQLPlus的帮助

Oracle 10G Server不在本机上&#xff0c;我希望安装SQLPlus的帮助。安装SQLPlus需要使用System User登录&#xff0c;但System已经被Lock掉了。还好有dba的权限。先Unlock System账号&#xff0c;并修改密码&#xff1a;-- UnlockALTER USER SYSTEM ACCOUNT UNLOCK;-- Modify …