python+yaml:如何把接口自动化的代码写得更高级?
Posted 软件测试小dao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python+yaml:如何把接口自动化的代码写得更高级?相关的知识,希望对你有一定的参考价值。
写代码就像建房子,一砖一瓦大家都知道,难点是在你如何盖得更高级。对于写代码来说,基础语法无非就那几个,很多人都会,关键是如何将代码写得健壮、写得条理清楚。
在学习自动化开发语言过程中,很多人都会有一种感觉,就是自己好像什么都会一些,但是会的都是基础知识点,还不够”深“、不够高级,面试时不敢大胆的说:“我会!我懂!”
特别是看别人写好的代码时发现,有好多个文件、方法,调来调去的、跳来跳去的,贼崇拜,大佬!大神级别的存在呀!
但是看看自己只会写单个接口、单个方法,看起来很low,完全没自信出去面试,也不敢开高薪。
最近自己发表了一个文章,就是把自己学过的知识点由一锅大骨汤,浓缩成了一碗浓汤后发表出去的,居然有人评论说:“大佬,我跟你混了!大佬,求带带!”
瞬间觉得自己得到了精神上的升华,自信了不少。今天简单给大家分享下自己是如何把接口自动化的代码写得更高级。
想要让代码看起来更加高级一点,无非离不开以下几个地方:
·以模块或业务对用例进行同类划分,分为不同的py文件;
·相同的函数方法直接封装成模板template,以便其他方法调用;
·基础配置管理;
·测试数据管理;
·……
本文主要以python+yaml来实现接口自动化,展示如何将基础代码优化成规范化看起来高级的代码。
目录设计
·API:主要用户存放接口请求模板
·SETTINGS:主要用于存放yml文件和对应的读取方法
·TESTCASES:主要用于存放用例,可根据业务或模板再细分不同的文件夹来管理对应模块或业务的用例
接口文档
本文展示五个接口:
·获取验证码(get):入参需要环境、手机号
·登录app(post):入参需要环境、手机号、验证码、身份信息uuid
·创建订单(post):入参需要环境、手机号、身份信息uuid
·关联销售顾问(post):入参需要
·取消订单(post):入参需要订单号、取消原因、取消来源
代码设计-青铜级别
以登录模块的接口为例,进行代码优化升级。
1.完成登录需要两个步骤:
a) 获取短信验证码;
b) 通过手机号+短信验证码进行登录。
2.未优化前代码分为3部分:变量、获取短信验证码函数、登录函数,如下图:
通过上面代码图可以看出可优化的地方如下:
1.不同函数内有相同的代码片段;
2.环境变量配置数据未独立开,用户需要修改下单环境或下单用户手机号时,需要打开每个代码文件进行修改。
代码设计-黄金级别
设计思路
·YAML-通过yaml文件管理环境和手机号变量
·将接口请求的公共基础数据单独为一个函数方法
·将接口请求按照post和get请求分类,定义为2个请求模板
代码目录
基础配置
前提:
通过pip安装yaml:pip install PyYAML。
SETTINGS文件夹主要存放yaml配置文件和读取yaml文件内容的方法,目录如下:
1.BASE_SETTINGS.YML
Yaml配置脚本内容:
语法注意事项:
·区分大小写;
·使用缩进表示层级关系;
·使用空格键缩进,而非Tab键缩进;
·缩进的空格数目不固定,只需要相同层级的元素左侧对齐。
数据类型:
对象:键值对的集合(简称 “映射或字典”),键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔(若不隔开,无法读取到对应的值)。
数组:一组按序排列的值(简称 “序列或列表”),数组前加有 “-” 符号,符号与值之间需用空格分隔。
2.读取YAML文件
新建read_yaml.py,主要用于定义读取yaml文件的方法,代码如下:
import yaml
adef read_yml():
with open('E: \\Practice_python\\实例\\PAC\\SETTIMGS\\BASE_SETTINGS.YMIL ' , encoding='utf-8') as f:
data=yaml.safe_load(f.read()) #safe_load将读取内容转为json格式
return data
if _ 'name_ -='_main__ ':
read_ym1()
脚本思路:
·打开文件使用:with…open
·读取文件内容:file.read()
·将读取内容转为json格式:yaml.safe_load
API模板
为获取验证码和登录的接口请求内相同代码创建模板,进行相关功能接口请求时,直接调用模板,传入对应的参数即可。
API模板可分为3个部分:
1.公共请求数据
将post和get请求内,相同的环境变量(调用读取yaml文件内容函数)、域名、进行独立封装。
2.Post请求
将post类型的接口请求进行独立封装,并返回json格式的数据。
3.Get请求
将get类型的接口请求进行独立封装,并返回json格式的数据。
具体封装效果如下:
登录模块
获取验证码和进行登录时,直接调用已封装好的读取yaml内的函数、post请求函数、get请求函数。
从上图可以看到,获取验证码和登录的函数内,只要定义好入参,然后直接调用api模板即可发起请求,无需在两个函数在再去单独写request请求和assert断言等代码片段。
总结
所有的项目代码都离不开基础知识,基础知识扎实稳定后,再去进行各种封装,对代码进行逐步优化、提炼,就可以从青铜升级成黄金了。
过程中需要我们耐心、细心的去查找代码的共同点,以此建立对应的模板,从而减少代码量。
所以大家在学习完基础后,可以尝试下做数据分离、模板封装、报告优化、持续集成,逐步优化代码,你就也是别人眼中的大佬了!
最后
特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。
包括,软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2021软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助……
关注我公众号:【软件测试小dao】即可获取这份资料了!
以上是关于python+yaml:如何把接口自动化的代码写得更高级?的主要内容,如果未能解决你的问题,请参考以下文章
Python + pytest + yaml + allure + mysql + redis + 钉钉/企业微信通知,接口自动化框架V2.0,支持多业务处理,仅需维护yaml用例,无需要编写代码
Python语言+pytest框架+allure报告+log日志+yaml文件+mysql断言实现接口自动化框架
Python语言+pytest框架+allure报告+log日志+yaml文件+mysql断言实现接口自动化框架