接上篇
目前只做了以下几种检查:
1.为空检查,检查表中是否有空
# 为空检查
def check_null(self, list_check,table_name,column_name):
print("check null")
for index, sub in enumerate(list_check):
pytest.assume(len(str(sub).strip())!=0,' {0} {1}列 第{2}行 为空 '.format(table_name,column_name,index+self.ignore_row+1))
#pytest.assume(len(str(sub).strip())!=0),"value not "
2.重复检查,某些列中的内容是不能有重复的
# 重复检查
def check_repeat(self, list_check,table_name,column_name):
print("check repeat")
if(list_check==None):
assert "{0}为空".format(list_check)
else:
if (len(set(list_check)) == len(list_check)):#set() 的长度和原来的相等说明没有重复项
return
counter_list_check = Counter(list_check)
repeat_item = [key for key,value in counter_list_check.items() if value>1] #得到重复元素的列表
for item in repeat_item:
item_repeat_row = [i+self.ignore_row+1 for i,sub in enumerate(list_check) if sub == item]
pytest.assume(item==None,' {0} {1}列 {2} 在{3}行重复 '.format(table_name,column_name,item,item_repeat_row))
3.格式检查,比如应该要配成 200;2003;4412;12,然后策划一不小心多了个分号,用脚本可以立刻检查出来。这里我用正则表达式来实现
# 格式检查
# 检查指定列是否符合给定的正则表达式
def check_regex(self,list_check,regex ,table_name,column_name):
print("check regex")
for index, sub in enumerate(list_check):
sub= str(sub)
pattern = re.compile(regex)
pytest.assume(pattern.fullmatch(sub)!=None ,' {0} {1}列 第{2}行 格式有误 '.format(table_name,column_name,index+self.ignore_row+1))
4.索引检查,比如某个宝箱的奖励物品 id 必须能索引到 item 表的 id ,不然箱子打不开,
# 索引检查
def check_reference(self, list_checK, table_name,column_name, com_table_name,com_column_name,com_column_list):
# list_check 被检查的列
# com_talbe_name 需要索引到的表名
# com_column_name 需要索引到的列名
print("check reference")
for index, sub in enumerate(list_checK):
pytest.assume(sub in com_column_list,' {0} {1}列 第{2}行 无法索引到 {3}表的{4}列'.format(table_name,column_name,index+self.ignore_row+1,com_table_name,com_column_name))
5.值域检查,主要用来检测某些重要配置的数据在某个范围内,比如某些重要道具的奖励数量或者抽高级卡的概率,避免策划一步小心多填了个 0 导致的事故
# 值域检查
def check_range(self,list_check,min,max,table_name,column_name):
#被检查的内容必须是数值
#todo 考虑字符也可以装换成数字
for index,sub in enumerate(list_check):
num = float(sub)
pytest.assume(num>=min and num<= max,' {0} {1}列 第{2}行 超出预期范围[{3} ,{4}]'.format(table_name,column_name,index+self.ignore_row+1,min,max))
详细源码 ConfigCheck.py
import pytest
import re
from collections import Counter
class ConfigChecker:
def __init__(self):
#一般配置表前3行是表头,不参与检查
self.ignore_row = 3
# 索引检查
def check_reference(self, list_checK, table_name,column_name, com_table_name,com_column_name,com_column_list):
# list_check 被检查的列
# com_talbe_name 需要索引到的表名
# com_column_name 需要索引到的列名
print("check reference")
for index, sub in enumerate(list_checK):
pytest.assume(sub in com_column_list,' {0} {1}列 第{2}行 无法索引到 {3}表的{4}列'.format(table_name,column_name,index+self.ignore_row+1,com_table_name,com_column_name))
# 为空检查
@pytest.mark.skip('不执行')
def check_null(self, list_check,table_name,column_name):
print("check null")
for index, sub in enumerate(list_check):
pytest.assume(len(str(sub).strip())!=0,' {0} {1}列 第{2}行 为空 '.format(table_name,column_name,index+self.ignore_row+1))
#pytest.assume(len(str(sub).strip())!=0),"value not "
# 重复检查
def check_repeat(self, list_check,table_name,column_name):
print("check repeat")
if(list_check==None):
assert "{0}为空".format(list_check)
else:
if (len(set(list_check)) == len(list_check)):#set() 的长度和原来的相等说明没有重复项
return
counter_list_check = Counter(list_check)
repeat_item = [key for key,value in counter_list_check.items() if value>1] #得到重复元素的列表
for item in repeat_item:
item_repeat_row = [i+self.ignore_row+1 for i,sub in enumerate(list_check) if sub == item]
pytest.assume(item==None,' {0} {1}列 {2} 在{3}行重复 '.format(table_name,column_name,item,item_repeat_row))
# 格式检查
# 检查指定列是否符合给定的正则表达式
def check_regex(self,list_check,regex ,table_name,column_name):
print("check regex")
for index, sub in enumerate(list_check):
sub= str(sub)
pattern = re.compile(regex)
pytest.assume(pattern.fullmatch(sub)!=None ,' {0} {1}列 第{2}行 格式有误 '.format(table_name,column_name,index+self.ignore_row+1))
# 值域检查
def check_range(self,list_check,min,max,table_name,column_name):
#被检查的内容必须是数值
#todo 考虑字符也可以装换成数字
for index,sub in enumerate(list_check):
num = float(sub)
pytest.assume(num>=min and num<= max,' {0} {1}列 第{2}行 超出预期范围[{3} ,{4}]'.format(table_name,column_name,index+self.ignore_row+1,min,max))
# 是否与某列完全相等
#pass
总结:目前是以一个配置表对应一个 py 来实现的,之后改成 基于 “数据驱动 + 关键字驱动” 来实现,这样别的组员不懂代码也可以用 excel 来写用例并执行了。完成了再更新下一篇。