第一章 游戏测试
- 游戏测试的特点
- 游戏的三个层次
- 游戏自动化的可行性
1.1游戏测试的特点
-
游戏测试灵活性
常规测试模式:固定输入输出
游戏测试:非固定输入输出,但都有特定规律(游戏的规则);譬如各种纸牌游戏、休闲游戏无法固定预料用户的输入和输出,依据游戏的规则有多种情况 -
游戏测试主观度的把握
除了软件测试中所关注的功能逻辑、环境兼容、软件效率等,还有游戏性 -
极限测试
bug出现:骨灰级玩家;测试覆盖极端情况 -
知识广博性
1.2游戏测试的三个层次
- 常规软件测试
- 参数调节
游戏的多样性导致测试实现表现多样性 - 游戏性测试
1.3游戏自动化测试的可行性
- 常规软件自动化测试
基于白盒思想的内部实现的自动检查
基于黑盒思想的外部功能表现的自动检查
例子:
- 游戏:联想推箱子游戏
- 目的:测试地图中箱子的数量与目的地数量是否一致
- 不足:只能判断是否一致,无法校验存在障碍物时能够所有箱子都推进目的地
- 思路:地图均存放于map.dat文件中,map.dat文件结构为:第0关地图的宽,第0关地图的长,从左到右,从上到下的格子类型序列;第1关地图的宽,第1关地图的长…
格子类型:02表示该位置仅为箱子,03表示该位置仅为箱子的目的地,05表示该位置人和箱子目的地重合,07表示箱子和箱子目的地重合
书中脚本autolt语言,使用python语言实现
假设map.dat数据格式为(十进制):
- 代码块
import logging
level=3 #最大关卡数个关卡
level_now=0 #当前关卡数,从0开始计算
with open('/Users/apple/Desktop/map.txt','r') as f:
list=f.readlines() #readlines与readline区别;readlines一次读取整个文件自动将文件内容分析成一个行的列表;readline每次只读取一行比readlines慢很多
print(list)
for i in range(0,len(list)):
j=4 #取出的list空格也算一个字符
num2=0
num3=0
num5=0
num7=0
list[i]=list[i].rstrip('\n') #去除结尾的空格
wight=list[i][0] #宽
heigh=list[i][2] #长
s_map=int(wight)*int(heigh) #面积
while(j<len(list[i])):
if j%2 !=0: #排除空格
j=j+1
if list[i][j]=='2':
num2=num2+1
if list[i][j]=='3':
num3=num3+1
if list[i][j]=='5':
num5=num5+1
if list[i][j]=='7':
num7=num7+1
j=j+1
box=num2+num7
destinations=num3+num5+num7
print(box)
print(destinations)
level_now=level_now+1 #从零开始计算,为了符合逻辑,关卡数加一
if box != destinations: #将不相等的在控制台输出
logging.error("第%d"%level_now+"关:\n"+"箱子数:%d"%box+"\n"+"目的地总数:%d"%destinations+"\n"+"不相等")
- 结果
- 总结
- 上述案例:自动化直接检查文件内部数据的做法与常规软件无区别,但想要通过游戏外部操作,像常规玩家一样,自己玩游戏的自动化脚本与常规的功能自动化有较大区别
- 基于空间识别操作自动化测试:游戏内控件多为自定义控件
- 常规软件自动化线性:固定的操作顺序;游戏具有开放性操作,不断的布局变化
- 游戏自动化:伴随人工智能的讨论和类似游戏外挂的实现