-
2017-10-25 14:51:59
第48贴:自动化脚本之关键字驱动脚本
关键字驱动实际上是比较复杂的数据驱动技术的逻辑扩展。将数据文件变成测试用例的描述,用一系列关键字指定要执行的任务。在关键字驱动技术中,假设测试者具有某些被测系统的知识,所以不必告诉测试者如何进行详细的动作,只是说明测试用例做什么,而不是如何做。这样在脚本中使用的是说明性方法和描述性方法。描述性方法将被测软件的知识建立在测试自动化环境中,这种知识包含在支持脚本中。
例如,为完成在网页浏览时输入网址,一般的脚本需要说明在某某窗口的某某控件中输入什么字符;而在关键字驱动脚本中,可以直接是在地址栏中输入网址什么什么;甚至更简单,仅说明输入网址什么什么。
关键字驱动脚本的数量不随测试用例的数量变化,而仅随软件规模而增加。这种脚本还可以实现跨平台的用例共享,只需要更改支持脚本即可。
第49贴:脚本预处理
预处理是一种或多种预编译功能,包括美化器、静态分析和一般替换。脚本的预处理是指脚本在被工具执行前必须进行编译。预处理功能通常需要工具支持,在脚本执行前自动处理。
美化器是一种对脚本格式进行检查的工具,必要时将脚本转换成符合编程规范的要求。可以让脚本编写者更专注于技术性的工作。
静态分析对脚本或表格执行更重要的检查功能,检查脚本中出现的和可能出现的缺陷。测试工具通常可以发现一些如拼写错误或不完整指令等脚本缺陷,这些功能非常有效。静态分析可以检查所有的缺陷和不当之处。类似于程序设计中的PC-Lint和LogiScope的功能。
一般替换也就是宏替换。可以让脚本更明确,易于维护。使用替换时应注意不要执行不必要的替换。在进行调试时,应该注意缺陷可能是存在被替换的部分中,而不是原来的脚本中。
更多相关内容 -
【Appium】通过设计关键字驱动文件来编写脚本
2022-04-22 17:43:01前言:通过关键字驱动文件,使脚本与测试用例分离,可以让代码较薄弱的人按格式填写用例所需参数,即可运行自动化脚本,同时也让代码更加简洁。 目录 一、设计驱动文件 二、根据文件编写脚本 一、设计驱动...前言:通过关键字驱动文件,使脚本与测试用例分离,可以让代码较薄弱的人按格式填写用例所需参数,即可运行自动化脚本,同时也让代码更加简洁。
目录
一、设计驱动文件
本文通过csv文件来编写测试用例,除了用例基本要素ID、name、描述之外,为了和脚本关联起来还要加上元素定位方式、元素对象本身、操作方法、测试数据,当然实际情况还是按照项目要求来。
csv文件初步设计如下:
注意:测试步骤得按照实际测试时定位的顺序来写,不能乱二、根据文件编写脚本
首先明确定位方法,我之前用的都是driver.find_element(By.ID, '元素id')这种By.方式的方法,但其实还有一种方法:driver.find_element('id', '元素id') 这种方法也是可以的。
其他对应的属性如下:
- ID = "id"
- XPATH = "xpath"
- LINK_TEXT = "link text"
- PARTIAL_LINK_TEXT = "partial link text"
- NAME = "name"
- TAG_NAME = "tag name"
- CLASS_NAME = "class name"
- CSS_SELECTOR = "css selector"
注意:该有的空格不能少,在csv中填写的定位方式也得按照这个来
读取文件脚本如下:
def test_addnote(self): # 读取关键字驱动测试用例文件 file = open('keyframe.csv', 'r') table = csv.reader(file) header = next(table) # 跳过第一行 for row in table: # print(row[3]) if row[6] == 'click': self.driver.find_element(str(row[4]), str(row[5])).click() elif row[6] == 'send_keys': self.driver.find_element(str(row[4]), str(row[5])).send_keys(str(row[7]))
示例是使用的模拟器上有道云app添加笔记的功能,完整代码如下:
# 导入Appium类库 from appium.webdriver.webdriver import WebDriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait import csv class yd_addnote(): # 使用初始化方法设置测试参数 def __init__(self): self.caps = { 'automationName': 'UiAutomator2', 'platformName': 'Android', 'platformVersion': '6.0', 'deviceName': '192.168.23.101:5555', 'appPackage': 'com.youdao.note', 'appActivity': '.activity2.MainActivity'} self.driver = WebDriver('http://127.0.0.1:4723/wd/hub', self.caps) self.driver.implicitly_wait(10) # 进入有道云 el = WebDriverWait(self.driver, 10).until( lambda x: x.find_element(By.ID, 'com.android.packageinstaller:id/permission_allow_button')) if el: # 点击同意按钮 self.driver.find_element(By.ID, 'com.android.packageinstaller:id/permission_allow_button').click() def test_addnote(self): # 读取关键字驱动测试用例文件 file = open('keyframe.csv', 'r') table = csv.reader(file) header = next(table) # 跳过第一行 for row in table: # print(row[3]) if row[6] == 'click': self.driver.find_element(str(row[4]), str(row[5])).click() elif row[6] == 'send_keys': self.driver.find_element(str(row[4]), str(row[5])).send_keys(str(row[7])) if __name__ == '__main__': addnote = yd_addnote() addnote.test_addnote()
-
前端web自动化测试:selenium怎么实现关键字驱动
2022-02-23 16:49:03要做 ui 自动化测试,使用关键字驱动可以说是必须会的一种测试方式,它既可以在纯代码的自动化程序中运行,也可以在测试平台中使用。 使用纯代码方式时,自动化工程师先写好一个通用的程序,其他手工测试人员只需要...要做 ui 自动化测试,使用关键字驱动可以说是必须会的一种测试方式,它既可以在纯代码的自动化程序中运行,也可以在测试平台中使用。
使用纯代码方式时,自动化工程师先写好一个通用的程序,其他手工测试人员只需要把执行的页面操作关键字填入到一个表格当中,就可以执行自动化测试了。这个表格可以是 Excel 表格,也可是 yaml 文件。
使用测试平台时,测试开发工程会编写一个界面,在假面中,手工测试人员也可以选择需要操作的页面关键字,选择完以后就可以执行自动化测试了。
关键字驱动实现成本低,操作起来也方便,真是个做 ui 自动化测试的好方式。本文介绍一种简单的关键字驱动实现方式,不需要很高深的编程知识也能掌握。
关键字驱动实现主要分为三个部分:
- 关键字方法的定义,其实就是页面的通用操作,比如点击、输入等常见操作,由自动化测试工程师编写。
- 关键字表格配置。谁编写自动化用例,谁配置这个表格,它主要定义用例需要执行的页面操作和测试数据,最好通过脚本自动生成固定格式的文件,并且把可以选择的操作名称说明,方便使用, 在测试平台中,可以通过下拉框搜索和选择的方式选择,会更加方便。
- 调用关键字,执行页面操作。这个也是由自动化测试工程师编写,读取 yaml 文件中的页面操作,并且执行。
定义关键字方法
如果要对 web 网页进行自动化测试,我们可以定义 Page 类,封装点击、输入等页面操作。
# keywords.py from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.remote.webelement import WebElement from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait DEFAULT_TIMEOUT = 8 class Page: def __init__(self, driver: WebDriver): self.driver = driver def goto(self, url): """页面访问""" self.driver.get(url) def wait_clickable(self, locator, timeout=None) -> WebElement: timeout = DEFAULT_TIMEOUT if timeout is None else timeout wait = WebDriverWait(self.driver, timeout=timeout) return wait.until(expected_conditions.element_to_be_clickable(locator)) def wait_visible(self, locator, timeout=None) -> WebElement: timeout = DEFAULT_TIMEOUT if timeout is None else timeout wait = WebDriverWait(self.driver, timeout=timeout) return wait.until(expected_conditions.visibility_of_element_located(locator)) def click(self, locator): """页面点击""" el = self.wait_clickable(locator) el.location_once_scrolled_into_view el.click() def fill(self, locator, words): """页面输入""" el = self.wait_visible(locator) el.send_keys(words) 复制代码
关键字表格
关键字表格是一个自动化用例的测试步骤和数据,这里我们使用 yaml 文件,action 表示要使用的页面操作,它对应前面 Page 类中的同名方法, params 表示方法需要传入的测试参数。
每个不同的用例,编写一个 yaml 文件,当需要运行自动化测试时,把 yaml 文件作为参数传入自动化程序中就可以了。
# login.yaml - action: goto params: url: "https://petstore.octoperf.com/actions/Account.action?signonForm=" - action: fill params: locator: ['name', 'username'] words: 'yuze' - action: fill params: locator: ['name', 'password'] words: '1234' - action: click params: locator: ['name', 'signon'] 复制代码
使用关键字操作浏览器
最后是通用的测试用例编写。定义一个 test_keyword 函数, 首先读取 login.yaml 文件中的测试步骤和数据,使用 getattr 方法, 把需要调用的页面操作名称 goto, fill, click 传入,获取 Page 类中的同名方法,调用这些方法就能实现对应的自动化操作。
这些代码大多数不需要进行额外修改,当需要运行不同的测试用例,只需要修改 yaml 文件的名称,调用不同的 yaml 测试步骤。
# test_login.py import yaml import pytest from selenium import webdriver from keyworks import Page @pytest.fixture def driver(): d = webdriver.Chrome() d.implicitly_wait(8) d.maximize_window() yield d d.quit() def test_keyword(driver): """获取 yaml 文件""" with open('signin.yaml', encoding='utf-8') as f: steps = yaml.safe_load(f) page = Page(driver) for step in steps: action_name = step.get('action') params = step.get('params') action = getattr(page, action_name) action(**params) 复制代码
运行
现在,我们只需要定义不同的 yaml 文件,然后使用 pytest 这样的测试框架来运行自动化用例就可以。 但是,作为一个简单版关键字驱动实现方式,这个程序还有很多的优化空间。
比如,现在编写多个 yaml 文件后,还需要创建多个 python 的 test 文件。而更加常见的方式是,可以通过命令行配置一个 yaml 文件,我就可以运行该 yaml 文件的测试步骤。
配置多个 yaml 文件,就可以运行多个 yaml 文件的测试步骤。甚至可以配置文件夹名称,就运行文件夹下所有的 yaml 文件的测试步骤。
yaml 文件的生成也可以通过命令行生成。
这个我们在后面在实现,目前来说,我们至少已经知道关键字驱动的实现方式了。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
最后基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等学习资源。
-
一种关键字驱动的自动化测试框架
2021-03-23 15:59:05关键一种关键字驱动的自动化测试框架软件测试摘要:为了提高软件自动化测试脚本的可复用性,提出了一种基于关键字驱动的自动化测试框架(LKDT)。首先对目前现有自动化测试框架进行了归纳分析;然后提出了LKDT的系统... -
关键字驱动的过去和未来
2021-03-03 18:31:24说到“关键字驱动”和“测试自动化”,就不能不提到MosleyDaniel的《软件测试自动化》一书,这本书03年引入国内,04年市面上开始有卖,书中有两个相信能吸引到很多tester的话题:(1)脚本应该录制还是编写?... -
菜鸟理解关于数据驱动和关键字驱动区别
2017-07-15 20:11:45做手工测试的时间久了,一直想往自动化的方向发展,看了论坛上各种文章,众说云云,说从数据驱动到关键字驱动,把数据驱动贬得一无是处,把关键字驱动说得那么神化,但我感觉都是一样的啊,都是把对象参数化,然后把...做手工测试的时间久了,一直想往自动化的方向发展,看了论坛上各种文章,众说云云,说从数据驱动到关键字驱动,把数据驱动贬得一无是处,把关键字驱动说得那么神化,但我感觉都是一样的啊,都是把对象参数化,然后把数据(参数)传进去,执行,然后返回的结果
下面是一些论点,自己消化去吧
摘录一些精妙的论点:
51testing论坛的phililschen:
“什么是数据驱动呢?很大一部分人肯定认为数据驱动就是把需要参数化的东西写在EXCEL里,然后在跑脚本时调用。如果我告诉你,这其实不是数据驱动,
而只是较高级的参数化,你肯定会很惊讶!现在我来解释一下:首先为什么叫数据驱动呢,那么它肯定有驱动的含义,比如你用EXCEL可以控制测试的业务流吗?回答是不能的。那又如何作到驱动呢?所以说我们将测试数据放在独立的文件里只是高级的参数话。而数据驱动,你必须有数据来控制测试的业务流。比如你测一个WEB程序,有很多页面,你可以通过一个数据来控制每次是再哪个页面下工作的(即通过数据来导航到相应的页面)。它是关键字驱动的低级版本,他控制的是函数级的,而关键字是控制动作级的。所以数据驱动应该是可以控制整个测试的”51testing论坛的dreamever:
“数据驱动本身不是一个工业级标准的概念,因此在不同的公司,都会有好几个解释版本。首先我同意楼主的关于数据驱动的观点,也就是说如果我们仅仅是把测试数据放在数据文件里,这只是一种比较高级的参数化而已。其实我更倾向于把数据驱动理解为一种模式或者一种思想
对于数据驱动的讨论,我们不妨先抛开QTP来进行。无论是进行自动化测试还是手工测试时,我们都需要设计测试用例,准备测试数据,并且把测试用例与数据分开,在一套测试用例上运行多套测试数据是比较有效率的。我相信这一点大家应该都认同吧。
那么我们不妨再看一下手工测试的场景:当一个手工测试人员A发现在测试数据存储目录下多了一套测试数据时,他就会意识到应该马上执行测试用例,并输入这
套新的测试数据。其实是测试数据的变化触发了A的测试行为。(有人可能说了我们公司不是这么做的,注意,我们不是在讨论实际的测试管理,我们在对测试模型
进行抽象)。如果我们更抽象一下,可以这样来看:当测试数据变化时,测试用例就会被执行(无论是A主动还是leader打电话通知),并且按照预先定义的
规则去读取测试数据并执行测试用例。那么这种情况我们是不是可以理解为一种数据驱动呢?也就是说只要有了新的测试数据或者测试数据发生了变化,那么A就会
去执行测试用例。这一过程的目的就是为了让所有的测试数据都得到输入并返回相应的输出结果。如果大家同意上面的情景是一种数据驱动测试
的例子,那么我们可以对自动化测试中的数据驱动进行同样的解释:由机器自动读取测试数据,然后测试用具运行测试脚本执行测试用例,并按照预先设置好的参数
化字段读取测试数据,返回测试结果。目的就是使所有的测试数据都得到输入,并返回输出,验证数据的输入和输出是否符合预期值。这里的测试数据不仅包括业务
数据,还包括一些动作关键字或决策关键字,以提供足够的信息,让测试工具知道该调用什么样的脚本,应该如何处理各种情况。相对于不同的测试工具,其表现形
式有可能不同,QTP提供了关键字视图和数据表,robot提出了决策表的概念,Watir的话本身没有什么特殊的模式,完全看测试人员把框架设计成什么
样了。其实本质上都是消息驱动的不同表现而已,例如刚才的手工测试的例子,测试数据发生变化我们可以把它看成一种消息,接收到这个消息A就开始执行测试。
”51testing论坛的jackmail:
“数据驱动中的 driven
一词,你可以简单的理解成导向,导向什么?结果。就是测试数据决定了测试结果,这就是所谓数据驱动,QTP实现了数据驱动的功能,模型,feature,
特征,无非是个词汇而已,怎么说都没问题,用QTP你可以简单的完成你想实现的数据驱动方法的测试,他就是实现了xx功能。还有关键字驱动,就是 关键字决定了结果。 在QTP里关键字就是step中的测试对象名称(对象方法属性,或者值(测试数据))。测试对象名称的改变,就决定了结果的变更。以前有些人写的所谓框架是把对象从Excel表格中导入导出的,他们实现的就是关键字驱动。
什么驱动,就是什么决定结果。本来结果是固定的,由于驱动数据的变更,导致了结果的不同,没那么复杂。其实概念都是人定的,少去钻牛角尖,理解个大概意思就行了。”
最后引用一下一篇关键字驱动的理解的文章,毕竟这是QTP主推的东西
最初用QTP就是简单的录制,然后修改脚本,缺点如下:
1. 应用软件必须具备一定的稳定性,并且在整个业务流程上都必须完整的实现了,否则顺序录制整能实现?
2. 自动化脚本的维护性成本非常的高
3. 自动化脚本的可重用性比较差
随之出现了关键字驱动的概念,一切都以对象为出发点,这有点像编程语言中从过程化向面向对象转化,在QTP中的具体实现方法是:
1. 在单个程序界面上将测试所涉及到的对象手工添加到对象库中
2. 在专家视图中基于对象库中的对象编写自动化测试脚本
以上这样做的明显的优点在于:
1. 脚本的可控性非常的强,模块化组织也比较好
2. 可以在开发完全实现所有的业务流程功能前就建立测试脚本,占据了比较大的主动性,为时间上的安排提供了更大的空间,一个词概括:“测试先行”
-
自动化测试框架——关键字驱动
2021-12-19 10:42:22关键字驱动 -
数据驱动和关键字驱动的研究与应用 (2016年)
2021-05-22 06:52:42测试自动化是大型软件测试的一个重要测试环节,可以节省测试人力,对待测软件做最基本的评估,...本文介绍的数据驱动和关键字驱动就是让测试数据从自动化脚本中分离出来单独维护,很好的解决了测试脚本的重用和维护问题。 -
转:自动化测试里的数据驱动和关键字驱动思路的理解
2018-07-09 20:51:15文章来源:https://blog.csdn.net/u010202588/article/details/38639811初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须,不就是参数和函数其嘛!其实其也体现了测试所不同与开发的一些... -
什么是关键字驱动自动化测试
2020-07-22 17:57:03关键字驱动脚本的特点是它描述一个测试事例做什么, 而不是如何做,测试脚本调用测试用例再具体执行。 第四章 关键字驱动的自动化测试框架 4.1基本原理 关键字驱动的自动化测试框架是对数据驱动的逻辑扩展,用关键字... -
python实现RobotFramework的关键字驱动
2022-03-12 15:03:141,把RF框架的脚本切换成csv格式,并且去掉空格,关键字与元素之间用,符号隔开,如下 2,创建KDT_eval的py文件,先读取csv的内容 将读取的每行内容,分割出关键字与参数,并且用eval()函数执行字符串的表达式 3,... -
关键字驱动
2021-12-15 10:32:03详细介绍关键字驱动 -
自动化测试框架之Robot framework-关键字驱动
2021-12-07 19:25:42KDT-关键字驱动( Robot framework关键字驱动),KDT全称为Keyword-driven testing 1、什么是关键字驱动? 关键字驱动测试也称为表格驱动测试或行动驱动测试 它将创建测试程序的步骤分为规划及实现两个阶段 ... -
基于关键字驱动自动化测试平台的设计与实现
2010-03-28 22:16:36在这样的前提条件下,论文采用了关键字驱动脚本技术,同时吸取了当前流行的自动化测试框架中一些先进的思想,提出了一个适合网管系统测试的自动化测试框架。然后论文对该框架的测试流程进行详细的描述,在此框架的... -
UI 自动化测试框架:关键字驱动+数据驱动
2022-02-24 16:38:111. 关键字驱动框架简介 原理及特点 关键字驱动测试是数据驱动测试的一种改进类型,它也被称为表格驱动测试或者基于动作字的测试。 主要关键字包括三类:被操作对象(Item)、操作行为(Operation)和操作值... -
seleniu+Python 数据驱动与关键字驱动的区别
2021-02-09 23:28:56数据驱动和关键字驱动简单例子(登录)数据驱动:程序和数据分离,测试数据存入一个文件中,脚本存入另一个文件中地址使用xxx代替数据文件:D:\\test\\loginData.txt文件内容:admin_cyl||123456aadmin_test||a123456... -
Selenium自动化框架:数据驱动、关键字驱动和混合
2021-08-25 19:19:47什么是Selenium框架? 这个 Selenium框架 是一种代码结构...关键字驱动测试框架 混合测试框架 Selenium中的数据驱动框架 Selenium中的数据驱动框架 是一种将数据集与测试用例分开的方法。一旦数据集从测试用例中分离. -
WebUI自动化框架 - 关键字驱动
2021-07-17 10:22:42关键字驱动介绍 什么是关键字驱动框架? 关键字驱动框架是一种功能自动化测试框架,它也被称为表格驱动测试或者基于动作字的测试。关键字驱动的框架的基本工作是将测试用例分成四个不同的部分。首先是测试步骤... -
【web自动化测试】selenium怎么实现关键字驱动
2022-02-08 20:09:02零基础也能实现关键字驱动。 -
python webdriver混合驱动测试框架(数据驱动+关键字驱动)
2020-12-05 08:56:15混合驱动:把数据驱动、关键字驱动结合起来一起使用testdata.txthttp://www.126.comhttp://www.sohu.comteststep.txtopen||chromevisit||${url}sleep||3主程序脚本hybrid.py#encoding=utf-8import refrom selenium ... -
Senuji Web Testing Framework:Senuji是关键字驱动的基于Selenium的测试自动化框架-开源
2021-04-25 15:19:08Senuji是一个关键字驱动的基于Selenium的测试自动化框架,旨在降低Java编程的复杂性。 Senuji对测试自动化入门者或对没有任何技术测试人员都可以使用Selenium测试自动化功能的功能非常有用。 Senuji具有以下内置功能... -
自动化测试中的数据驱动和关键字驱动
2021-01-14 09:46:55a.数据驱动:从某个数据文件(odbc,csv,excel...关键字驱动:从面向对象角度出发,同样业务逻辑编写成一个类或者函数作为关键字被不同的脚本调用每个步骤对应文件中一行内容c.DDT:官网参考:https://ddt.readthedocs... -
源码时代Python干货分享 |史上最全python关键字驱动自动化测试信
2021-01-14 09:47:16操作浏览器的方法都固定下来,不能变。操作方法需要的字段(定位方法,定位表达式,操作的值)用单独的列表示。...2.关键字驱动的框架的重要组成部分测试步骤(Test Step),测试步骤中的对象(Test ... -
关键字驱动测试
2018-07-19 22:41:32关键字驱动测试概述 也叫表格驱动测试 将业务逻辑和具体的脚本相互脱离,提高代码的可重用性,降低了脚本的维护量 特点:引入了脚本动态设计的思想;引入了对象化的思想性;实现了脚本、业务、数据的分离,把耦合... -
请问Pytest测试框架可以使用关键字驱动吗?
2020-10-15 09:19:36这样的话就可以达到测试脚本复用,但是我现在使用的是Pytest作为测试框架,想请问一下各位前辈,Pytest能支持这样的关键字驱动吗?如果不能的话是否需要重新编写一个框架? 望不吝赐教,谢谢。 -
如何理解自动化测试数据驱动与关键字驱动的区别?
2019-04-16 19:59:34初学者应该如何理解自动化测试数据驱动与关键字驱动的区别?本文将由千锋给大家分享一下。 一、关键字驱动KDT(Keyword-driven testing) 1、自动化测试框架发展的第三个阶段是关键字驱动测试框架阶段,它是当前... -
软件测试_3设计模式(POM模式、关键字驱动模式)
2022-05-12 15:39:11解决线性脚本问题 解决代码不能重复利用问题 解决后期的维护问题 分三层: 基础层:base,主要方selenium基础的原生方法 页面对象层:po,主要是用于存放页面的元素和动作 测试用例层:testcase,出发测试用例以及...