背景说明: 1、为了防止三天打鱼两天晒网式学习 2、每日更新1-2个小知识点或者案例 3、只看和跟着做的理解程度是不一样的 4、建议一起打卡练习 5、互相督促打卡 + v:yifuqiang2021
接口关联与测试框架实现
接口测试的操作步骤 准备数据 发送请求 判断响应 根据测试步骤,将数据和请求相分离 数据都放在/data目录下,一条测试用例一个yaml文件,方便维护与管理 常用操作的封装

import unittestimport requestsfrom demo0815.conf import read_inifrom ddt import ddt,file_datafrom demo0810.api_key import Apikey@ddtclass CaseDemo(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:cls.url = read_ini.read_ini('./conf/config.ini','TEST_SERVER','url')cls.ak = Apikey()cls.token = Nonecls.userid = Nonecls.openid = Nonecls.cartid = None# login接口的测试用例@file_data('./data/path.yaml')def test_01(self,path,data):url = self.url + pathres = self.ak.do_post(url=url,json=data)print(res.text)# 赋值全部变量,类名.变量token = self.ak.get_text(res.text,'token')if token:CaseDemo.token = tokenprint(CaseDemo.token)# userinfo接口的测试用例@file_data('./data/userinfo.yaml')def test_2(self,path,headers):url = self.url + pathheaders['token'] = CaseDemo.tokenres = self.ak.do_get(url=url,headers=headers)print(res.text)# 获取userid,useriduserid = self.ak.get_text(res.text,'userid')openid = self.ak.get_text(res.text, 'openid')if userid:CaseDemo.userid = useridif openid:CaseDemo.openid = openid@file_data('./data/addcart.yaml')# addcart 添加商品到购物车,基于token,userid,openiddef test_3(self,path,headers,data):url = self.url + pathheaders['token'] = CaseDemo.tokendata['userid'] = CaseDemo.useriddata['openid'] = CaseDemo.openidres = self.ak.do_post(url=url, headers=headers,json=data)print(res.text)# 获取cartidcartid = self.ak.get_text(res.text, 'cartid')if cartid:CaseDemo.cartid = cartid@file_data('./data/createorder.yaml')# createorder 购物车下单def test_4(self,path,headers,data):url = self.url + pathheaders['token'] = CaseDemo.tokendata['userid'] = CaseDemo.useriddata['openid'] = CaseDemo.openiddata['cartid'] = CaseDemo.cartidres = self.ak.do_post(url=url, headers=headers, json=data)print(res.text)if __name__ == '__mian__':unittest.main()

在这个实例中,关于类的内部变量的使用,需要先定义以及初始化操作 在操作的过程中,发现接口之间的关联的数据的保存操作重复,每次都需要手动大量赋值
def assignment(self,kwargs):for key,value in kwargs.items():# 基于数据内容的格式来进行判断改用哪种操作if type(value) is dict:self.assignment(value)else:if value:passelse:kwargs[key] = getattr(self,key)return kwargs
@file_data('./data/createorder.yaml')# createorder 购物车下单def test_4(self,path,**kwargs):url = self.url + pathvalue = self.assignment(kwargs)res = self.ak.do_post(url=url, headers=value['headers'], json=value['data'])print(res.text)
接口的框架无非是 让unittest专注于接口逻辑层 让数据的准备和维护更加方便 剩下的就是复制粘贴改数据 以及,在使用的过程中加深对python基础的概念的理解
文章转载自走向易富强之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




