从青铜到王者,小白也能写出高级自动化代码

news2024/11/24 20:21:46

写代码就像建房子,一砖一瓦大家都知道,难点是在你如何盖的更高级。对于写代码来说,基础语法无非就那几个,很多人都会,关键是如何将代码写得健壮、写得条理清楚。

在学习自动化开发语言过程中,很多人都会有一种感觉,就是自己好像什么都会一些,但是会的都是基础知识点,还不够”深“、不够高级,面试时不敢大胆的说:“我会!我懂!”

特别是看别人写好的代码时发现,有好多个文件、方法,调来调去的、跳来跳去的,贼崇拜,大佬!大神级别的存在呀!

但是看看自己只会写单个接口、单个方法,看起来很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断言等代码片段。

总结

所有的项目代码都离不开基础知识,基础知识扎实稳定后,再去进行各种封装,对代码进行逐步优化、提炼,就可以从青铜升级成黄金了。

过程中需要我们耐心、细心的去查找代码的共同点,以此建立对应的模板,从而减少代码量。

所以大家在学习完基础后,可以尝试下做数据分离、模板封装、报告优化、持续集成,逐步优化代码,你就也是别人眼中的大佬了!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1258489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThinkPHP6学生选课管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6学生选课管理系统 一 介绍 此学生选课管理系统基于ThinkPHP6框架开发,数据库mysql8,前端bootstrap。系统角色分为学生,教师和管理员。学生登录后可进行选课,教师登录后可查看选课情况…

「直播预告」替代 Oracle,我们还有多长的路要走?

数字经济浪潮席卷全球,我国数字经济也进入快速发展阶段,作为数字化重要载体,国产软件的重要性不言而喻。近年来,国际局势复杂多变,在客观要求和主观需求的双重驱动下,核心技术自主可控的紧迫性也愈加凸显。…

Gradle更新失败(Error:Connection timed out: connect...)解决方法

一. 发现问题 当我们Copy一个项目或者在不同的机器打开AndroidStudio项目时,可能会遇到这样的问题:Gradle一直在转啊转,然后报错 Error:Connection timed out: connect. If you are behind an HTTP proxy, please configure the proxy setti…

顺序表总结

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 目录 🌤️arraylist的简…

【图像分类】基于深度学习的中草药分类系统的设计与实现(ResNet网络,附代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…

如何在安卓Termux中使用SFTP文件传输并结合内网穿透工具实现远程传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

跨境电商与物联网:智能设备的未来

随着科技的不断发展,跨境电商和物联网的结合呈现出前所未有的新格局。在这个数字化的时代,智能设备正成为跨境电商的新宠,为商业、物流和消费者带来了全新的体验。本文将深入探讨跨境电商与物联网的结合,探讨智能设备在未来的发展…

为什么你的团队不需要使用拉取请求 | IDCF

作者:Kief Morris 译者:冬哥 原文:https://infrastructure-as-code.com/book/2021/01/02/pull-requests.html 前 言 Github 引入了Pull Request拉取请求(简称PR)实践和相关的支持功能,使运行开源项目的人…

Day58权限提升-网站权限后台漏洞第三方获取

webshell 一般我们的渗透流程就是信息收集,发现漏洞,漏洞利用,一些漏洞成功之后获得一些相应的权限,还有一些是漏洞利用成功之后并没有取得的权限,而这个权限是要通过漏洞利用之后在利用其它地方取货的权限。 权限的获…

docker (简介、dcoker详细安装步骤、常用命令)- day01

一、 为什么出现 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应…

8 个适用于电脑的顶级免费分区恢复软件

Windows PC 上的数据管理有时可能会带来压力,尤其是当您有多个分区时。大多数时候,磁盘管理工具使分析磁盘、释放空间甚至创建分区变得非常容易。但有时会发生不可预见的事件,可能导致分区丢失,从而造成潜在的数据灾难。嗯&#x…

Keil报错_Error:CreateProcess failed,Command:‘xxx\fromelf.exe‘

1、报错信息 2、分析及解决 错误原因:fromelf.exe路径错误,无法执行命令。 发生情景:编译从另一个电脑拷贝的代码时。 解决方法: 1、当你不需要生成bin文件时,可以选择不执行这个命令。(去掉√&#xf…

Java 之 lambda 表达式(一)

目录 一. 前言 二. lambda 表达式语法 2.1. 语法1:无参,无返回值 2.2. 语法2:一个参数,无返回值 2.3. 语法3:两个参数,lambda 体中有多条语句 2.4. 语法4:两个以上参数,有返回…

使用paddledetection的记录

首先在这里使用的是是paddle--detection2.7的版本。 成功进行训练 目录: 目录 数据集准备 配置文件的修改 使用的是BML的平台工具: !python -m pip install paddlepaddle-gpu2.5 -i https://mirror.baidu.com/pypi/simple --user %cd /home/aistudio…

识别验证码

背景 需求是要爬取某网站的数据, 已有账号密码, 但这个网站需要登录, 登录需要输入验证码 验证码样式如下 调研了Tesseract框架, 识别效果不佳. 后来使用ddddocr, 能正确识别. https://github.com/sml2h3/ddddocr 代码如下 def ocr():response requests.get(http://xxx/get…

Jenkins Pipeline应用实践

Jenkins Pipeline是一种可编程的、可扩展的持续交付管道,允许您使用脚本来定义整个软件交付过程。 以下是使用Jenkins Pipeline创建和配置流水线的基本步骤。 Part 01. 创建一个Pipeline Job 在Jenkins中创建一个新的"Pipeline"类型的Job。 以下是在Je…

【STM32F103】HC-SR04超声波测距模块详解(附工程文件)

前言: 使用的硬件:STM32F103C8T6,HC-SR04,ST-Link(其他烧录器也可以),0.96寸OLED屏幕(非必须,仅供显示测距结果,可以使用串口助手代替)&#xff…

rabbitMQ对消息不可达处理-备份交换机/备份队列

生产者发送消息,在消息不可达指定队列时,可以借助扇出类型交换机(之前写过消息回退的处理方案,扇出交换机处理的方案优先级高于消息回退)处理不可达消息,然后放置一个备份队列,供消费者处理不可…

Pytorch中的gather的理解和用法

Pytorch中的gather的理解和用法 这个Gather的用法花费了点时间,我相信很多人一开始不太懂。 跟着我简单理解。 首先样例是: tensor([[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])然后index: [[2, 1, 0]]然后执行的代码: tensor_0.gather(0…

使用 SIEM 管理安全事件

每家公司都必须处理检测、管理和解决安全事件,未能制定事件响应计划可能会对任何组织产生重大的影响,无论是在财务损失还是声誉损害方面。本文探讨了事件响应的重要性、检测和管理事件的关键要素,以及帮助组织处理安全事件的最佳实践。 安全…