51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3222|回复: 0
打印 上一主题 下一主题

[原创] 从青铜到王者,小白也能写出高级代码!

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:21
  • 签到天数: 1016 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-6-30 10:20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    摘要:写代码就像建房子,一砖一瓦大家都知道,难点是在你如何盖的更高级。对于写代码来说,基础语法无非就那几个,很多人都会,关键是如何将代码写得健壮、写得条理清楚。
      在学习自动化开发语言过程中,很多人都会有一种感觉,就是自己好像什么都会一些,但是会的都是基础知识点,还不够”深“、不够高级,面试时不敢大胆的说:“我会!我懂!”
      特别是看别人写好的代码时发现,有好多个文件、方法,调来调去的、跳来跳去的,贼崇拜,大佬!大神级别的存在呀!
      但是看看自己只会写单个接口、单个方法,看起来很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文件的方法,代码如下:


      脚本思路:
      ·打开文件使用: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断言等代码片段。

      总结
      所有的项目代码都离不开基础知识,基础知识扎实稳定后,再去进行各种封装,对代码进行逐步优化、提炼,就可以从青铜升级成黄金了。
      过程中需要我们耐心、细心的去查找代码的共同点,以此建立对应的模板,从而减少代码量。
      所以大家在学习完基础后,可以尝试下做数据分离、模板封装、报告优化、持续集成,逐步优化代码,你就也是别人眼中的大佬了!
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-6 15:27 , Processed in 0.073396 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表