本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/111835459
之前我写过一篇 Session-Cookie的分享,说要把写的接口自动化框架做个分享,就开始了。
这一篇分享主要是说 整个框架的设计思路+系统登录的处理
个人博客:https://blog.csdn.net/zyooooxie
来现在的公司快2年了,主要做的是财务需求;我想给这个财务系统写个接口自动化脚本;是想证明下我的能力,也想检验下我的代码水平。
成果:
0.Excel来管理用例;
1.代码放公司的git服务器;
2.Jenkins本地构建,定时执行;
使用到:xlrd + requests + pymysql + pytest + allure
此系列分享,主要讲的是 思路+代码;
不太推荐用我的源码,是因为我这代码 不见得适用 你的需求;
你实际用不了,源码有啥用呢?
P.S:我目前所在金融测试组 去年10月招了位 全职自动化“大佬”,搞接口自动化,一个月也没啥成绩,就灰溜溜离职了。
我个人觉得:水平差就是“有罪”;提升自我这件事,万万不可偷懒。
之前分享过 系统登录接口的详情;
需求:生产+测试2套环境 都要可用;
实际我有2个思路:
使用cookie
这一套方案做法是 前端登录后,拿到SESSION字段值,放到脚本来跑;
使用session()
这一套方案是 生产环境会把验证码抛出来,手动输入【测试环境 我的账号是白名单,脚本执行 啥都不用管】;
最终我选了第二套。
class LoginLogout(object):
url_image = '/api/auth/get/verify/image'
url_key = '/api/auth/get/key'
url_login = '/api/auth/login'
url_logout = '/api/auth/logout'
def __init__(self, env='test'):
self.host = CommonFun.read_config(section=env, option='host')
self.port = CommonFun.read_config(section=env, option='port')
if self.port == '': # 生产环境
self.Host = ''.join(['http://', self.host])
else:
self.Host = ''.join(['http://', self.host, ':', self.port])
if env == 'test' or env == 'product':
self.url_image_new = ''.join([self.Host, self.url_image])
self.url_key_new = ''.join([self.Host, self.url_key])
self.url_login_new = ''.join([self.Host, self.url_login])
self.url_logout_new = ''.join([self.Host, self.url_logout])
else:
raise Exception('环境传参 有误')
def login(self):
session = requests.session()
res_key = session.get(self.url_key_new)
return_key = res_key.json()['data']
assert res_key.status_code == 200
if self.url_key_new.find('zyooooxie') == -1:
Log.info('测试环境')
code_str = '1234'
else:
Log.info('生产环境:请手输验证码,谢谢!!!')
res2 = session.get(url=self.url_image_new, params={
'key': return_key})
assert res2.headers['Content-Type'] == 'image/jpeg'
code_str = input('image 验证码: ')
res_login = session.get(url=self.url_login_new, params={
'code': code_str, 'key': return_key, 'password': 'zyooooxie', 'phone': 'zyooooxie'})
assert res_login.status_code == 200
assert res_login.json()['msg'] == 'success'
Log.info('登录成功')
return session, self.Host
def logout(self, session):
res = session.post(self.url_logout_new)
assert res.status_code == 200
assert res.json()['msg'] == 'success'
Log.info('成功退出')
@staticmethod
def read_config(section, option=None, config_path_name=None, getint=None, getfloat=None):
if config_path_name is None:
ini_path = common_dir
ini_name = 'common.ini'
config_path_name = os.path.join(ini_path, ini_name)
conf = MyConf()
conf.read(config_path_name)
if option is None:
return conf.items(section=section)
if getint is not None:
return conf.getint(section=section, option=option)
elif getfloat is not None:
return conf.getfloat(section=section, option=option)
else:
return conf.get(section=section, option=option)
这部分代码:
第一篇就主要这些;该系列第二篇 接口自动化框架之 excel用例设计
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie