感慨!一路从测试小白到现在的高级测试工程师,方向不对真的很艰辛
1
功能测试人员,也就是我们常常俗称的进行点点点测试工程师。前 1-2 年做功能测试,使用其他人开发的工具进行测试。这个阶段的测试工作都比较初级,严重依赖于别人开发的工具和系统。当系统进行升级换代的时候,强哥会明显的感觉到有阵痛期,一下适应不了这种变化。
做了 2 年功能测试,我悟出了一个道理:功能测试人员一般最遵守行业规则,但是也最没存在感。强哥发誓在下班以后学习自动化测试技术,摆脱这种随便被人甩锅的命运。
2
自动化测试人员。终于面试上了一个自动化测试的岗位,这一年每天晚上熬夜学习终于得到了回报,试用期结束,已经上手了第一份自动化测试的工作。
他在部门内部受到了其他同事尊重,尤其是部门的功能测试人员,一双双膜拜的眼神。心里窃喜,这一年的付出是值得的,现在我也可以给别人脸色了。
自动化测试的工作内容,主要是使用编程语言编写脚本啊,进行自动化测试。明显感到了测试效率的提升,一个人可以干两个人的活,用老板的话说:小江不错,能打能扛。
2 年过去了,隐约感觉到了几点自动化测试工作的不足:
-
写出来的代码,功能测试人员看不懂,也没有办法用。平时他和功能测试的同事也是各干各的,相当于在两个部门。这就意味着,从老板的角度来说,没有发挥 1 + 1 > 2 的效应。
-
自己使用的是 Python 语言,部门的另外一位自动化工程师用的是 Java 语言,她被招来做另外的项目测试。强哥很想去看看她的代码是怎么写的,怎么运行的,奈何看不懂,也不知道怎么运行。同是一个岗位的人,却没办法切磋技术,好不孤独啊。
-
还有一个问题。前 3 个月自己写的代码,过几个月自己再去看,居然有点看不懂了,要调试一段时间才能弄清楚中间的思路。要是被别人知道了,肯定会认为自己很菜的,自己代码自己都看不懂。
虽然看到了自动化岗位的一些不足,但是强哥心里清楚,相比之前的功能测试,瞧别人的脸色,现在简直太幸福了。自从学习了 Python 自动化测试,他感觉真正融入了这个行业,情不自禁的开始关心行业动态,关心起 Python 这门编程语言的发展势头了。
3
在一次技术开发者大会上,接触到了 ”测试开发“ 这个岗位,心中很久的疑惑终于被解开了。进行技术分享的是国内某大型电商平台的技术专家,详细介绍了测试开发这个岗位的优势和进阶路线。
强哥赶紧掏出一直放在双肩包里的袖珍笔记本,开始记录:
-
测试开发是给测试部门开发交互界面友好的测试工具和效率工具,像大家熟知的 Postman 和 Jmeter 属于测试开发的工作;
-
测试开发研发出来的产品,功能测试人员和其他工作人员经过简单培训就可以上手使用,充分发挥 1 + 1 > 2 的效应;
-
可以将部门管理,BUG 管理,自动化运行,测试报告, 性能分析, 同事登录等工作模块全部集成到一个平台,大大减少了部门内部和跨部门的沟通成本,提高整个部门和工作的工作效率。
-
测试开发是行业规则大的制定者。使用工具和平台的人需要遵循这些规则。终于知道自己以前做功能测试的时候是被谁左右了。他默默下定决心,要成为测试开发,成为规则制定者。
测试开发这个工作确实挺好的,商业价值和技术价值都很高,技术演讲到后半段,发现事情也没那么美好,准入门槛挺高的,要学习的内容很多,初略总结下来,包含的最基本内容就有许多。
-
HTML,GUI ,手机端等页面构建技术。用来给使用者观察和使用的 UI 界面。在自动化测试的时候学过 HTML,打算再学深一点,就可以比较轻松的完成前端页面技术积累。
-
服务端开发技术。最初不理解这是个什么技术,后来越听越明白,其实就是进行测试的时候接触的后端开发,以前经常和这帮人打交道,报了 BUG 去找他们,他们还死不认账,几次差点和他们打起来。忽然想到:如果我要学这个技术,那我岂不是可以和后端开发做同样的事情了?他们私底下都在做自己的产品和工具,我也可以啊,搞不好还能融到资,卖点钱。
-
数据库。数据库这东西也接触过,不过了解得不太深入,只会几个简单的 SQL 查询语句,一旦设计到建表和多表查询,那就只能召唤搜索引擎了。这方面可能还需要下点功夫。
-
服务部署。服务部署强哥还是第一次听,很多概念都不懂,不过有一个名词经常听到,那就是 Docker,以前只知道概念,完全不知道它干嘛用的,今天终于算是启蒙了。
听完这个基础技术准备,感到热血澎湃,都想立刻起身回家开始学习这些东西了。可没过几分钟,站在台上那位大佬就给他泼了一盆冷水。他一再强调,这些是入门测试开发的基础内容,要真正开发一款好用的测试工具和平台,只会简单的使用这些技术是不够的。
必须要对网络协议有一定的了解,要对开发模式非常熟悉,要会使用版本控制,更重要的,要深入编程语言的高级特性和编程技巧,如果 CS 基础不够,玩出来的都会是花架子,对职业发展没有太多好处。
心灰意冷,大学学的 CS 课程全部忘光了,现在要捡起来谈何容易啊。没想到一个小小的测试岗位要求这么高。不过演讲者还是给出了一个比较可行的方法,那就是熟读源码,分析源码。我们使用的框架,比如 Selenium 和 Appium, 里面包含了很多优秀的设计思想,强哥当年学习的时候被整得一脸懵逼,苦不堪言,一度想放弃,后来用得此次多了,源码重读的次数也越来越多,慢慢能够理解他们写的代码有多么厉害了。想到这,强哥不由得感叹一声,要是有个人带我分析源码该有多好啊,能少走好多弯路。
演讲结束了,决定回家试一试用 Python 语言写一个最简单的 UI 测试工具,在公交车上已经思考好了大体的框架:
-
HTML 页面展示;
-
Python 开发框架接受 HTML 页面上的请求。现在还不知道有什么框架,回去了解一下。
-
之前写好的测试脚本。将脚本封装成函数或类,开发框架接受到请求,调用对应的方法就完成了自动化测试。
回到家,喝了口水就开始了解开发框架,上网了解了 Flask 和 Django 两大框架,赶紧把想到的架构图画下来。

如果用 Java 开发,把中间的开发框架换成 Springboot 就可以了。
-
先把 HTML 写好:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Lemon Web Test</title>
</head>
<body>请选择你要测试的项目:<form action="http://127.0.0.1:5000/ui-test/" method="get"><select name="project"><option>百度</option><option>豆瓣</option><option>Github</option></select><input type="submit"></form>
</body>
</html>
-
看网上 Flask 用的代码不多,他初略看了一下官方文档就开始依样画葫芦写简单的 Demo。
from flask import Flask, request
# 初始化服务对象
app = Flask(__name__)
@app.route("/ui-test/") # 定义访问的网址
def ui_test():# 获取 HTML 数据,要测试的项目或者功能project = request.args.get('project')# 自动化测试脚本封装的函数if project == '百度':# auto_test()
# 返回给用户操作成功return "test success"
# 运行服务,开放端口 5000
app.run(port=5000)
-
至于自动化脚本,他从以前写的 Selenium 脚本随便抽了个最简单的拿出来用,封装成 auto_test 函数。
def auto_test():
# 初始化了一个浏览器driver = webdriver.Chrome()
# 进入项目路径driver.get('http://www.baidu.com')
# 找到要输入的输入框, 元素定位input_ele = driver.find_element_by_id('kw')input_ele.send_keys('柠檬班')# 提交内容input_ele.submit()
# 定位元素e = WebDriverWait(driver, 20).until(ec.presence_of_element_located((By.CSS_SELECTOR, 'h3.t')))
# 测试结果是否通过if '柠檬班_腾讯课堂' in e.text:driver.quit()return 'Test Success'
driver.quit()
虽然这个 Demo 非常的简单,已经通过自己写的例子认识到测试开发的强大之处了,接下来,要努力学习 Python 高级特性,开发框架 ,前端语言、数据库和部署技术,然后就是源码分析能力了。行业规则制定者,这个信念已经在心里。


相关文章:
感慨!一路从测试小白到现在的高级测试工程师,方向不对真的很艰辛
1 功能测试人员,也就是我们常常俗称的进行点点点测试工程师。前 1-2 年做功能测试,使用其他人开发的工具进行测试。这个阶段的测试工作都比较初级,严重依赖于别人开发的工具和系统。当系统进行升级换代的时候,强哥会明显的感觉到…...
字符串经典基础面试题
关卡名 字符串经典基础面试题 我会了✔️ 内容 1.理解字符串反转的处理方法 ✔️ 2.熟练掌握回文串的判断方法 ✔️ 3.掌握字符串中搜索第一个唯一字符的方法 ✔️ 4.掌握判断是否互为字符串重排的处理技巧 ✔️ 1 反转的问题 我们知道反转是链表的一个重要考点…...
【华为OD题库-062】计算礼品发放的最小分组数目-java
题目 又到了一年的末尾,项目组让小明负责新年晚会的小礼品发放工作。为使得参加晚会的同时所获得的小礼品价值相对平衡,需要把小礼品根据价格进行分组,但每组最多只能包括两件小礼品,并且每个分组的价格总和不能超过一个价格上限。…...
[go 面试] 构建高效微服务通信:选择合适的通信方式
关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 构建分布式系统或微服务架构时,服务间通信成为至关重要的一环。不同的通信方式各有优劣,因此在选择时需根…...
【华为OD题库-048】拔河比赛-java
题目 公司最近准备进行拔河比赛,需要在全部员工中进行挑选。选拔的规则如下: 1.按照身高优先、体重次优先的方式准备比赛阵容 2.规定参赛的队伍派出10名选手 请实现一个选拔队员的小程序。 输入为一个数组,记录了部门人员的身高、体重信息,如…...
【WebSocket】通信协议基于 node 的简单实践和心跳机制和断线重连的实现
前后端 WebSocket 连接 阮一峰大佬 WebSocket 技术博客 H5 中提供的 WebSocket 协议是基于 TCP 的全双工传输协议。它属于应用层协议,并复用 HTTP 的握手通道。它只需要一次握手就可以创建持久性的连接。 那么什么是全双工呢? 全双工是计算机网络中的…...
【有ISSN、ISBN号!往届均已完成EI检索】第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024)
第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024) 2024 3rd International Conference on Electronic Information Engineering, Big Data and Computer Technology 第三届电子信息工程、大数据与计算机技术国际学术会议(…...
【Windows】使用SeaFile搭建本地私有云盘并结合内网穿透实现远程访问
1. 前言 现在我们身边的只能设备越来越多,各种智能手机、平板、智能手表和数码相机充斥身边,需要存储的数据也越来越大,一张手机拍摄的照片都可能有十多M,电影和视频更是按G计算。而智能设备的存储空间也用的捉襟见肘。能存储大量…...
Windows本地搭建WebDAV服务并使用内网穿透远程访问【无公网IP】
windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访…...
责任链设计模式
package com.jmj.pattern.responsibility;/*** 请假条类*/ public class LeaveRequest {//姓名private String name;//请假天数private int num;//请假内容private String content;public LeaveRequest(String name, int num, String content) {this.name name;this.num num;…...
12.4 C++ 作业
完成沙发床的多继承 #include <iostream>using namespace std;//封装 沙发 类 class Sofa { private:string *sitting; public://无参构造函数Sofa(){cout << "Sofa::无参构造函数" << endl;}//有参构造函数Sofa(string s):sitting(new string(s)…...
基于ssm品牌会员在线商城源码
基于ssm品牌会员在线商城源码708 idea mysql数据库 navcat 开发技术:后端 ssm 后台管理 vue 用户端 vue.jshtml 演示视频: 基于ssm品牌会员在线商城源码 DROP TABLE IF EXISTS address; /*!40101 SET saved_cs_client character_set_client */; /…...
骨传导耳机音量大了有害吗?骨传导能保护听力吗?
无论是传统耳机还是骨传导耳机,只要使用音量过大,都会对有一定的损伤,然而由于骨传导耳机的传声原理和佩戴方式比较特殊,所以对人体的损伤比较小,想要知道骨传导耳机能否保护听力,就要先了解骨传导耳机的传…...
百望云供应链协同解决方案入选北大创新评论产业研究案例库
11月28日-29日,百望云受邀出席《北大创新评论》2023 Inno China 中国产业创新大会,从战略构建、生态塑造、科技创新等议题出发,与学术专家、产业专家、企业代表共赴盛会,思享汇聚。会上,《北大创新评论产业研究案例库&…...
selenium中元素定位正确但是操作失败,6种解决办法全搞定
selenium中元素定位正确但是操作失败的原因无外乎以下4种: 01 页面没加载好 解决方法:添加等待方法,如:time.sleep() 02 页面提交需要等待给数据后台 解决方法:添加等待方法,如:time.sleep(…...
触控板绘画工具Inklet mac功能介绍
Inklet mac是一款触控板绘画工具,把你的触控板变成画画的板子,意思是,你点在触控板的哪里,鼠标就会出现载相应的地方。例如,但你把手指移动到触控盘左下角,那么鼠标也会出现在左下角,对于用户而…...
〔005〕虚幻 UE5 像素流多用户部署
✨ 目录 ▷ 为什么要部署多用户▷ 开启分发服务器▷ 配置启动多个信令服务器▷ 配置启动客户端▷ 多用户启动整体流程和预览▷ 注意事项 ▷ 为什么要部署多用户 之前的像素流部署,属于单用户,是有很大的弊端的打开多个窗口访问,可以看到当一…...
11. 哈希冲突
上一节提到,通常情况下哈希函数的输入空间远大于输出空间,因此理论上哈希冲突是不可避免的。比如,输入空间为全体整数,输出空间为数组容量大小,则必然有多个整数映射至同一桶索引。 哈希冲突会导致查询结果错误&#…...
12.04 二叉树中等题
513. 找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 思路:找到最低层中最左侧的节点值,比较适合层序遍历,返回最…...
Redis的安装
本文采用原生的方式安装Redis,Redis的版本为5.0.5 安装 下载 下载网站:https://download.redis.io/releases/ wget http://download.redis.io/releases/redis-5.0.5.tar.gz解压 tar -zxvf redis-5.0.5.tar.gz进入redis目录 cd redis-5.0.5执行编译…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
