6年软件测试经验,从我自己的角度理解自动化测试

news2024/11/14 20:55:47

  接触了不少同行,由于他们之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的人。 本人从事软件自动化测试已经近6年,从server端到web端,从API到mobile,切身体会到自动化带来的好处与痛楚,在此分享一下个人体会。

想做自动化,首先得了解一下自动化测试的一些常见问题:


自动化测试一些问题 

什么是自动化测试? 

1.为什么要进行自动化测试

为什么进行自动化测试,答案要从自动测试的收益和人肉测试的成本说起:
 a. 自动化测试节约成本(根据项目)
       毕竟自动化测试确实解放了一批人力(人力成本才是IT公司最大的成本),可以让机器没日没夜的执行一些重复劳动.

 b.有些测试项目手工很难实现(手工成本较高)
       比如12306的压力测试、负载测试,同时找那么多人去测试不现实可以通过机器去模拟.
 c.项目质量流程需要
    比如版本管理需要build verify,以保证check in的code不会影响版本库。类似于smoke test

2.自动化测试的优缺点

优点
  避免测试人员因重复劳动产生厌倦
   提高测试效率
   保证每次测试地一致性和可重复性
   更好的利用无人值守时间
   进行一些手工无法进行的测试
   维护成本相对比较高
缺点
  系统开发时间不一定能缩短
  没有手工测试发现缺陷多
  UI layout issue 不容易发现

3.什么样的项目适合做自动化测试(dev手一抖,auto忙一宿)

有以下几个特点的项目比较适合自动化测试:
1. 项目变动少
2. 周期长
3. 项目资源足够(自动化不是一个人完成的,需要一帮人长期维护)

举例说明: 
    互联网项目,一周内要上线,你不上线别人上线人家就不用你的,项目周期短,变动快,你自动化还没做好,项目说不定就下线了。比如某宝双12活动相关项目,一周之内就下线了。
    适合做自动化测试的项目,比如某宝客户端,每个release,大部分功能都不变,并且3-5年内项目不会下线,这个就比较适合自动化.

4.什么样的人适合做自动化测试?

这个问题是写给想要做自动化测试的人,或许你以为软件测试的门槛很低,低到任何人都可以做,随便点点就可以了,这个行业太low了,所以你想做自动化测试,提升自己的逼格,我想说手工测试并不low,如果让一个什么都不懂,一点业务基础都没有的人去做测试,能测出来问题吗?不要忽略你的业务知识储备.
你的业务知识储备的积累能让你成为不可替代的行业专家,而做自动化的码农会因为一个时代的更迭被小鲜肉替代。

扯了这么多,究竟什么什么样的人能做自动化测试?
我的理解分一下几点:
 a. 拥有代码能力
    掌握一门开发语言,java、Python、ruby、c#
 b. 熟悉被测系统
  比如你是web测试,你就得懂js、css、html、xpath
  你是移动端测试,你就得具备Android 开发基础和iOS开发基础,会debug app
  你是 C/S测试你就要很熟悉TCP、IP协议
 c. 掌握一套自动化测试框架(工具)
    比如 selenium/appium 
            nunit/testng
           robot framework/cucumber
 
 d. 善于学习,达到知其然知其所以然
    IT行业变化太快,每隔一段时间就会出现一些新兴的东西,也会出现原来很火的东西逐渐没落,谁也无法预测。
    曾经诺基亚还是手机霸主,靠塞班一统天下,然而不思进取,落得个卖身求生存.
    曾经qtp很火,曾经selenium也很火,现在appium也很火
    软件行业从桌面软件到web端,又从web端迁移到移动端,谁也不知道下一个是什么。而我们作为软件行业的从业者,不能因为那些很火的东西不火了而让自己没落,一个人最为核     心的能力就是学习能力,如果你善于学习,你就不必担心这些变迁,因为你可以毫无压力的迁移,selenium的原理你掌握了,学习appium简直小菜一碟,因为appium使用的是
    selenium WebDriver protocol .如果你能做到知其然知其所以然,你也可以造轮子,改造appium,毕竟现在很多功能需要完善。
    
    如果你没有达到以上的几点,建议你还是做手工测试吧。

5.如果你有代码基础,想要从事自动化测试怎么去学习?

很多初学者很纠结,学qtp还是学selenium
我的建议是学selenium,开源的,免费的,你可以下载源码研究,去了解其原理,再者现在selenium的资料不要太多,随便搜搜一大堆,学起来比较轻松。
不建议学selenium IDE录制,当然你可以通过录制一些然后转换为相应的脚本去学习,等你学好了selenium, 再去学appium你会有一种天然的似曾相识。为什么不建议学QTP/UFT?因为收费/臃肿/现在做桌面软件测试的工作已经不太多了。
关于买书,不建议买书,很多书已经过时了,并且质量渣渣,你买了那些书中的code已经不能用了,如果你真的想学,就去官网找example,去相应的社区和群交流,或者直接看API/源码.

总结: 

新人学习自动化测试要:

  •  掌握一门门开发语言
  •  掌握一些基础的知识
  •  少买书,多看测试框架的document,多去社区交流
  •  不断学习,提升自己发现问题,解决问题的能力(不做伸手党,多动手)

软件自动化测试的学习步骤

大概步骤如下:

1. 做好手工测试(了解各种测试的知识)->  2. 学习编程语言-> 3. 学习Web基础(HTML,HTTP,CSS,DOM,Javascript)或者 学习Winform

-> 4. 学习自动化测试工具 ->5. 学习自动化测试框架 -> 6. 实现自动化测试用例 -> 7. 开发自动化测试工具 ->8. 开发自动化测试框架
 

自动化测试的最高境界是:  开发测试工具,设计自动化测试框架, 让别人用。

自动化测试的本质

自动化测试的本质是:用程序测试程序。 也就是说学习“编程语言”是学习自动化测试的基础。

很多人问我学自动化测试,应该去学什么自动化工具。 我的回答是,第一步:应该先学习编程语言,以后再去学自动化测试工具

自动化测试是一定要写代码的, 编程语言水平的高低决定了自动化测试水平的高低, 有了扎实的编程技术,干什么都可以。

学习编程语言时, 要把自己当做开发人员, 系统地学习各种编程知识。

自动化测试学习的误区

很多新手一开始,就学习复杂的自动化测试工具, 我觉得这样是本末倒置了。

如果不先理解HTTP协议, 就不会理解Jemeter, LoadRunner, Fiddler, SoapUI这些工具的。

如果不先理解HTML,DOM, 就不会理解Firebug 这种工具的

如果不先理解Win32 API,  就不会理解Windows 窗体自动化测试的原理的。

如果自己没有开发过网站, 就不会理解网站的各个方面,测试起来难免有遗漏。

总之学习自动化测试,需要循序渐进, 把基础打好。

自动化测试的职位

自动化测试工程师的职位叫做: (SDET) Software Development Engineer in Test.   专注于自动化测试

手动测试工程师叫:               (STE)Software test enginer.           专注于手动测试

在微软有很多SDET的职位,但是没有STE的职位, STE职位一般都是外包给外包公司的,  目前自动化测试还是非常吃香的。

自动化测试分类

自动化测试也有非常多的种类, 

  1. 对Web UI 的自动化测试程序
  2. 对Windows 窗体UI的自动化测试程序
  3. API测试, 比如(测试WCF service, Web API 等)
  4. 数据库测试, 比如测试存储过程
  5. 接口测试 (这种只能用自动化测) 
  6. 单元测试
  7. 性能测试, 性能测试都需要用到自动化

Web自动化测试分类

目前大部分项目都是Web的, 所以我们说的自动化测试,大部分都是针对Web程序的自动化测试, Web自动化测试分两类: 

第一类是:模拟用户真实操作,比如,模拟点击鼠标,键盘输入,等,去操作浏览器上的控件。 (代表框架有selenium-webdriver,   VS Coded UI)

这类的自动化测试的是通过高级语言(C#, JAVA, Python 等)来调用selenium的一些工具来操作浏览器,帮助我们实行Web UI自动化

第二类是:模拟HTTP请求。 类似于这种【12306火车票网站自动登录工具】, 这方面的知识,目前市面上资料比较少。 (以后我会出一个系列的教程)

自动化测试的知识点 

应该像开发人员一样的心态去学习技术, 自动化测试需要掌握以下的知识:

了解Javascript, CSS的知识。 

熟练掌握DOM和HTML知识, (用来解析Web界面)

熟练掌握XML技术,(需要用XML保存测试数据,用XML展现测试报告)

熟练使用C# P/inoke技术调用Windows API (可以用来操作Winform 窗口)

熟练掌握窗体"句柄"的概念

熟练使用C# 操作Windows 注册表 

熟练使用C# 中的Process 类

熟练掌握数据库的基本操作语句 (测试数据库肯定要用到)

熟练掌握HTTP协议的知识 (请参考我的 HTTP系列博客 [HTTP协议详解])

熟练掌握C# 中的HttpWebRequest 类的用法 (用于模拟HTTP请求)

熟练掌握正则表达式

自动化测试的书籍推荐

关于软件自动化测试的书,真心不多, 我查过市面上所有关于自动化测试的书,只找到下面这边书, 掌握了这边书,基本上自动化测试就入门了。 

自动化测试工具

测试套件工具: JUnit,  Nunit,  MSTest,  这几个工具功能都一样学起来比较简单。   

性能测试工具: JMeter, VSTS 负载测试, LoadRunner(收费), QTP(收费)

Web UI 测试框架:WebDriver/Selenium,  VSTS Coded UI, Watri

Windows UI 测试框架:VSTS Coded UI 

其他工具:   firebug,  Fiddler 

最后:【可能给你带来帮助的教程】

相信你如果掌握了上图上面所有的知识技能,并且能够灵活的运用的话,月薪20k以上并不会是什么问题,上图的所有学习资料都已经整理好了,小伙伴们可以下方卡片可以自助拿走

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

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

相关文章

Ansible自动化运维工具---安装及命令模块

目录 引言 一、Ansible概述 1.1、Ansible 自动运维工具特点 1.2、Ansible 运维工具原理 1.3、Ansible系统架构 1.4、Ansible的特性 二、安装Ansible 三、Ansible命令模块 command模块 shell模块 cron模块 user模块 group模块 copy模块 file模块 hostname 模块 p…

[acwing周赛复盘] 第 90 场周赛20230211 补

[acwing周赛复盘] 第 90 场周赛20230211 补 一、本周周赛总结二、 4806. 首字母大写1. 题目描述2. 思路分析3. 代码实现三、4807. 找数字1. 题目描述2. 思路分析3. 代码实现四、4808. 构造字符串1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 T1 模拟T2 模拟…

ThingsBoard-实现定时任务调度器批量RPC

1、概述 ThingsBoard-CE版是不支持调度器的,只有PE版才支持,但是系统中很多时候需要使用调度器来实现功能,例如:定时给设备下发rpc查询数据,我们如何来实现呢?下面我将教你使用巧妙的方法来实现。 2、使用什么实现 我们可以使用规则链提供的一个节点来实现,这个节点可…

Linux系统服务:Apache安装及配置应用

目录 一、Apache安装 1、Apache简介 2、Yum安装 3、编译安装 4、服务管理 5、编译安装实现systemctl服务管理 二、Apache配置应用 1、基础应用 2、隐藏版本号 3、更改监听端口 一、Apache安装 1、Apache简介 Apache即阿帕奇是一款开源的、世界使用排名第一的Web服务…

2023 年腾讯云服务器CVM快速配置购买教程,新手上云必备!

腾讯云服务器快速配置购买教程是新手必备的上云教程。主机教程网在本文中以腾讯云服务器为例,给大家带来一个完整的、手把手教学的服务器购买流程。助力快速完成服务器的购买、配置、以及网站的搭建,给新手节省宝贵的时间,避免采坑&#xff0…

【软件测试】大厂测试开发你真的了解吗?测试开发养成记......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 在一些大公司里&…

2D图像处理:2D ShapingMatching_缩放_旋转_ICP_显示ROI

文章目录 调试结果参考调试说明问题0:并行运行问题问题1:模板+Mask大小问题问题2:组合缩放和旋转问题3:可以直接将计算边缘的代码删除问题4:如何在原始图像上显示匹配到的ROI问题5:计算的原始旋转角度不需要判断,直接可以在ICP中使用问题6:绘制坐标轴问题7:绘制ROI调试…

Nginx - 深入理解nginx的处理请求、进程关系和配置文件重载

概述 Nginx的系统学习整理的第三篇博客,主要介绍nginx的应用场景和架构基础,以便更好的理解,再生产环境中进行性能调优。 Nginx的三个主要应用场景 1.静态资源服务,通过本地文件系统提供服务 2.反向代理服务,强大的性…

AOSP Android11系统源码和内核源码

推荐阅读 商务合作 安全产品 安全服务 2023年招聘 安全培训服务 软件定制服务 Android系统定制服务 安全/软件开发的课程列表 1.下载repo工具 (1).创建bin,并加入到PATH中 mkdir ~/binPATH~/bin:$PATH (2).安装依赖库 sudo apt-get install bison g-mult…

leetcode练习一:数组(二分查找、双指针、滑动窗口)

文章目录一、 数组理论基础二、 二分查找2.1 解题思路2.2 练习题2.2.1 二分查找(题704)2.2.2 搜索插入位置(题35)2.2.3 查找排序数组元素起止位置(题34)2.2.4 有效的完全平方数(题367)2.2.5 x 的平方根&…

MySQL——单表、多表查询

一、单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varcha…

Mask-RCNN(2) : 代码使用

Mask- RCNN原理及网络详解,参见:Mask- RCNN网络详解 1. Mask-RCNN代码使用 该项目参考自pytorch官方torchvision模块中的源码(使用pycocotools处略有不同) 环境配置 Python3.6/3.7/3.8Pytorch1.10或以上pycocotools(Linux:pip install pycocotools; …

直面原理:5 张图彻底了解 Android TextToSpeech 机制

ChatGPT 如此火爆,但它的强悍在于 NLU(自然语言理解)、DM(对话管理)和 NLG (自然语言生成)这三块,而 Recognition 识别和 TTS 播报这两块是缺失的。假使你的 App 接入了 ChatGPT&…

rar压缩文件暴力破解

1. 简介 rar 压缩文件资源又不少是被加密的,密码通常也比较简单,我们可以通过暴力破解的方式来获取,通常耗时也比较小 程序地址:rar压缩密码暴力破解程序 2. 使用说明 2.1 基本语法 rar-bruteforce-crack.py [--start START] …

【visio使用技巧】图片导出pdf时去掉多余空白

问题 在visio导出pdf格式的图片时,往往会存在多余的白边,如下图所示: 解决方法 依次点击:菜单栏→文件→选项→自定义功能区→勾选“开发工具”→确定。 依次点击菜单栏→开发工具→显示ShapeSheet→页→Print Properties→将…

Ros中如何给UR5配置自定义工具 | 在Rviz中给UR5机器人装载定义工具 | UR5配置自定义末端执行器

前言 在学习和项目研究的过程中,我需要在Ur5e上装上工具,以对现实场景进行仿真。网上会有一些装载/配置现成的夹爪,例如Robotiq等。但和我们装载自定义工具的场景还有些差异,因此写一篇博客记录,可能有偏差。如果有问…

宝塔面板轻量云服务器部署spring boot java后端、vite vue3前端、nginx。

环境 初始时宝塔面板推荐应用安装选择 根据开发或者测试。选择安装配置,等待两个安装任务完成。 niginxmysql 安装jdk 显示jdk列表 yum -y list java* 安装指定版本 yum install -y java-1.8.0-openjdk.x86_64 默认安装到 usr/lib/jvm/ ,无需再配置…

干货 | 简单了解运算放大器...

运算放大器发明至今已有数十年的历史,从最早的真空管演变为如今的集成电路,它在不同的电子产品中一直发挥着举足轻重的作用。而现如今信息家电、手机、PDA、网络等新兴应用的兴起更是将运算放大器推向了一个新的高度。01 运算放大器简述运算放大器&#…

Linux环境变量讲解

目录 环境变量 alias命令 type命令 变量分类 Linux最主要的全局环境变量 环境变量 变量是计算机系统用于保存可变数值的数据类型 在Linux中,一般变量都是大写,命令是小写 在Linux中,变量直接使用,不需要定义(更快…

Spring框架自定义实现IOC基础功能/IDEA如何手动实现IOC功能

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用! 7.4 自定义Spring IOC 创建新模块,结构如图![[Pasted image 20230210173222.png]] 7.4.1 定义bean相关POJO类 7.4.1.1 定义propertyValue类 /** …