本人就读于某普通院校,在大学期间就开始实习找工作,误打误撞进入一家做工业大数据的创业公司。
刚开始我并没有明确的职业发展方向,主要是做一些环境搭建的基础工作。但由于执行效率高,工作责任感强,在实习期间就得到公司老板赏识,并被安排负责项目测试工作,然后一毕业就顺利转正为产品研发部的测试工程师。
我的大部分工作是以功能测试为主,也出过差以及兼职各种产品、运维、售前的活,总之公司哪里有需要,我就往哪里冲。虽然起点不高,但测试工作经验还是学到不少,对功能测试、UI自动化测试,接口自动化测试,性能测试,安全测试及兼容性测试都有涉猎。
我也会根据工作需要快速学习各种技能,比如计算机编程、网络、存储、调度等知识,这也为我后面学习持续集成、数据中台等打下了基础。
测试工作尤为重视结果,而创业小公司的常态则是时间紧、任务多,迭代快。
那么该如何应对这种挑战,高效完成测试工作,顺利保证项目质量呢?
在各种工作压力、实践摸索和坎坷经历后,我琢磨出核心要点:梳理公司的现有产品的研发流程,明确在研发的每个阶段如何开展测试工作。
简单来说,即搞清楚开发和执行软件测试的全流程关键步骤:
1.获取需求、功能设计、详细设计规格和其它必须文档
2.获取预算和时间安排需求
3.确定项目相关人员和他们的责任,汇报需求,必须的标准和过程(如版本过程、变更过程等)
4.确认应用高风险的部分,设定优先级,确定测试的范围和限制
5.确定测试的方法——单元测试、集成测试、系统测试、验收测试等
6.确定环境需求(软件/硬件/通信等)
7.确定测试工具与环境(记录/回放工具、覆盖率分析器、测试跟踪、问题跟踪等等)
8.确定测试输入需求
9.确定任务,任务责任和相应的工作量
10.设定时间安排估计、时间表、里程碑等
12.确定输入的等价类、边界值分析、错误类
12.准备测试计划文档和需要的评审
13.写测试用例
14.对测试用例进行必须的评审
15.准备测试环境和测试工具,获取需要的用户手册/参考文档/配置指导/安装指导,建立跟踪过程,日志和存档过程,获取测试数据
16.获取和安装软件版本
17.执行测试
18.评价和汇报测试结果
19.跟踪问题和修改
20.如果需要进行再测试
21.在整个生命周期内维护和修改测试计划、测试用例、测试环境和测试工具
在梳理开发与软件测试流程后,进一步明确每个测试阶段的测试工作、阶段目标、主要任务、通过准则,最后再进行测试工作,也就事半功倍了。
一年多的工作经验,让我深刻的体验到,光有清晰的流程梳理是不够的。在公司内部,开发,团队与测试、运维人员之间的反馈周期太长,导致软件研发流程和质量存在很多缺陷:
虽然从测试角度,我能想到多种方法来改善软件交付的过程,但是却难以实施落地。因为不写代码,不深入了解研发业务实现的逻辑,我是无法理解这个 Bug 到底是怎么出现的,做不到透过表象看本质。有时研发的一句“你不懂”,让我觉得沟通真困难。内心被一口气憋着,真希望自己能一个人"顶天"。
只有成为测试开发工程师,既会测试又懂代码,才能够最大限度的帮助研发和测试提升测试效率,进而帮助公司提升整体研发效率。这也成为我坚定不移的职业成长目标。

巴菲特和芒格说过,世界上最好的投资就是投资自己。
为了学习测试开发技术,从朋友那里共享了一套课程(当时他花了大几千块钱购买的),感觉大纲很全面,知识体系完整,同时也蹭了很多某站干货公开课。
2020 年受疫情影响,很多测试工作只能远程线上处理,然而团队协作效率不高,项目迭代却依然过于快速。总感觉接到测试工作之后,只能尽快完成,而很难按原计划实施,达到好的标准。这种疲于奔命和虎头蛇尾的感觉,让我哑巴吃黄连,有苦说不出。
这种工作模式让我深恶痛绝,忍无可忍,坚持一段时间后遂决定辞职,并正式待业家中去学习《Python 自动化测试开发实战进阶》课程。一方面调整自己当下的身心状态,另一方面也是破釜成舟,充实自己,向更好的自己 —— 测试开发方向迈进!
一定要有自己的学习方向,目标是要做到 T 字型人才,保证广度的时候也一定要有一两项专精,这样才能够在面试时候脱颖而出。
这里分享下我个人的系统学习路线和面试前重点准备技能:
一、测试基础知识
测试的定义、测试的分类、测试的方法、测试的生命周期。
测试计划、测试方案、测试策略、测试用例的编写。
BUG的定义、BUG的分类、BUG的严重程度、BUG的六要素、BUG的生命周期。
缺陷报告编写、测试报告编写、禅道管理工具应用
二、测试工具学习
测试管理工具:QC、禅道、Testlink、svn、git等
性能测试管理工具: Loadrunner、Jmeter、Locust
接口测试工具:Jmeter、postman等
持续集成工具:Jenkins
app自动化工具:appium、Monkey、Monkey Runner等
web安全测试工具:appscan、Fiddler、burpsuite
三、Linux系统+MySQL数据库
Linux:搭建测试环境和部署,查看日志,定位BUG,掌握其中的一些常用Linux命令
数据库:数据库增删查改操作,排序、聚合函数、分组、分页、连接查询、子查询,自关联;数据库高级功能数据库设计、命令行操作数据库、函数、存储过程、视图、事务、索引、外键、用户密码等
四、Python编程+数据结构
Python编程基础:计算机组成原理、Python开发环境、Python变量、流程控制语句、高级变量类型、函数应用、文件操作、面向对象、异常处理、模块和包
数据结构:算法、时间复杂度和空间复杂度、栈和队列、二叉树
排序算法:冒泡排序、选择排序、插入排序、快速排序、希尔排序
五、自动化测试
1)Web自动化测试
搭建Web自动化测试环境
元素的定位方法和元素操作
UnitTest框架、UnitTest断言、参数化、测试报告、Fixture
PO模式的设计思想,对页面进行封装
数据驱动的实现方式、日志处理
自动化测试流程、自动化代码实现、项目自动化框架设计
2)接口测试
接口及接口测试的概念
HTTP请求报文
HTTP响应报文
TCP连接的三次握手、四次挥手
接口测试文档的编写和分析
Fiddler/charles抓包
postman(商用工具,很好用)
jmeter(强大,接口、压力通吃)
requests(接口自动化,可以采用python+requests+pytest+ddt+git框架实现)
3)性能测试
性能指标理解
性能测试的分类
设计合理的性能测试场景
性能监控分析和调优
性能工具的使用
4)APP自动化测试
App的打包与服务器部署
ADB 命令的使用
Monkey 测试工具的使用
Appium 测试工具的使用
掌握移动端 APP 自动化测试的基本技术
5)安全测试
Mysql注入
XSS注入
漏洞扫描
敏感信息泄漏
文件上传
信息校验
6)持续集成
开发人员提交代码至svn
测试人员检出源码
编译打包
上传服务器
部署启动
开发测试脚本、完成测试
对于零基础的新人来说,肯定要先学习基本理论知识,有一定的计算机基础和软件测试基础之后,再做需求分析和用例分析,所以这一个阶段重在打基础和写测试用例
学习目标:掌握基本的测试理论、各种测试文档的编写和管理、数据库的操作、满足大部分企业的需求
熟练掌握黑盒测试用例设计方法,进行功能测试用例设计 熟悉测试管理工具禅道、QC 熟悉测试计划,测试方案,测试报告的核心内容 SQL数据库语言 熟悉电商类、应用类手工项目测试
马上就要到金九银十的面试旺季,大家都希望趁着这个机会找到一个心仪的工作,但是不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~
我一共参加了5场面试,这里分享的面试题仅展示了部分,受篇幅的限制不方便阅读就不全部贴出来了
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI