自动化测试模型(二)
- 数据驱动测试
在做软件测试过程中,测试人员通常喜欢把数据存放在Excel、数据库、XML、文本文件或者JSON等文件中。我们在进行业务操作的时候,通常不会始终以同一个用户名登录、特别是在建立一些基础数据时,比如:玩游戏,已经存在一个玩家的名字了,当您再次创建同名角色时就会报错。
数据驱动测试就是利用数据库、Excel等,作为驱动测试脚本的参数数据来执行测试的过程,当然测试结果也有可能被存储到数据库或者Excel文件当中。
作者在这里给大家举一个应用Excel文件内容,作为搜索关键词来驱动测试脚本的例子,代码如下。
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_datamodular.py文件:
from appium import webdriver
from comm import searchkey
import time
import xlrd
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()
file = 'bing_data.xls'
wb = xlrd.open_workbook(filename=file) #打开文件
sheet = wb.sheet_by_name('Bing搜索') #通过名字获取表格
icount=sheet.nrows
for row in range(1,sheet.nrows): #sheet.nrows取得有多少行,1开始是抛除第一行(列名)
kw=sheet.cell(row,0).value #取得第1列的每行数据赋给kw
#根据Excel表格数据进行检索
searchkey(driver, kw)
# 等待2秒,让大家看到搜素后的结果信息
time.sleep(2)
# 单击“返回”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_toolbar_back').click()
# 等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
如果您希望成功运行脚本,必须先安装其所依赖的操作Excel的xlrd和xlwt两个模块,如图8-201所示。
图8-201 安装Excel读写操作依赖的两个模块信息
bing_data.xls文件内容,如图8-202所示。
图8-202 bing_data.xls文件内容信息
执行ys_datamodular.py脚本文件后,您将发现从第2行开始的关键词都被搜索一次,每次搜索中间停顿2秒钟展现搜索结果后,再返回搜索页继续搜索相应关键词。这就是数据驱动测试的一个示例。善于思考的您还发现了什么?也许您会问,是不是我们可以将模块化驱动测试和数据驱动测试组合运用呢?回答是当然可以。
- 关键字驱动测试
关键字驱动测试是基于数据库或者Excel数据表中配置的“关键字”来驱动脚本,这里以Excel数据表的为例,给大家看一下数据表中的“关键字”,如图8-203所示。
图8-203 keywords.xls文件内容信息
针对Bing搜索,为编写示例脚本方便,作者准备了一个keywords.xls文件,在该文件的“Bing搜索”数据表中共包含3列数据,第一列为“类型”,为了处理简单作者编写脚本前定义了一个规则,即:指定文本框、按钮等元素根据不同元素属性定位的方式,在本例中作者仅用到了ID属性来定位元素,因为有时需要延时操作,所以还在类型中指定了一个“OT”来表示“OTHER”,每次遇到类型为“OT”时,让脚本延时2秒钟。第二列为“关键字”,就是对应不同元素ID的属性信息。第三列为“值”,这里它主要针对的是文本框,即:向文本框元素输入的数据内容。
因为这里只是为了展示,作者仅用简单的代码给大家写了一个示例脚本,代码如下。
from appium import webdriver
import time
import xlrd
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()
file = 'keywords.xls'
wb = xlrd.open_workbook(filename=file) #打开文件
sheet = wb.sheet_by_name('Bing搜索') #通过名字获取表格
for row in range(1,sheet.nrows): #sheet.nrows取得有多少行,1开始是抛除第一行(列名)
type_kw=sheet.cell(row,0).value #取得类型
kw=sheet.cell(row,1).value #取得关键字
data=sheet.cell(row,2).value #取得值
if type_kw=='OT': #类型为OT时,表示OTHER,这里让其延时2秒
time.sleep(2)
elif ((type_kw=='ID') & (data!="")): #当data值不为空,说明它是一个文本框
driver.find_element_by_id(kw).send_keys(data) #向文本框发送数据
else:
driver.find_element_by_id(kw).click() # 根据我们设定的规则隐含意思对其执行单击操作
上面脚本就是一个关键字驱动测试的示例代码,是不是非常简单呢?事实上,如果您希望脚本代码能够适用于不同的应用来进行自动化测试,像作者这样的规则设定是不行的,因为界面元素的定位方式还有很多,如:Xpath、CSS、Class等,而针对不同的界面元素它们可能都具有click()等方法,所以如果您希望做成一个通用的框架,还需要进一步优化、处理,这里作者也仅仅是给您一个思路,让您认识、理解关键字驱动测试。关键字驱动测试优点显而易见,只要测试人员理解被测试系统的业务、理解关键字模板相关列的含义及使用方法,在不会编写Appium脚本的情况下,他也能够书写自动化测试用例。
不同的自动化测试模型,有各自的特点,在实际工作中,它们通常组合起来使用。大家在应结合自己所在企业的特点,测试团队因地制宜的选择适当的自动化测试模型来提升工作效率和工作质量。对于团队规模比较小且缺少自动化测试经验的团队,作者建议先要从理解Appium自动化测试框架、掌握元素定位、不同业务情况的处理方面着手,线性测试无疑是一种好的选择。对于测试团队规模较大、测试人员能力参差不齐、有明确测试分工(如:功能测试团队、专项测试团队、自动化测试团队、性能测试团队等)、业务系统多样这样的企业,建议能够构建更加适应于团队的定制化专属框架。综上所述,不同的自动化测试模型均有各自的特点,无论是现在还是在将来都有其存在的意义和价值,如何选择适用于企业的自动化测试模型才是最重要的内容。