从手动测试菜鸟,到自动化测试老司机,实现自动化落地

news2024/11/14 6:40:46

虽然许多伙伴是一个测试老人了,但是基本上所有的测试经验都停留在手工测试方面,对于自动化测试方面的实战经验少之又少。

其实,究其原因:一方面是,自动化方面不求上进,觉得会手工测试就可以了,自动化就能躲就躲吧;另一方面是,觉得自动化是个慢慢积累的过程,不是那么容易学会的,既然不是那么学会的,那是不是......,就先不学了。(我估计大部分人都中枪了,哈哈)然后,就一拖再拖,能拖就拖,殊不知,自动化已经逐步成为测试领域必备的生存技能了。

所以,为了顺应测试行业发展的潮流,我就开始了从测试“原始人”到测试“现代人”的转变。(顺便说一下,想快速成长,有两个方面的因素也很重要,一方面想学习,是内因,感兴趣的事情,一般效率都会高很多;另一方面项目迫切需要,是外因,正所谓有压力才有动力)

考虑到python语言相对于大部分语言的语法简单,容易上手的特点,再加之python在自动化测试方面的广泛应用,我选择了python语言进行学习。

01 菜鸟是怎样炼成的

这一部分主要讲讲从一无所知到正式入门,Python从零开始学习的步骤.

1、基本语法的学习——打铁还需自身硬

首先,找一个适合零基础的学习网站,粗略过一遍python基本语法,推荐

https://www.sharetechnote.com/

https://www.runoob.com/python/python-tutorial.html

Str、List、dict、set、loop、if等等,这些都是最最基本的语法知识。

需要注意的是,学习教程中的练习实例,一定要一步一步跟着敲下来,这样学习效果最佳。

等到基本语法学的差不多了,就可以直接进入实战阶段了。

需要特别指出的是,没有必要在语法方面反复看,看过一遍基础就可以了,看再多遍也只是纸上谈兵,重要的还是通过实战来巩固前面学习到的知识,也更加深对语法的使用技巧的理解。

2、项目实战——上阵练兵

有了一些语法基础之后,接下来要结合项目,实现一些自动化功能。或者,如果没有合适的项目进行练习,给自己定一个目标作为项目,限定时间,实现一定的功能需求

我学习python的时候,由于项目中有一个几乎是日常需要做的事情,比较适合进行自动化,提高工作效率。

具体需求是这样的。从客户返回的产品日志log中提取关键信息,然后以固定的模板填写excel表格,回传给客户。再详细一点呢,就是从txt多个文件和excel文件中,提取某些数据的值,填写到表格中,便于做问题定位和分析,其中涉及到平均值,最大值,同时涉及到几种固定的类别(就不更具体了,免得读者对号入座,联想到自己身边的同事~~)

接下来我就来说说,我是如何完成这个项目的。

第 1 则

-THE FIRST-

程序初版面世:

通过日夜奋战,到处求医问药,搞定功能

第一步

最开始,从待处理的txt文件出发,先实现一些特点比较明显的,看起来比较简单的数据处理,比如搜索含有特定的关键字的所有行,然后,取这些行中某一特定位置的值,然后计算这些值的平均值。

大体思路是:

1、 遍历txt文件中所有的行

2、然后通过关键字搜索

3、 搜索到的行,通过一定的字符进行分割,然后存为list

4、按照list下标取值,然后把所有的值加起来求和,再除以个数

虽然我知道这个方法不是最聪明最快的,但是我知道它是我当前的水平能做到的一种方法,至少能实现功能,满足项目需求。

这个阶段学习到的方法是:

open()打开文件

readlines()读取行

find()找到关键字,后来发现find只能找到一次,并且返回值是所在的位置,不方便,随后改为使用if X in Y来实现了 re.split。

这个阶段,用到的基础知识点是list,for循环,str

第二步

随后,另一个需求随之而来,我上面计算出来的值,得想个办法存下来,等自动化执行完之后,好去统计,然后填表。

因此,我想了一个办法:把重要数据print出来,然后把执行的log保存下来(从网上找的方法),然后人工进行查看和填表。

这个阶段学习到的方法是:

class类

write写文件

第三步

后来发现,这种方法的工作效率貌似有点低,明明是很高大上的自动化,怎么成了半自动化了?

所以,我想到的是,把计算出来的数据,保存成表格,然后去表格里查看,就不用从茫茫执行记录里边去找了。

这个阶段学习到的方法是:

读EXCEL的模块xlrd

图片

写EXCEL的模块xlwt   

图片

第四步

最初生成的表格,基本上是几个类似的数据就生成一个EXCEL,其他类似的再生成一个EXCEL。所以,如果一旦填写的数据有上百个(这个项目就是这种情况),那差不多也要10几个甚至20多个表格。

因此,我的想法是,能不能把这些生成的数据统统生成到一个表格里,然后再去这个表格里去找我需要的数据。

有了这个想法之后,我的想法就不止停留在了这个层面了。而是,既然我打算自动生成数据到统一的一个表格里边,然后去取数据,再填到我的结果表格里边,那不如一步到位,通过程序直接把计算出来的结果,填到我创建的结果模板表格里边,实现计算---填表全自动化。

图片

这个阶段用到的主要方法是仍然是读EXCEL的模块xlrd和写EXCEL的模块xlwt,不过,改变了一下这两种方法的用途,原来只用于把txt提取的数据存下来备用,现在直接用于写入最终的结果表格中。

第五步

需要特别指出的是,经过上面几个过程之后,所有的txt部分的需求才终于实现了,但是EXCEL数据读取、计算还没有进行。所以,接下来的主要目标,就是实现EXCEL表格的数据统计。

我首先想到的方法是,获取Excel的单元格的值,然后进行计算。有了之前txt数据的类似的经验,只要解决了如何获取单元格的值,就能实现此功能。

这个阶段,我学习到的方法是cell().value,取单元格的值。

第 2 则

-THE SECOND-

程序优化改版:

通过试用和代码审查,优化代码

至此,需要实现的需求都一步一步的通过探索实现了。

但是,由于时间紧迫,第一版代码以自己最容易hold住的方式实现功能,没有特别去思考是否最优方案,所以,此时的代码只能用“水”来形容。

所以,接下来我做的是:

一方面:推广试用

让同事们试用我的代码,发现一些明显的问题,事实证明,实践是检验真理的唯一标准。试用过程中,发现的问题见python学习和工具试用过程中遇到的问题部分

另一方面:代码检视

1)算法优化

在让团队成员试用工具的同时,重新审视自己的代码,寻找优化点。首先是算法方面的优化。

 ①提取代码逻辑完全相同的复制粘贴的代码,使用for循环进行结构简化。示意图如下:

图片

②对于代码逻辑类似的,可酌情通过自定义函数库,来进行调用,这样可以使代码更加简洁,逻辑更加清晰。

例如,查找文件夹下的文件;通过一定的关键字搜索txt文件的所有行,然后把找到的行切割,然后取出需要的列,形成列表,最后形成dataframe,便于计算平均值等

图片

③寻找内置库或者第三方库中是否有更简便的方法,替代代码中一坨代码实现的功能

例如,计算平均值用mean()替代求和后再除以数量

图片

③用dataframe的groupby和value_counts()方法来输出一坨数据中,

图片

可以说,代码优化的过程,更是一个各方面飞速进步的过程。

2)效率及易用性优化

除了上面的代码结构和调用的模块方法的优化,审视代码过程中,还识别出了一些执行效率和易用性方面的需求:

① 控制循环中某一分支执行次数,获取到一次数据之后,就停止循环。

图片

②将log打印信息以一定的颜色输出,方便提示用户一些重要的文件存储信息。

图片

3)可靠性优化

除了效率和易用性方面,在这个项目过程中,也识别出了可靠性方面的需求。例如,存放txt文件名的list,优化之前是通过动态获取目标路径下的所有txt,然后通过list下标来取,这种方法最大的问题是,如果目标路径下有多余的txt,则用下标可能取的不对

图片

优化后,将待处理的文件,通过文件名进行关键字搜索,如果搜索到,则统一放到新建的文件夹下,并重命名为固定的文件名,这样做可以保证后面调用文件列表的时候,一定是我需要的,不会取错 。

图片

02 python学习和工具试用过程中遇到的问题

1、int越界

File "pandas\_libs\lib.pyx", line 615, in pandas._libs.lib.astype_intsafe

OverflowError: Python int too large to convert to C long

大体意思就是:溢出错误,Python int太大,无法转换为C long

图片

python的int是没有上限的,但是C有,如果传入参数大于C语言的int上限就会出错。

解决方案:

把data_df_phy_ipa["IPA"] = data_df_phy_ipa["IPA"] .astype('int')

改为data_df_phy_ipa["IPA"] = data_df_phy_ipa["IPA"] .astype('int64')

或data_df_phy_ipa["IPA"] = data_df_phy_ipa["IPA"] .astype('float')

遇到此类问题,其他参考方案是:

修改算法,不用这个c写的函数。

升级python版本,有的时候这个错误是python2的,将python升级为3。

2、重命名文件或文件夹时,提示已存在,异常结束执行

FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件

图片

解决方案:

对目标文件夹或文件做判空处理

if not Path.exists(Path.joinpath(newdir,newname))

3、使用round方法时,提示错误

AttributeError: 'float' object has no attribute 'round'

图片

错误提示:AttributeError: ‘float’ object has no attribute ‘round’

方案一:

该错误是由于numpy库版本较低导致的,需要更新numpy库至最新版本

pip install --upgrade numpy

更新时需要保证pip版本比较新,否则会提示pip版本更新较低更新失败

python3 -m pip install --upgrade pip

图片

F:\Log_Analysis_Auto\0_log_all_auto_fill>pip install --upgrade numpy

Requirement already satisfied: numpy in c:\python36\lib\site-packages (1.19.5)

WARNING: You are using pip version 21.0.1; however, version 21.1 is available.

You should consider upgrading via the 'c:\python36\python3.exe -m pip install --upgrade pip' command.

F:\Log_Analysis_Auto\0_log_all_auto_fill>c:\python36\python3.exe -m pip install --upgrade pip

Requirement already satisfied: pip in c:\python36\lib\site-packages (21.0.1)

Collecting pip

  Downloading pip-21.1-py3-none-any.whl (1.5 MB)

     |████████████████████████████████| 1.5 MB 328 kB/s

Installing collected packages: pip

  Attempting uninstall: pip

    Found existing installation: pip 21.0.1

    Uninstalling pip-21.0.1:

      Successfully uninstalled pip-21.0.1

Successfully installed pip-21.1

方案二:

如果方案一解决不了问题,请

如下这种格式的代码

rb_s2 = df[df['Cell']=='SCC2'].RB.mean().round(2)

修改为:

rb_s2 = round(df[df['Cell']=='SCC2'].RB.mean(),2)

4、提示含有gbk或者utf-8解码错误的报错

原因:

这种情况是因为txt文件没有存为utf-8 无bom格式

解决方案:

Ultra edit打开txt文件,然后另存为格式选择“UTF-8-无BOM”

图片

5、提示无权限Permission denied:

PermissionError: [Errno 13] Permission denied:

图片

原因:

程序执行完成之前,需要读写的文件不能打开,否则会读写冲突,执行终止

解决方案:

程序执行过程中,不要打开文件

6、invalid literal for int() with base 10

报错:ValueError: invalid literal for int() with base 10

原因:

原因为参数有误,int()函数可以把数字字符串转化成int类型的数字,但是不能传入非数字的字符串

解决方案:

非数字字符串改成数字字符串

03 python学习总结

1、处理数据pandas库的dataframe比较强大

数据被DataFrame了之后,就像是操作EXCEL表格中的数据一样,只要你敢想,它就敢做。就我目前用到的DataFrame功能,我总结如下:

统计均值

统计最大值

统计哪个值最多

整列删除

筛选数据

整列合并

DataFrame的功能远远不止这些,感兴趣的小伙伴可以自行学习

2、对于读写EXCEL的方法,有如下的总结:

openpyxl可以处理xlsx文件和XLSM文件,可以写入单页sheet超过65535行,可以同时读写Excel;xlrd、xlwt只能处理xls,最大可以写65535行的表格。

不过,如果EXCEL表格的数据量不是很大时,还是建议使用xlrd、xlwt套装。

04 后记

最后,一些Python学习心得分享给大家,希望对大家有所帮助。

自动化脚本写作,重在实战

潜力是逼出来,有压力才有动力

写代码之前最好先构思好代码逻辑,躺石头过河的笨方法只适合初学者,并且后期维护成本较高,返工的概率也高一些

Python编码选模块很重要,选对模块事半功倍

希望本文能够帮助那些“原始人”快速“进化”为“现代人”,或者对那些已经成为“现代人”有一些启发。

我下一步的计划是,学习和实践Python+Selenium的自动化框架,我将在后续的文章中把我的学习心得分享给大家,敬请关注。

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

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

相关文章

【计算机基础】用bat命令将Unity导出PC包转成单个exe可执行文件

Unity打包成exe可执行文件 上边连接是很久以前用过的方法,发现操作有些不一样了,并且如果按上述操作比较麻烦,所以写了个bat命令。 图1、导出的pc程序 如图1是导出的pc程序,点击exe文件可运行该程序。 添加pack_project.bat文件 …

基于 SpringBoot 的在线考试系统

专业团队,咨询就送开题报告,欢迎大家私信留言,联系方式在文章底部 摘 要 网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合,利用java技术建设在线考试系统,实现在线考试的信息化管理。则对…

PX4固定翼控制器详解(五)——L1、NPFG控制器

之前已经讲解了TECS高度与速度控制器,今天是PX4固定翼控制器系列讲解的最后一期,主题是PX4的位置控制器。PX4 1.12及其之前的版本,使用的位置控制器为L1控制器。1.13及其之后的版本,PX4更新了NPFG控制器。NPFG控制器在较强风速下有…

活动目录安全

活动目录安全 1.概述2.常见攻击方式SYSVOL与GPP漏洞MS14-068漏洞Kerberoast攻击内网横移抓取管理员凭证内网钓鱼与欺骗用户密码猜解获取AD数据库文件 3.权限维持手段krbtgt账号与黄金票据服务账号与白银票据利用DSRM账号利用SID History属性利用组策略利用AdminSDHolder利用SSP…

宠物空气净化器去浮毛哪家强?希喂、美的和米家实测分享

要说养宠物后里最让我感到幸福感飙升的家电,必须是宠物空气净化器,没有之一。很多人都喜欢宠物,但应该没有人喜欢清扫,特别是家里宠物多,或者一群宠物在自己家聚在一起之后,要疯狂清除浮毛,真的…

剖解相交链表

相交链表 思路:我们计算A和B链表的长度,求出他们的差值(len),让链表长的先多走len步,最后在A,B链表一起向后走,即可相逢于相交节点 实现代码如下: public class Solution {public …

单链表进阶

之前已经介绍过单链表及其一些简单的功能 这次来简单介绍单链表一些的其他接口 1.在指定位置之前插入数据 具体原码,三个参数,phead是链表的指针,pos是节点的地址,x是需要插入的数据。 pos不能为空指针,因为pos为空…

React启动时 Error: error:0308010C:digital envelope routines::unsupported

错误信息: 错误原因:通常与 Node.js 的新版本中 OpenSSL 的默认行为变化有关。从 Node.js 17 开始,OpenSSL 默认启用了 OpenSSL 3.0 的一些新特性,这可能会影响到一些旧的或未更新的库。 解决办法:可以通过设置环境变…

基于STM32设计的室内育苗环境管理系统(物联网)

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】ESP8266-WIFI模块【2】MQ135传感器【4】DHT11传感器【5】B1750传感器 …

【Diffusion分割】FDiff-Fusion:基于模糊学习的去噪扩散融合网络

FDiff-Fusion: Denoising diffusion fusion network based on fuzzy learning for 3D medical image segmentation 摘要: 近年来,去噪扩散模型在图像分割建模中取得了令人瞩目的成就。凭借其强大的非线性建模能力和优越的泛化性能,去噪扩散模…

Flexus X实例全方位指南:智能迁移、跨云搬迁加速与虚机热变配能力的最佳实践

目录 前言 一、云迁移关键挑战 1、企业实例选型关键挑战 2、云算力关键挑战之一 3、云算力关键挑战之二 二、本地IT及其他云搬迁到Flexus X实例上的独有优势 1、Flexus X实例超强性能,遥遥领先同规格友商实例 (1)底层多重调优&#x…

网络编程——TCP网络通信

通信步骤: 1、连接 2、传输数据 3、关闭连接服务端的创建流程: 1、创建服务端socket对象 socket_family:网络地址类型AF_INET--代表的是ipv4地址类型 socket_type:套接字类型SOCK_STREAM--代表的是tcp套接字SOCK_DGRAM--代表的是udp套接字 2、绑定自己的…

新房安装了约克VRF中央空调真的是明智的选择!

夏天越来越热,新房安装了中央空调真的是太明智了!当初装修时,考虑到家里空间大,我就决定装一个中央空调。对比了好多品牌后,朋友推荐了约克VRF中央空调。装好以后,简直惊喜不断!      强效除…

基于SpringBoot+Vue+MySQL的美食点餐管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 在数字化快速发展的今天,餐饮行业也迎来了转型升级的重要机遇。传统餐饮管理方式面临效率低下、顾客体验不佳等问题。为此,开发一款基于SpringBootVueMySQL架构的美食点餐管理系统显得尤为重要。该系统旨…

【Qualcomm】高通SNPE框架简介、下载与使用

目录 一 高通SNPE框架 1 SNPE简介 2 QNN与SNPE 3 Capabilities 4 工作流程 二 SNPE的安装与使用 1 下载 2 Setup 3 SNPE的使用概述 一 高通SNPE框架 1 SNPE简介 SNPE(Snapdragon Neural Processing Engine),是高通公司推出的面向移…

Leetcode尊享面试100题-252.会议室

给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。 示例 1: 输入:intervals [[0,30],[5,10],[15,20]] 输出&#xff…

记录Mac编译Android源码踩过的坑

学习Android源码,如果电脑配置还不错,最好还是下载一套源码,经过编译后导入到Android Studio中来学习,这样会更加的直观,代码之间的跳转查看会更加方便。因此,笔者决定下载并编译一套源码,以利于…

【C++算法】链表

知识总结 常用技术: 1.画图!!——>直观形象便于理解 2.引入虚拟”头结点“ 便于处理边界情况方便对链表操作 3.不要吝啬空间,大胆定义变量 4.快慢双指针——判环、找链表中环的入口、找链表中倒数第n个节点 链表中的常用…

电力领域大模型

2023年12月,arXiv预印本平台发表了一篇题为"Large Foundation Models for Power Systems"的研究论文。该文系统探讨了大型基础模型如大型语言模型(LLMs)在电力系统建模和运行中的应用前景。研究重点关注了大型基础模型在最优潮流计…

php+mysql安装

1.卸载mysql 没启动不停止 2.下载 3.解压 4.点击安装 5.出现成功 端口占用修改 修改端口89或者87 可视化扩展 修改后重启 开启扩展