The Test Team helps manage testing and triage across the WordPress ecosystem. They focus on user testing of the editing experience and WordPress dashboard, replicating and documenting bug reports, and supporting a culture of review and triage across the project.
Please drop by any time in SlackSlackSlack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. with questions or to help out.
After one month of very intensive activity, we have finally reached the end of the test team program. We would like to thank all the participants for their dedication and hard work throughout this period. The program has been a great success in many areas, and we have gathered valuable insights and feedback that will help us improve our whole contribution onboarding process.
During the program, we started with a total of 9 participants, but after some expected dropouts, we ended with 6 members, with most participants doing a fantastic job during the entire process. They were involved in tasks such as testing, documentation improvements, leading meetings, and a lot of feedback to support the team’s growth.
In a dedicated SlackSlackSlack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. channel, we have been able to work very closely with the participants, gathering information about their experience through the process and also sharing the progress of this program. There was no clear starting program structure, but one happened to begin shaping as weeks went by that could be described as follows for the record:
Program Weekly Structure
The first week was focused on onboarding all members on the testing protocol as soon as possible, because one of the main targets was to go through a significant amount of tickets through the program period.
During the second week, we started introducing the meeting protocols, both for patch testing scrubbing and how to run the weekly test meetings with the corresponding agenda and summary post publishing. We also started to gather feedback on the testing protocol because the initial test results started to pop up.
For the third week, we switched the focus to documentation improvements, and we started to gather feedback on the meeting protocols and keep it up on the testing part. The contributor pathway video program began to come together.
Finally, for the last week, we tried to clear up all the final questions and analyze the current state of WordPress in correlation with the testing team to set future goals for the coming months.
Program Results
Overall, the program has exceeded our expectations in terms of engagement and results. Some goals were shared with the participants in the first interview, but from the experience we had from past programs, we knew that generally these goals were challenging to meet and could not be met. However, in this case, we have been able to achieve most of the goals and even exceed some of them. Here are some of the key results we have achieved:
Testing Reports
At the beginning of the program, there were a total of 487 tickets with the needs-testing label. By the end of the program, this number has dropped to 264, which is a significant decrease of almost 50%. This is by far one of the biggest achievements. We are pleased to observe that the protocol has been refined to a point that members were able to go through tickets at an excellent pace, understanding the whole process with proficiency. This will probably translate into a more efficient process in the future.
Documentation Improvements
Improving internal protocol documentation is something that requires more experience and time inside the team. However, we have been able to gather a lot of feedback and proposals for documentation improvements in our GitHub repository, which is a great starting point for the future. We have already started working on some proposals, and we hope to have them published in the following weeks.
The Crown Jewel: Test Contributor Pathway in Progress
One of the main goals of this program was to create a video training with a clear pathway for future contributors. We are delighted to announce that the program is almost completed, and we are planning to have it ready in a couple of weeks. A lot of feedback has been gathered through the program, and soon there will be an announcement in case anyone wants to join the “betaBetaA pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. program” to test the training and provide feedback before the official launch.
Participant Engagement Analysis as a Blueprint for Future Test Team Aspirants
We believe that sharing the results of the program participants could be useful for future WordPress contributors to understand which level of engagement is expected from them if they want to be part of the Test Team. And furthermore, to discover the different ways they can contribute to the team.
1. Ozgur (@ozgursar): Worked on a total of 68 testing reports, drove a test-chat and started leading to a documentation improvement regarding email testing. For the next few weeks, we expect the docs page to get published and a patch testing scrubbing meeting to be led to complete the whole circle. He is the first participant proposed to join the Test Team and continue his journey with us.
2. Huzaifa (@huzaifaalmesbah): Worked on a whopping total of 89 testing reports, which has been massive, and also proposed a documentation improvement regarding the `Getting started for testing` page structure. The only thing he has missed is leading some different meeting sessions, but there is already one scheduled for next week, and we are sure that with all the knowledge he has now, he is more than ready to lead more sessions in the future. He is the second participant suggested for joining the team.
3. Juanma (@juanmaguitar): He has been extremely active leading proposals for documentation improvements and providing a ton of feedback during all sessions, including a triaging guide, test-chat protocol guide, and some tips on post-tag improvement during a test-chat session. He has also led one test-chat session, but the only downside is that he has only been involved in testing 3 tickets, clearly the only weaker point that we hope could be improved in the following weeks to be somewhat on par with the rest of the participants. He is the third participant proposed for joining the team, and we are sure that with a bit more involvement in the reporting part, he can be a great asset for the team.
4. Erick (@r1k0): He worked through a grand total of 52 testing reports and also led one of the patch testing scrubs. There is only one thing that he has missed to go through the whole process, and it is the documentation improvement work and jumping into a couple more meeting leading sessions, but we are sure that he is more than ready to do it in the following weeks. He is the fourth participant recommended for joining the team, and we hope he jumps into the documentation part as soon as possible to be able to be on the team with a more complete profile.
5. Shazzad (@sajib1223): He was already active as a test team contributor before the program, but during the program, he has been able to consolidate many doubts he had about the test team protocols. He was able to run a patch testing scrub, but still in the other areas he has been lagging a bit. With no documentation proposals yet, only 10 tickets, and no test-chat sessions, we hope he can get quickly up to speed in the following weeks to be able to join the Test Team officially.
6. Mohammed (@mohkatz): He has been the last participant that has attended the whole program sessions, but unfortunately, he has not met the minimal requirements. With no testing reports, no documentation proposals, and no meeting-leading sessions. Hopefully, if he gives the team more time, he can get up to speed in the following weeks and be able to join the Test Team in the near future.
As I commented in the beginning, the other 3 participants that were selected dropped out in the beginning of the program for different reasons, and we hope that they can get involved in the future if they’d like to.
Future Directions and Organizer Personal Thoughts
As the organizer, I can’t stress anymore that this program has gone great, but simultaneously, I have to acknowledge that it has been very exhausting to organize. Running future programs like this is uncertain, and probably more organization and resource gathering will be required to be able to make it happen again in the following months. The dedication required from the organizers and participants is very high. Not only the two hours required for the live weekly sessions, but also the time to go through questions in the Slack chat, manually review most of the reports done and the documentation proposals, and also the time to create the training ideas.
Results of a program like this are proven to be excellent, but we need to find a way to make it more sustainable for the future. Luckily, now we have a couple of members onboarding in the team now and some additional ones probably soon, and we hope that they can take some of the leading load that has been driven by the current members in all testing areas, including, maybe, running future programs like this one.
Following this year’s nominations and voting period, we are pleased to announce our new Test Team Reps for the 2025-2026 term! 🎉 Join us in welcoming Moses Cursor Ssebunya and Nikunj Hatkar to represent the Test team!
Moses Musoke Ssebunya is a WordPress professional with over six years of experience in development, testing, and community engagement. Since 2018, he has contributed as a developer, translator, and tester, and has led teams on various WordPress projects.
An active member of the WordPress Community Team, Moses has spoken at WordCamps in Masaka, Entebbe, and Nairobi, and organized local meetups in Uganda.
Moses is passionate about improving WordPress through testing and fostering collaboration across the community.
Nikunj is a WordPress developer with expertise in pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party development, APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. integrations, and web solutions.
An active contributor since 2024, he has participated in multiple WordPress teams and helped organize local meetups. Passionate about open-source, he enjoys problem-solving and sharing knowledge.
As a Test Team Representative, he wants to focus on improving WordPress quality, reporting bugs, testing releases, and supporting the community.
Testing for backend upgrades, refactors of code, and overall any new feature that cannot be “touched or seen” regularly feels very challenging for most WordPress developers.
Sometimes unit-testing can do part of the heavy lifting, especially when having expertise in TDD, as a great deliverable could be provided.
The problem with unit-tests is that sometimes they are completely biased to our thoughts and ideas. It’s extremely difficult to think outside the box (especially when you are absorbed into a development that takes most of our attention), and this could potentially leave behind some scenarios you have not considered testing.
Adding up, when finally code is delivered, including sometimes those unit-tests, the rest of the people who are going to review it will not have the full understanding of the problem, with all the nuances, edge cases, or scenarios that could pop out of your resulting code.
As a WordPress developer, you have to consider that other reviewers in the team could range from a coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. committer with 15 years of code to a brand-new testing contributor out of a WordCampWordCampWordCamps are casual, locally-organized conferences covering everything related to WordPress. They're one of the places where the WordPress community comes together to teach one another what they’ve learned throughout the year and share the joy. Learn more. willing to start lending a hand. And getting them to review if the unit tests are right, or even to review the code and add new unit-tests for more edge cases is, in numerous instances, even for the most experienced reviewers, a hard task and something to avoid.
Here is why a Testing Use-Case could become really handy for these scenarios, a paradigm of testing that could be easily learned and applied and would help further progress many reports with patches that have been stuck for ages.
Let’s dive into the Testing Use-Case
Ideally, from a Testing perspective, the best code refactor, patch, upgrade, or feature is the one that actually addresses a problem you are already having.
For example, as a patch creator, you can find any of these scenarios:
Have a theme or a pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party that is missing this functionality.
Find a deprecation notice in the logs.
Find an error in code that requires not only a quick fix but a whole revamp of the code.
Have a real-life requirement by any real stakeholder in our business or life in general, and we can express the entire demand down to the last detail.
These are all examples of Testing-Use Cases
But what happens if you don’t have any of those? What if you are a code freestyler that likes to sort things before they actually happen? Or maybe you have been developing somewhere else and out of sudden you think about an alternative fix that could be improved, despite not really having a real-life example to showcase our idea?
Here is where building a Testing Use-Case becomes handy.
Ideas to Build Your Testing Use-Case
Not it’s time to put some examples of the most common issues that were found lately and how implementing a Testing Use-Cases could help to move forward the patch and overall any report that could potentially get stuck.
The Hook
One of the most common reports with troubles to be tested, and many end up in the “pending box” because of new HooksHooksIn WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same.. Most hooks come out of a specific need from a dev, but for some reason, many devs fear that explaining their use-case could feel “agendistic” and not usable by the majority. Also, it’s very common that there is almost always a workaround using outlandish PHPPHPPHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/preface.php. functions that bypass many standards and are not ideal by any means to achieve the same result as what a hook could provide us. So it’s very common that Hooks fade into oblivion.
Ideally, the #1 Testing Use-Case is, by far, explaining your business scenario without fearing any critique. Say you have a client that is paying you a big ticket, and you need that damned hook to get that attribute to do that selective filtering for the membership plugin you are building. This is totally fine if you need this hook for a commercial case. You can think that your case is unique and explanation will reveal it, but if you feel the need for this hook and there is no other straightforward way to achieve the same result without workarounds and hacks, it should be enough. Explaining the alternative solutions that were investigated will support your case. You may think that adding a hook to code is a simple thing, but when it is added, there will be no way to remove it or make changes that will break backwards compatibility, so the hook should be in the right place when it is definitely needed and have the right name and parameters. In addition, it should be documented in the code and in the Field guide and other documentation later. That one line of code requires a lot of support to happen.
Now to create the Testing Use-Case we have two options:
You can actually provide some of the code of that plugin you are building that showcases the feature where the new hook you are willing to implement is going to be applied.
If you would rather not showcase your code for copyright dilemmas with your client (funny in a GPLGPLGPL is an acronym for GNU Public License. It is the standard license WordPress uses for Open Source licensing https://wordpress.org/about/license/. The GPL is a ‘copyleft’ license https://www.gnu.org/licenses/copyleft.en.html. This means that derivative work can only be distributed under the same license terms. This is in distinction to permissive free software licenses, of which the BSD license and the MIT License are widely used examples. environment, but we all know that this still happens), reproduce a minimal MVPMinimum Viable Product"A minimum viable product (MVP) is a product with just enough features to satisfy early customers, and to provide feedback for future product development." - WikiPedia version of what you are willing to achieve, mocking some data or building a hydration function to fill whatever content is required to display the issue, and creating a very simple plugin that delivers that and uses that hook and executes successfully.
Choose whatever you prefer. But be aware that what is actually problematic is making your way through it without explaining much, without any testing at all, and despite the hook being super simple, straightforward, and unlikely to be problematic at all, this always leads to distrust and leans towards the forgotten zone where it will never be reviewed and integrated into the core. It’s always better to be transparent and clear of what needs to be done in a GPL environment, and in the worst case, discuss the feasibility and maybe a better clean code alternative if possible.
There is a rule in the WordPress community: never refactor if you don’t have a good reason for this. This is mainly because it takes many resources to test and debug issues coming from the refactor, and most code reviewers are busy enough just with the regular bugs to be fixed and pending improvements to be implemented to invest time in this protocol, so refactoring could be important but not as critical as other topics.
But very occasionally, there could a good reason for a code refactor, for example, an upcoming PHP deprecation.
In these cases, the best scenario, unfortunately, is waiting for the deprecation notice reports to appear, and start fixing from there, one by one. Bear in mind that deprecations take ages to be converted into unsupported features; hence, waiting is probably the best and easiest bet.
But what if you are a restless soul and like to have everything bleeding edge updated?
The following steps are recommended after the patch has been built (or before):
First, identify which core functions you have modified. If there are unit-tests already, you can edit them to cover your new code; otherwise you could always build them later.
Consider that the current function was working as-is with the current premise. You should start building a very simple plugin that uses this old premise with all the functions you modified, test them, and display the results.
After that, you will think about your new premise and again, in the same plugin, apply it once more to all the functions you modified.
Remember that both, before and after, you should be passing the test with the new premises. Yes, with a unit-test you are doing this. But, as it was commented in the beginning, unit-tests can become very convoluted (because they are not generally designed for simplicity, but for heavy-lifting the future-proof of the whole system). On the other side, a plugin can be elegant, simple, and easy to showcase all we want to test. Any coder, regardless of his coding level, will probably be able to inspect it, understand it, and maybe think in more edge cases based on what he sees. It’s a new paradigm of simplicity and support for your peer reviewers. And perhaps the difference between a lost into oblivion patch or a patch that will be reviewed comfortably and steadily. As a rule of thumb, it’s easier to port a test use-case plugin to unit-tests than the other way around.
This categoryCategoryThe 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. is like a hodgepodge because here you could find very different examples, and it’s going to be very difficult to make a general assumption on how to always proceed. But some rule of thumb could apply here, similar to the two previous sections:
If you have a real use case, a feature required by your client, or a snippet of code that can prove your enhancement, this will be sufficient. You simply need something more than unit-tests, that again, can be biased. Something that can be replicated in the WP front-end or admin panel and be tested with real data, not just with the mock samples from the unit-testing framework. Finding any of these is going to be the ideal scenario for most cases.
If, for some reason in life, it happens that you have come to this enhancement almost out of nowhere, while reviewing some other thing or for whatever other reason, a plugin that proves the new feature is clearly needed. The steps are very similar to the previous section, “Code Refactors” but adapting to the potential new functions we have developed.
Finally, the crown’s jewel of backend patches. In fact, most devs in the performance team are relatively familiar with this; hence, not much to be explained here for them. But just some general ideas for those who are still not very familiar with this.
A performance upgrade must factually test that there is a performance upgrade. It’s not enough with “before this it took 2 seconds and not it takes 1.” Real data that could be deployedDeployLaunching code from a local development environment to the production web server, so that it's available to visitors. in multiple computers, environments, etc. is required, and really show that there is a real performance improvement.
For this, you will need to write a plugin that does, at minimal, these two things:
A hydration system to generate X number of whatever we need to test. If a WP_Query with 10K posts should be tested, then a hydration plugin that actually creates those 10K dummy posts for us is required. If there is a plugin out there that works and does this, refer to it. Don’t suppose we all know it.
A plugin that, actually, makes use of those 10K posts and tests this performance improvement with functions like microtime and get_num_queries (including SAVEQUERIES)
This could feel pretty obvious, but these two parts are essential to building a Testing Use-Case for performance upgrades. And it’s still surprising the massive number of times that they cannot be found in the Performance tickets. Simply don’t expect anyone to write them for you. Take the lead and send it the whole pack by yourself: the patch + the plugin with performance tests. Otherwise, there is a big risk that the ticket ends forever in the forgotten box of unreleased patches.
More examples in the future will be provided as they become available because some categories, like the Back-End Enhancements and New Features, certainly need them.
If you have any comments, any questions, or any ideas to improve this guide on how to build your Testing Use-Case, please comment.
Props to @oglekler and @audrasjb for helping review this article and offering feedback
You must be logged in to post a comment.