自动化测试模型(一)
8.8.1 自动化测试模型概述
在自动化测试运用于测试工作的过程中,测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象,总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。
- 线性测试
首先,我们一起来看下使用Bing搜索APP来搜索“于涌 loadrunner”的操作步骤。打
开Bing搜索应用后,会出现一个引导界面,单击“跳过”按钮,如图8-196所示。
图8-196 跳过按钮及对应的ID相关属性信息
然后,单击搜素框,如图8-197所示。
图8-197 搜索框及对应的ID相关属性信息
而后,在出现的搜索文本框输入“于涌 loadrunner”搜索词,如图8-198所示。
图8-198 搜索文本框及对应的ID相关属性信息
最后,单击“全部”按钮,如图8-199所示。
图8-199 全部按钮及对应的ID相关属性信息
上述过程的脚本代码,如下所示:
from appium import webdriver
import time
caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
'appPackage': 'com.microsoft.bing',
'appActivity': 'com.microsoft.clients.bing.app.MainActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
#单击跳过按钮
driver.find_element_by_id('com.microsoft.bing:id/skip_text').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#单击搜索框
driver.find_element_by_id('com.microsoft.bing:id/search_box').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#向搜索文本框输入查询的搜索词内容
driver.find_element_by_id('com.microsoft.bing:id/search_text_field').send_keys('于涌 loadrunner')
#单击“全部”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_as_web').click()
通过自动化测试工具录制或者编写脚本的时候,按照业务操作步骤产生的相应线性脚本,
每个脚本相对独立,不依赖于其他脚本。在前面章节我们写的脚本基本都是线性脚本,不知道大家有没有发现这样的脚本存在什么问题呢?是的,这种类型的脚本结构清晰明了,但脚本代码相对冗长。举个例子:假设要在Bing搜索,搜索2次关键词,那么每次都有定位元素重复性的脚本代码,如下所示。
from appium import webdriver
import time
caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
'appPackage': 'com.microsoft.bing',
'appActivity': 'com.microsoft.clients.bing.app.MainActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
#单击跳过按钮
driver.find_element_by_id('com.microsoft.bing:id/skip_text').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#单击搜索框
driver.find_element_by_id('com.microsoft.bing:id/search_box').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#向搜索文本框输入查询的搜索词内容
driver.find_element_by_id('com.microsoft.bing:id/search_text_field').send_keys('于涌 loadrunner')
#单击“全部”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_as_web').click()
#等待2秒,让大家看到搜素后的结果信息
time.sleep(2)
#单击“返回”按钮,参见图8-200所示
driver.find_element_by_id('com.microsoft.bing:id/opal_toolbar_back').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#单击搜索框
driver.find_element_by_id('com.microsoft.bing:id/search_box').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#向搜索文本框输入查询的搜索词内容
driver.find_element_by_id('com.microsoft.bing:id/search_text_field').send_keys('于涌 Appium')
#单击“全部”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_as_web').click()
图8-200 返回按钮及对应的ID相关属性信息
大家不难发现,每进行一次搜索都有至少4行重复性代码。那么如果我们要搜索10个关键词,就会有40行重复性元素定位、操作的代码。
- 模块化驱动测试
模块化驱动测试借鉴了编程语言的思想,将一些经常使用的重复性代码给封装成类或者放到一个公共模块封装为函数,方便业务脚本调用它们,而减少冗余代码。
这里同样给大家举一个例子,就是将搜索的重复性过程封装到一个公共模块写到函数里,代码如下所示。
comm.py文件:
import time
def searchkey(driver,kw):
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#单击搜索框
driver.find_element_by_id('com.microsoft.bing:id/search_box').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#向搜索文本框输入查询的搜索词内容
driver.find_element_by_id('com.microsoft.bing:id/search_text_field').send_keys(kw)
#单击“全部”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_as_web').click()
ys_modularization.py文件:
from appium import webdriver
from comm import searchkey
import time
caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
'appPackage': 'com.microsoft.bing',
'appActivity': 'com.microsoft.clients.bing.app.MainActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
#单击跳过按钮
driver.find_element_by_id('com.microsoft.bing:id/skip_text').click()
searchkey(driver,'于涌 loadrunner')
#等待2秒,让大家看到搜素后的结果信息
time.sleep(2)
#单击“返回”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_toolbar_back').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
searchkey(driver,'于涌 Appium')
结合上面两个脚本,作者将搜索的重复性过程封装到comm.py文件。封装了一个名称为searchkey()的函数,包含3条元素定位、操作语句和1条睡眠语句。而后在业务测试脚本testscript.py文件导入comm模块的searchkey函数。只需调用2次searchkey函数就执行了先前8条语句的内容,可以看出封装后,代码量明显减少。
当然除了将重复代码封装成公共函数以外,还可以使用PageObject设计模式将页面元素和操作封装成类进行调用,这个内容作者将在“PageObject设计模式”章节进行详细讲解。它也属于模块化驱动测试。
用ChatGPT做软件测试