"Finally I quit Byte..." Confessions of a test engineer with an annual salary of 40W..

"I handed in my resignation letter, not because the company didn't give me much, nor because the company treated me badly, but I felt that I took a fancy to my haggard face every day, and dragged my tired body to lie on the bed every night. , I don’t even know the meaning of life, is it to make money? Is it for a better life? But I think the life I want is not to be busy from morning to night every day, not to face the computer and face work every day, my good time Already half dedicated to work, I should go to experience the life I want, I should go to see the mountains, rivers and seas, to see the beauty of life, to meet a more radiant self, instead of being unkempt and disheveled. My face is haggard, so I resigned..." This is the confession of a test engineer with an annual salary of 40w who left Byte.

Many people are interested in my byte experience, let me share with you here

The reasons for choosing to go to bytes are as follows:

From the position point of view, Byte is considered a first-tier company. Go in to experience and learn, and by the way, get a gold plate.
My recognition of myself can pass the technical side of Byte
. I work in a "decent" place... Byte is quite decent in their circle, and it seems that the children are very hardworking

In short, for all the above reasons, I prepared carefully... and finally passed the Byte interview. At that time, I was still very happy and my salary was very satisfactory.

I completed a promotion in between, changed a company, had happy and satisfying times, and also had days of confusion and struggle, but it was a smooth transition from a rookie in the workplace to a senior paddler.

1. From thinking that it is God's favor to not adapting

In the first few days of joining the company, I was very excited. I was familiar with the company environment with my colleagues and helped him solve some technical problems... However, in the next two months, even though I was mentally prepared, I was still very excited. not used to.

I still feel very uncomfortable with the whole culture and everyone's behavior style.

First of all, there are many meetings. A meeting usually lasts for 2 hours, and everyone likes to interrupt and slow down the progress of the meeting. Small problems that can be counted clearly in three sentences are stuffed into various high-level phrases and reorganized into articles. After a few sessions, I felt that I was stupid. It was a completely ignorant feeling!

At the same time, I was assigned several jobs shortly after joining the company. Afterwards, people related to these businesses will come to you when they have problems. It is common for people with double digits to come to you every day to solve problems... And I am also a newcomer, and I don’t understand many things. I feel quite isolated and helpless, and I often get a reply of "If you don't understand this business, go and find out as soon as possible" when you throw the problem out to seek help from the group...

I have no choice but to bite the bullet, because many of Byte’s internal tools are self-built tool libraries and frameworks, and many tool documents are really not good. Many times, I have to ask the maintainer directly. Then when you ask, if the other party sees you as a newcomer, there is a high probability that you will not be able to read it for a few hours... In short, solving problems is very laborious and inefficient, and you are often directly criticized by others.

2. Resign decisively

During this period, I also took another test. Originally, the test was a small thing, but after testing it, I found that it was different from what I said. Many things that should have been tested were not done. So I threw this question to other team members, and the reply was "you can test it, and retest a certain piece of xxx by the way." As a result, a small problem turned into a slightly disgusting bomb, and finally it was not easy It's done. Looking at the colleagues who joined the company together, I feel that the work they are responsible for is much easier to deal with than mine, which also made my unstable mentality explode even more.

This situation lasted for a month. One night, I asked an acquaintance about the situation. As soon as he heard about the business I was in charge of, he immediately reflexively said, "This is a shit pot." I was surprised at the time, only to find out that several of the businesses I was in charge of were recognized pitfalls. There were many trivial requirements and deep pits, and it was difficult to measure the results.

After hearing the news, I took a long walk downstairs after dinner, hoping to calm down, but the more I thought about it, the more I felt a headache. I went upstairs again, turned on the computer, and there were a lot of unread messages in Feishu. After a quick glance, the screen is full of:

"Help take a look", "We have a problem with xxx, please help to solve it", "Test xxx", "There is a problem with your xxx, please help me", and several groups full of screens Positive thumbs up...

At that time, I felt a breath of cold air, and my spirit was in a trance. In fact, a few days ago, I felt that going to work was like going to a grave. Every day I felt that there was a ghost shadow following me, and my brain was always in a state of high pressure and tension. Although I should be able to continue to fight these things for a while, I really don't like this style of doing things. I feel that if something goes wrong, everyone is trying to find a way to blame and find the person responsible. I don't think I can transform into a person who can match this kind of atmosphere, so after I went back that night, I thought about it and decided to leave!

In this process, I have summed up some fairly practical paddling experiences, some of which I learned by myself, and some of which I learned from communicating with others. I would like to share them with you here.

The advice I give is similar. If you are currently working in an outsourcing company, learn more and try to improve your skills. You also need to clarify your career plan, so that you have the capital to change jobs and have the opportunity to compete with others.

1. Learn to think deeply and summarize precipitation

The first thing I want to say is to learn to think deeply and summarize precipitation. This is the most important and meaningful thing in my opinion.

Let's think deeply first. In the circle of programmers, I often hear some remarks: My job has no technical content at all, and I just do a little bit every day. What can I learn from this TM? Leaving aside some ridicule and joking arguments, this It may indeed be the true thoughts of some students, at least I used to think so. Later, with the accumulation of work experience, and after discussing with some high-level students, I found that this idea was actually very wrong.

The reason for the perception that there is nothing to learn is basically the result of lazy thinking. Any seemingly inconspicuous matter, as long as you think deeply, dig a little deeper vertically or broaden horizontally, it is enough to drown in the ocean of knowledge.

Let's talk about the summary precipitation . I think this is also where most programmers are relatively lacking. They can do one thing very well just by working hard. But I almost never make abstract summaries, so that after working for several years, the knowledge I have mastered is still sporadic and unsystematic.

It is very important to make some summaries and precipitations in a timely manner. This is a process from technique to Taoism, which will allow you to see problems from a wider perspective and a higher level. When encountering the same type of problems, you can advance and solve them systematically and hierarchically according to the summarized methodology.

As an example. As a background service, 1G of memory is optimized today, and 50% of the reading and writing time is optimized tomorrow. Can you make a summary of performance optimization?

For example, at the application layer, you can manage the application side of the service docking, and sort out the rationality of their access; at the architecture layer, you can do caching, preprocessing, read-write separation, asynchronous, parallel, etc.; at the code layer, you can do things More, resource pooling, object reuse, lock-free design, large key splitting, delayed processing, encoding compression, gc tuning, and various language-related high-performance practices... I will meet you next time For scenarios that require performance optimization, a whole set of ideas can be applied immediately, and the rest is about tools and practical operations.

Some students said that I would fight with PM every day to meet requirements and not optimize performance. Let's not discuss whether performance optimization can be done, but in terms of business requirements alone, there are also things that can be summarized. For example, how to do system construction? Have you thought about the core capabilities of the system, system boundaries, system bottlenecks, service layering and splitting, and service governance? Discuss requirements with PM every day, how to cultivate product thinking as a technical student, and guide The direction of the product, how to make the structure ahead of the business, these issues can also be considered and summarized

Therefore, learning and growth is a self-driven process. If you feel that there is nothing to learn, the probability is not that there is really nothing to learn, but because you are too lazy, not only too lazy in action, but also too lazy in thinking. lazy.

You can write more technical articles, share more, and force yourself to think and summarize. After all, if the article is not deep enough, everyone is embarrassed to share it publicly.

2. Actively learn and maintain enthusiasm for technology

An anxiety theory that has been widely spread in the Internet circle in the past two years is called the phenomenon of 35-year-old programmers. It basically means that programmers in this industry are basically waiting to be laid off when they are 35 years old. It is undeniable that the Internet industry is indeed inferior to civil servants and other institutional occupations in this regard. But the 35-year-old programmer in this question is not 35 years old in the absolute physiological sense. It should refer to those programmers who have worked for more than ten years and have worked for two or three years. The following jobs are basically living on their laurels, without taking the initiative to learn and recharge. The age of 35 is about the same as that of 25, and there is no desire for learning and growth at the age of 25. Instead, it adds many trivial matters to family life, and the salary requirements are often higher. From the perspective of enterprises, this is indeed not very competitive.

And if we actively study and maintain technical ability, knowledge reserves and working years are directly proportional, how can there be any anxiety at the age of 35? I think such big cows should be rushed by major companies, right? But learning this matter , is actually an anti-human process, which requires us to force ourselves to jump out of our comfort zone, take the initiative to learn, and maintain enthusiasm for technology. There is a saying in Didi that roughly goes that when you take the initiative to jump out of your comfort zone and feel struggling and stressed, it is often the darkness before dawn, and that is the time when you grow the fastest. On the contrary, if you feel that you are living comfortably every day and your work is just a waste of time, then you may really be boiling a frog in warm water.

During the period of just graduating, there is often a lot of free time, which is a good time to work hard to learn technology. Use this period of time to lay a solid foundation, develop good study habits, and maintain a positive learning attitude, which should benefit you for life. As for how to study efficiently, there are a lot of big names on the Internet who write such posts, and after arriving at the company, you can also find a lot of such sharing on the intranet, so I won't talk about it.

 

3. Take the initiative to undertake and exchange feedback in a timely manner

The first two are from a personal point of view. I hope that everyone can improve their personal capabilities and maintain their core competitiveness. But from the company’s point of view, the most important thing for a company to recruit employees is to let them create business value and contribute to the company. Serve.

Although there is generally a certain training system for school enrollment, in fact the company does not have the obligation to help us grow. In terms of being able to do things for the company and create value, I think the most important words are initiative, taking the initiative to undertake tasks, actively communicating, actively promoting project progress, actively coordinating resources, actively giving feedback, and actively creating influence. Power and so on.

When I first joined the company, I basically did my job well according to the tasks assigned by the leader, and then I did my own work. I almost never took the initiative to communicate with others or think of ideas that can help the development of the project. I thought it was enough to complete my job with quality and quantity, but later found that doing so was not enough. This was just the most basic requirement.

Some students' approach is that the leader only needs to synchronize the direction of what to do recently, and the following series of things basically do not need the leader to worry about. I am a leader and I like such students. A word that I often hear after joining the company is owner awareness, which probably means this.

In this process, another very important point is timely communication and feedback. If the project is not progressing smoothly, if you encounter any problems, synchronize with the leader in time. If you are not sure about the technical solution, you can discuss it with the leader. If you can’t coordinate some resources, you can ask the leader for help. Don’t have too many scruples, thinking that these will be too much trouble, the leader is actually doing it this matter.

If the project progresses smoothly and there is really no need for the leader to intervene, then it is also necessary to give timely feedback on the progress of the project and the benefits obtained, and to discuss any ideas you have, and ask the leader for suggestions on the current progress and what other areas Improvements are needed to eliminate information errors. On the one hand, doing these things is to make reasonable use of various resources of the leader. On the other hand, it can also let the leader know his own workload and control the overall project. After all, the leader also has a leader and must report.

It may be regarded as the upward management that everyone is disgusted with. It has an internal taste, and I actually did not do well in this. But the most basic point, don’t take a task and work hard or even isolate yourself from the world. It’s been a month and you haven’t synchronized with the leader. Thinking about holding back a big move or something, that’s basically cool.

You must take the initiative. You can start by forcing yourself to speak in various public places, and one-one in time when you have questions or ideas.

4. A set of good materials for systematically improving learning

Finally, you need a set of good materials for system improvement to improve your comprehensive technical ability!

As a tester, I would like to share some of my generalizations and conclusions about technology over the years, and share my notes on the skills that an advanced automated tester needs to master. I hope it can help those who are interested in technology. Friends all the way to the end!

The content involves: testing theory, Linux foundation, MySQL foundation, Web testing, interface testing, App testing, management tools, Python foundation, Selenium related, performance testing, LordRunner related, etc.

1. Test basis

Understand the basic skills of testing, master the use of mainstream defect management tools, and be proficient in the operation and maintenance of test environments

Programmer Uncle Ray test basis
Test Plan/Test Case Black-box use case design equivalence class/boundary value/scenario analysis/decision table/causal diagram analysis/error inference
defect Defect lifecycle/defect grading/defect management tool ZenTao/Jira
database Mysql/environment construction/addition, deletion, modification and query/associated query/stored procedure
Linux System construction/basic instructions/log analysis/environment construction

2. Necessary knowledge of Linux
As the most popular software environment system, Linux must be mastered. The current recruitment requirements require Linux capabilities.

Programmer Uncle Ray Essential knowledge of Linux
Introduction and preparation of Linux system As the most popular software environment system, Linux must be known, starting from the introduction of the CenterOS version system, installation, directory structure and other basic content, and also preparing for the subsequent self-built test environment.
Linux remote tool Xshell Introduce in detail how to get started with Linux, and perform regular remote management, file transfer operations, and the tools involved Xshell, Xftp
Linux file attributes and management Linux files, basic attributes of directories, file operations, file management, directory operations, directory management. Avoid self-destructive behavior operation, how to prevent accidental operation
Linux user and group management How to add, delete, modify users and groups in Linux, and grant corresponding permissions, no longer stuck due to permission issues
Linux file editor The use of Linux file editor vi, command mode, input mode, operation examples, shortcut keys, pipeline commands, experience in use. How to edit in a system without graphics?
Linux common system settings Network settings, environment variables, disk management, time settings, system resources, firewalls, everything, don't worry about being clueless.
Linux installation software Linux installation commands, and how to install through tar, gz and other installation files downloaded from the Internet, such as MySQL database installation.
Linux Docker container Docker container technology explanation, image mirror management, warehouse, container creation, startup, operation, mirror packaging, catch up with the industry's popular technology

3. Shell script
Mastering Shell script: including Shell foundation and application, Shell logic control, Shell logic function

Programmer Uncle Ray Shell
Linux Shell Basics and Applications Introduction to shell script programming, environment types, variables, parameters, operators, use of arrays, zero-distance contact scripts
Linux Shell logic control Shell logic application, test command, process control, data input and output, script logic is no longer monotonous, play tricks
Linux Shell Functions How to write shell script functions, call files to each other, apply scripts in actual combat, understand what can be done in development, testing, and operation and maintenance
Windows script batch Enough with Linux, let’s take a look at the usage of Windows regular commands, batch script writing, and practical applications. It’s not all Linux everywhere. Windows scripts are also one of the commonly used scripts. You may use Windows when you see this

4.

The only way for automation of Internet program principles: basic knowledge of front-end development and necessary knowledge of Internet networks 4. Internet program principles

Programmer Uncle Ray Principles of Internet Programming
Basics of Web front-end development HTML, CSS basic content learning. Why is the test class developed? Sorry, if not, automation may not be welcome, a lot of automated testing issues come from the development base
Web front-end development script JavaScript is the most mainstream scripting learning. Similarly, this will also be involved in automated testing. In fact, dynamic scripts are often used in some tools, which is also the JavaScript language.
Debugging tools for developers to test applications Although the browser's F12 is named as a developer tool, in fact, testing plays a key role in both functional testing and automated testing. Such as parsing HTML, locating elements, debugging scripts, monitoring network capture, etc.
Internet program network architecture Understand in detail the birth of Internet programs, logical details, how Internet communication principles transfer data to other computers, and the relationship between TCP, UCP, HTTP, and other protocols through the network architecture.
HTTP protocol data structure analysis Complete analysis of HTTP protocol data structure, including Request, Response data format, header definition and usage, what various states represent, and how to identify errors. Analyze the position of parameters in the protocol, rest structure, various common body data forms, parsing methods, and causes of common data parsing errors.
Cookie and Session mechanism Interpret what Cookie is, what kind of relationship it has with Session, how to test Cookie and Session, and what to pay attention to

5. MySQL database

software test engineers must have MySQL database knowledge, not just the basic "addition, deletion, modification and query".

Programmer Uncle Ray MySQL database
MySQL database test application MySQL environment setup, basic use and data manipulation of client Navicat, learning and consolidating basic SQL syntax, adding, deleting, modifying and checking are indispensable, and mastering the usage methods of various conditions
MySQL advanced query Query upgrade, master multi-table query, sub query, query grouping, use of statistical functions, and learn and analyze classic interview questions
MySQL custom function Since there are built-in functions, of course there is no shortage of custom functions, and they are often used. This is like any development language, which cannot be separated from the definition and use of functions.
MySQL stored procedure SP How to define the essential stored procedure of the database, usually also called SP? How to test? How to use it more safely, and test what else can be done with stored procedures. More convenient content for testing
MySQL Transactions and Programming Use cases of database transactions, the principle and use of indexes, the application of database SQL programming in testing, how to use it to quickly and accurately generate a large amount of specified test data

6. Packet capture tool
Fiddler, Wireshark, Sniffer, Tcpdump Various packet capture tools are suitable for various projects, there is always one that suits you

Programmer Uncle Ray Capture tool
The principle and method of packet capture Only by understanding the principle of packet capture can we really use a suitable tool and choose the appropriate direction and method, otherwise it will be futile
Packet capture tool selection Classification and efficacy of packet capture tools, what kind of project is suitable for which tool, how to identify the advantages of tools
Fiddler basic functions As a professional packet capture tool for the HTTP system, it introduces its principle in detail, how to filter data, how to search for desired data, and how to capture packets in various environments such as web, non-web, mobile phones, HTTPS protocols, etc.
Advanced features of Fiddler Learn to use it for interface testing, power off, scripting, etc. to modify and replace data, simulate data for interface Mock testing, and create self-defined menu functions
Wireshark It is not so much a packet capture, but an analysis tool after packet capture. It uses other system-integrated packet capture tools to capture and display data in each system, and has powerful filtering and analysis functions.
Sniffer Black technology packet capture tool, there are many versions, very professional packet capture tool
Tcpdump Packet capture plug-in artifact in Linux and Android series systems

7. Interface testing tools

Interface testing artifact, a powerful tool you can't avoid: Jmeter. Small and flexible: Postman

Programmer Uncle Ray Interface Test Tool
Getting started with Jmeter interface testing Introduction to Jmeter, environment preparation, introduction to directory structure, how to record scripts, and the use of basic components, threads, scopes, HTTP requests, timers, assertions, etc.
Advanced use of Jmeter interface test Jmeter逻辑控制、前置处理器、后置处理器、监视器、结果树,如何参数化、正则表达式关联、事务、检查点等等。并带领大家对带有token等动态数据的项目进行实战演练
Jmeter接口测试高级功能 Jmeter脚本思考时间、随机时间、线程启动间隔、并发集合点、联机远程调用,webservice、websocket、jdbc、命令调用等等
Postman接口测试工具使用 行业标准HTTP、rest接口测试神器,基本请求、分组保存、动态变量、脚本、数据关联、参数化、自动断言、批量运行、持续集成。思路类似其他接口工具,避免泛滥学习

八、Web自动化测试Java&Python
了解自动化的目的,熟练掌握TestNG&unittest自动化框架,以及断言与日志处理

程序员雷叔 Web自动化测试Java&Python
自动化框架思路引导 我们做自动化到底为了什么?节省人力、加快速度、还是让机器代替手动、还是提升自我。应该如何建立思路,而非无脑进坑任机器摆布
Java&Python3开发环境及基本语法 Java&Python开发环境搭建,基础语法入门,让不会代码的以最快速度入门,方便适应后续自动化测试开发内容学习,代码够用即可,并不是学得越多越好
Java&Python3集合类型与面向对象开发 Java&Python各种基本类型、集合数据类型的理解与操作,循环语句、判断语句,面向对象的开发,函数的使用,类的使用
Selenium3环境与浏览器驱动配置 基于selenium3的web自动化环境搭建,正确的浏览器配置,不再为起不了浏览器而烦恼。支持IE、Firefox、Chrome等等
Selenium3多种定位及动态操作 selenium3常见定位方法,属性和值的获取,如何动态判断不一定存在的元素,复杂的网页结构,需要多步骤操作的元素等等
特殊情况处理(js、特殊控件等) selenium3自动化测试中,常见的特殊情况处理,如日期、控件、智能等待、文件上传下载、网页嵌套结构,各种弹窗的处理方式,cookie处理,JavaScript脚本调用等
TestNG&unittest自动化框架使用 Python unittest、Java TestNG自动化框架的使用,环境处理、基本使用逻辑,数据驱动模型,数据库数据载入等
自动化框架断言与日志处理 自动化中最重要的是什么?作为测试当然是断言,没有断言的自动化毫无用处,如何展示日志与结果是自动化测试的根本
PageObject框架设计模式 PageObject框架设计模式,到底是做什么的?如何更好的快速管理控件,从此做起

九、接口与移动端自动化
专业接口调用、测试解决方案。组建完整的web和接口自动化框架,Appium整体使用

程序员雷叔 接口与移动端自动化
接口自动化方案Requests Python Requests、Java HTTPclient接口框架,都是专业的接口调用、测试的解决方案,使用简单快速,结合工具的使用方式和功能,快速上手并对其操作,解决其中的疑难杂症
web+自动化框架整合 自动化测试是相通的,如何将web与接口、甚至更多的测试类型和方向结合起来,组成完整的自动化框架
Appium环境搭建 Appium环境相对复杂,针对Android系统进行完整的环境搭建演练,解决环境上的问题,并进行基本的自动化操作
Appium自动化实战与框架结合 Appium整体使用与web自动化类似,引导使用典型功能,并针对一款APP进行实战操作



十、敏捷测试&TestOps构建
揭开TestOps的神秘面纱,持续集成Jenkins框架烂熟于心

程序员雷叔 敏捷测试&TestOps构建
构建敏捷测试运维架构体系 敏捷测试是什么?为什么需要敏捷,行业都提到的devops又是什么?TestOps能做什么
持续集成Jenkins框架实战 持续集成最常见的一套框架,介绍Jenkins操作、权限、系统管理等,常用构建与运行实例讲解
静态扫描测试Sonar 一款自动化的代码扫描工具,便捷式快速扫描代码中的问题,做到提前发现,统一规范,自动化中的代码测试神器

十一、性能测试&安全测试
软件测试的彼岸:性能测试和安全测试,选个方向努力爬坑吧!

程序员雷叔 性能测试&安全测试
性能测试学习路线 如何学习性能测试,性能测试到底该怎么学习,使用什么工具?工具并不代表性能,接口的基础对性能测试非常重要,而工具只是辅助,更多的是思路和策略。你不会并不是分析而是准备阶段
loadrunner脱离浏览器录制专题 IE无法启动被测网站?打不开浏览器?程序无法在浏览器中被打开?这些都没关系,还是一样能录制,但录制是偷懒专用的,对于学习有一定的辅助作用,也会带入无法脱离的坑
性能测试工具操作实践 loadrunner、jmeter,有了前面的基础使用,看懂脚本不是问题,带上关键的参数化、动态数据关联、事物、日志,大部分的脚本都可以搞定进行实践
系统监控方案实施 工具自带监控?系统监控?JVM内部监控?数据库监控?各种监控的意义何在,如何在各种情况下精准监控数据
安全测试起源与工具介绍 应该如何进行安全测试,安全测试都有哪些分类?都会用到什么样的工具,各自的作用又是什么,如web漏洞扫描,端口扫描,系统扫描等
web安全测试手工实战 接口测试在安全中的作用,不会手动的安全测试,那就永远无法理解自动化以后产出的结果
安全扫描工具测试实践 实际介绍以及使用APPscan、awvs等专业安全扫描工具
企业安全建设(SDLC) 企业应该如何进行安全建设,制定更安全的软件生命周期。从哪些方面进行着手

上面就是我为大家整理出来的一份软件测试工程师发展方向知识架构体系图。希望大家能照着这个体系在3-4年内完成这样一个体系的构建。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。

这些就是我在字节学到的东西,目前来我在字节离职出来,来到了一家自研公司,虽然没有在字节赚的多,但是以我的技术水平,还不至于太少,更重要的是我有了双休,我有了去生活的时间,我有了每天充足的睡眠。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

Guess you like

Origin blog.csdn.net/chengxuyuznguoke/article/details/130488080