前言:
主使用到的有config配置文件、不定长参数、取类方法属性等知识点。
完成这样一个工厂后,写用例就不需要在用例类中去写很多特定场景的方法了。只需要在excel里中文调用便能达到效果,通俗易懂,使用自动化更适合新人上路
1、先设计用例
如下图,case_id为1的是一条常规的测试用例,不多说了
case_id为2
interface是commfun,这是一个标识,是commfun就要使用
method是中文,方法名,工厂中方法的中文定义
url、data、expected、Test result 是方法参数,数量区间[0,4]
2、代码设计
在用例类里设计
第一、在用例类里面将取到的case字段interface判断是不是commfun,如果是,就调用工厂入口,如果不是,继续执行用例。
传参,工厂方法里使用不定长参数,随例定义参数传值都行,
if case['interface'] == 'commfun':
"""
如果接口是公共方法,那么字段如下
method:公共方法名
title: 返回接果
url:参数
data:参数
"""
_isOk, _strLog = self._opear_keyword(method=case['method'],
result=case['title'],
param_1=case['url'],
param_2=case['data'],
param_3=case['expected'],
param_4=case['Test result'])
else:
#执行用例
第二、工厂方法实现
一、先在配置文件里将方法与中文方法名配置好,如下图
二、方法名初始化,方法类初始化
self.con = Config()
self.syskey = Handkeyworld()
self.userkey = Userkeyworld()
self.keyword = dict(self.con.items('userkeyword'))
self.syskeyword = dict(self.con.items('syskeyword'))
三、取出不定长参数里的method键,就是方法中文名,见这行method = self.keyword[kwargs['method']]
四、通过方法中文名称取到公共方法后,取出公共方法,见这行func = getattr(self.userkey, method, None),然后使用func便可调用到公共的方法了。
def method_factory(self, *args, **kwargs):
"""
用例公共方法工厂
默认传的参数为:
result:用来接收结果的变量,格式可为${abc}
method:调用的方法,这里设计方法都使用中文
param_x:参数,数量不限。格式可为${abc}会替换为已存在的数据
"""
#m_bool = False
if kwargs.__len__() > 0:
try:
kwargs['method']
except KeyError:
return False, 'keyword:用例[method]字段方法没参数为空.'
try:
method = self.keyword[kwargs['method']]
m_bool = True
except KeyError:
try:
method = self.syskeyword[kwargs['method']]
m_bool = False
except KeyError:
return False, 'keyword:方法[' + kwargs['method'] + '] 不存在,或未注册.'
if m_bool:
func = getattr(self.userkey, method, None)
_isOk, _strLog = func(*args, **kwargs)
return _isOk, 'keyword:[' + kwargs['method'] + '] 方法:.' + _strLog
else:
fuc = getattr(self.syskey, method, None)
_isOk, _strLog = fuc(*args, **kwargs)
return _isOk, 'keyword:[' + kwargs['method'] + '] 方法:' + _strLog