Software test engineer is a position with a long history. It can be said that the role of software test engineer began to exist since the development of software industry. With the development of The Times, the role and responsibility of software test engineer are also changing quietly, from the simple executor of the test stage in the waterfall development process at the beginning to the role of QA (Quality Assurance) in the agile development process, responsible for the Quality of the whole team and products. The responsibilities and boundaries of the test engineer continue to expand. In recent years, many test engineers in the Internet industry are called test development engineers, which is to have the ability to develop automated tests and test tools. It can be said that the ability requirements of test engineers have reached a new height.

Those of you who have experience in testing will know that, whether in Waterfall or Agile mode, the tester is often pushed to the end of the product release. The pressure of the whole team seems to be on the test engineer. No one cares about the delay in the development process because it has passed. You can diss during Retro Meeting, but the most important thing is to get the product online. So before we look at what skills test engineers need, what are the core problems of test engineers? That’s what we need to figure out.

Core issues for test engineers

How to ensure the quality of products with minimum investment

I believe we all have some experience in this question. What business society pursues is efficiency, even the ultimate efficiency. Test engineers are no exception. Whether they are called test engineers, QA, or test development engineers, the goal of the boss is the same: to ensure the maximum quality of the product with as little investment as possible. Realistically, your salary will depend on your ability to solve this core problem. Define our goals, the capabilities we need, and set them around this one goal.

An overview of the

  • Test design ability
  • Ability to code
  • Automated test technology
  • Quality process management
  • Industry technical knowledge
  • The database
  • Business knowledge

Test design

As a test engineer, the most basic ability should be the ability to design test cases based on the product. The most basic abilities are often the most difficult to master. To design good test cases, we need to be very familiar with the characteristics and business of the product, and have a systematic thinking of the user’s usage scenarios. In addition, there are scientific test case design methods that can help us design standardized use cases, rather than just based on experience or wild ideas. There are some classic test case design methods that test engineers need to master:

  • Boundary value analysis
  • Equivalence division
  • Cause and effect diagram
  • Decision table
  • Orthogonal experimental design

These methods are not meant to be dogma, but rather tools to help clarify test case design and improve efficiency.

Ability to code

In conventional thinking, the code capabilities of testers may not seem very high, and this is true in the industry. Many test engineers basically do not have the ability to code, more is the test implementation. But in this day and age, code ability is required to break through the ceiling of traditional functional testers. A test engineer with the ability to code has two advantages:

Read the development code

Being able to read development code is a great way to be productive as a tester, and it helps us do some of these things

  • Estimate the scope of impact, the scope of the test, by developing the modified code
  • Participate in technical review, estimate the risk, difficulty and focus of test
  • Strengthen the coverage of test cases by designing test cases logically through code
  • Conduct preliminary locating of defects

In fact, there are many things that can be done, reflected in many details of the testing process

Automated test development

Automated testing is not only the development direction of testing, but also an effective way to improve efficiency. With the ability to code, you can easily navigate a variety of popular automated test frameworks and use case development.

Automated testing

Continuing with the discussion of automated testing above. In the current hot companies in the recruitment, automation ability has been a necessary ability, is also a lot of attention to the area. At present, automated testing can be roughly divided into the following categories:

UI automation

The goal of UI automation is to simulate the operation of human on the product UI interface and observe the results to complete the execution of the test. UI automation can also be divided into PC side and mobile side automation test from the form of the client side, there are some famous automation tools we need to master:

Selenium

Selenium is a classic UI automation tool for WEB products with good support for different development languages. Its principle is simply to pass the operation instructions generated by the script to the browser through WebDriver, perform the operations we need and obtain the corresponding feedback, and complete the verification in the script.

Appium

The name reflects the similarities between this tool and Selenium. Appium can be understood as Selenium on mobile. It also simulates human operations on the mobile terminal to achieve the purpose of executing test cases. With the advent of the era of mobile Internet, more business has been transferred from the PC WEB end to the mobile end, and automated testing on the mobile end is becoming more and more important.

In fact, the principle of UI automation implementation is very similar, the basic logic is:

  1. Positioning elements
  2. Operating elements
  3. Get feedback

Finally, manage test cases through some kind of test case framework, such as Python UnitTest, JAVA TestNG, Ruby RESPec, and so on. So once you understand a UI automation framework or tool, it’s easy to learn new frameworks and tools by analogy.

Interface automation

With SaaS now in the mainstream, apis, or interfaces, become a core part of supporting the business. The front-end page and the business data in the App communicate with the server through various APIS to achieve business functions. At present, most of the interfaces are based on HTTP protocol, and most of them are Restful interfaces. Many languages, such as Python and Ruby, have good libraries to support HTTP requests, which provides a good basis for designing interface automation. Back to our core issue, the measurement of the input-output ratio. UI automation is huge both in terms of implementation cost and maintenance cost, so the industry is increasingly focusing on interface layer automation implementation. Automation of interfaces has the following advantages:

  • High operating efficiency
  • Low development cost
  • Low maintenance cost
  • Development can be synchronized with development code

The idea of interface automation is also simple and clear, that is to simulate the browser, send HTTP requests to achieve the interface call, and then compare the return and expected, to achieve the purpose of verifying the results. Of course, it is not easy to design a truly efficient interface automation framework. This involves how to improve the development efficiency of use cases, reduce development and maintenance costs and other key issues. At the same time, interface testing and performance testing can be combined to enrich the connotation of interface automation testing.

Quality management process

In the process of agile development, there is a new definition of test Engineer: Quality Assurance Engineer. The execution of the test is only a part of the responsibility, more importantly, to be responsible for the product quality of the whole team. Throughout the sprint, QA engineers are committed to quality assurance, and the relationship with development shifts from finding bugs early on to helping the development team improve the quality of the product. Also, work closely with the product team to get involved in the requirements analysis phase, analyzing how quality assurance efforts are planned and designed, rather than in the pre-release test execution phase. There are also many Soft skill requirements, including how to cooperate and communicate with the team, which is also one of the keys of agile development mode.

Industry technical knowledge

This part of the content actually covers the content is very rich, take the Internet industry for example. For an Internet product, test engineers need to understand or even master a lot of knowledge, from the technology stack of the front-end page, API design, back-end server design, database will be specifically mentioned later, as well as the architecture of the whole service, test engineers need to understand. In view of this problem, there is a very good question to help you sort out the knowledge involved, which is:

What happens between typing a web address into the browser’s input box and seeing the content of the web page?

The depth and breadth of answering this question can basically reflect a test engineer’s mastery of Internet product technology. Here, I briefly list some of the technologies and concepts involved, which are very helpful for us to test our products.

  • DNS
  • TCP/IP
  • HTTP
  • SSL
  • Restful
  • HTML
  • DOM
  • CSS
  • Render
  • Xpath
  • The server
  • nginx
  • SQL
  • Cookie&Session
  • XSS and CSRF are only involved in part of the content here, and the specific content can be studied and understood in depth according to the scenarios encountered in the work.

The database

Databases are singled out because database knowledge is central to many of today’s products. Whether in manual testing or automated testing, there is a need to go to the database for data verification. Currently, the main databases in use can be divided into two categories:

  • Relational database
  • Non-relational databases

Relational database

Relational database is the most common type of database, this kind of database through RDBMS database procedures to manage and use, common SQL Server, MySQL and so on. The concept of a Transaction is emphasized in relational databases. A transaction is a series of database operations defined by a user. These operations are either all executed or none executed. It is an indivisible unit of work. In a relational database, for example, a transaction can be a SINGLE SQL statement, a set of SQL statements, or an entire program. Transactions should have four attributes: atomicity, consistency, isolation, and persistence. These four properties are commonly referred to as ACID properties.

  • Atomicity: The transaction is executed as a whole, and all or none of the operations on the database contained within it are executed.
  • Consistency: Transactions should ensure that the state of the database changes from one consistent state to another. Consistent state means that the data in the database should meet integrity constraints.
  • Isolation: When multiple transactions are executed concurrently, the execution of one transaction should not affect the execution of other transactions.
  • Durability: Once a transaction is committed, their modifications to the database should be kept in the database forever.

For practical applications, SQL language is a must to master. To be able to find the required data in the database through SQL statements is a necessary skill for test engineers. The syntax of SQL statements is generally similar, with some details varying slightly between RDBMSS. It is also a common scenario for automated implementations to obtain expected values by accessing the database during automated tests. Different languages have libraries to access the database, and overall the application is very simple.

Non-relational databases

As the Internet in the production of large amounts of unstructured data, such as social networking applications and so on, the user’s personal information, social network, geographical location, user-generated data and user operation logs are already in the geometric rate of increase, also faces a lot of work, data mining has been unable to meet the traditional relational database. So NoSQL gradually developed. The most striking feature of NoSQL is the unstructured nature of the data, which in layman’s terms means that data is no longer stored as columns and rows. NoSQL stores data in many ways: value pair storage, column storage, and document storage. For example, the more common MongoDB stores data as a document, and the data structure consists of key=>value pairs. MongoDB documents are similar to JSON objects. Field values can contain other documents, arrays, and document arrays.

RDBMS vs NoSQL

RDBMS

  • Highly organized structured data
  • Structured Query Language (SQL)
  • Data and relationships are stored in separate tables.
  • Data manipulation language, data definition language
  • Strict consistency
  • Based on the transaction

NoSQL

  • Stands for more than just SQL
  • There is no declarative query language
  • There are no predefined schemas: key-value pair storage, column storage, document storage, graphic database
  • Final consistency, not ACID properties
  • Unstructured and unpredictable data
  • The CAP theorem
  • High performance, high availability and scalability

Business knowledge

Business knowledge of the product being tested is also very important to the test engineer. A test engineer may already have all of the above skills, but how can they be used to solve the core problem of software testing we mentioned earlier? The key, or central point, is the business of the product you’re testing. There are a variety of approaches to testing, planning, and implementation, and the choice between these approaches depends on a deep understanding of the business of the product. Here, the product business not only refers to the characteristics of the product, but also includes the user characteristics of the product, the user’s usage habits, and the resulting traffic trend for the product. In other words, the tester must analyze the product from the perspective of the user, not the product developer. Testers also need to find the core functions and business of the product, and through such analysis, prioritize testing and grade defects. It also has a significant impact on the planning and architecture of automated testing. For example, in automated testing, we should first cover those core businesses and functions. At the same time, according to the characteristics of the business, we should use automatic methods to simulate the user’s use scenarios, and put limited automation resources into the most critical part. This skill may sound very empty, as if there is no specific knowledge point, but in continuous work and summary, excellent test engineers are able to summarize a set of test methods suitable for a certain type of products, and even extract some more universal Best practices, which can be applied to different products.

Said in the last

Or such a short article can not cover the connotation of software testing, but the author also just want to throw a brick to introduce jade, so that readers can through such a comprehensive combing, combined with their own work experience, engaged in software testing work have a deeper understanding.

According to the skill tree listed in this article, THE author plans to write articles respectively for more detailed sorting and summary. I hope to learn and make progress together with colleagues. Meanwhile, I sincerely welcome you to correct my mistakes and shortcomings.