Contents
Introduction
Section 1: Auditing
What's Covered?
Planning Your Auditing Strategy
Getting Into the Right Mindset
Recording Your Findings
Automated Tooling
PHP Insights
Enlightn
Larastan
Style CI
Code Coverage
Manual Auditing
Investigating "raw" Database Queries
Finding Incorrect Authorisation
Checking Validation
Finding "Fake Facades"
Finding Business Logic in Helpers
Finding N+1 Queries
Finding Controllers That Use Other Controllers
Finding Logic and Queries in Blade Views
Finding Hard-Coded Credentials
Check Open Package Routes
Reviewing Project Documentation
Section 2: Testing
What's Covered?
Planning Your Testing Strategy
The Benefits of Writing Tests
Spotting Bugs Early
Making Future Work and Refactoring Easier
Changing the Way You Approach Writing Code
Tests-As-Documentation
Prove That Bugs Exist
Structuring Your Tests
Directory Structure
Choosing What To Test
Test Structure
Data Providers
Writing the Tests
Prioritising Mission-Critical Tests First
Writing the Rest of the Tests
Benefits of Writing the Easy Tests First
Preventing Test Fatigue
Testing Your UI with Laravel Dusk
Installation
Testing a Simple Form
Dusk Pages and Selectors
Running Failed Tests and Groups
Creating a CI Workflow Using GitHub Actions
Using an .env.ci File
Running the Test Suite
Larastan
Laravel Dusk
Output
Section 3: Fixing
What's Covered?
Planning Your Fixing Strategy
Using an Error Reporting System
Types of Errors
The Benefits of an Automated Error Reporting System
Error Reporting Using Flare
Uptime Checking, Queue Monitoring, and Scheduler Monitoring
Uptime Monitoring with Oh Dear
Scheduler Monitoring with Oh Dear
Queue Monitoring with Oh Dear
Updating PHP, Laravel, and Packages
Upgrading in Small Increments
Automating the Upgrade Using Laravel Shift
Planning Upgrades Early
Using a Suitable Local Development Environment
Using Tests to Fix Bugs
What is Test-Driven Development?
The Advantages of Test-Driven Development
The Disadvantages of Test-Driven Development
Fixing a Real Bug Using Test-Driven Development
Safely Removing Dead Code
Checking the Version Control History
Scream Test
Logging or Reporting the Usage
Removing the Code with an Atomic Commit
Section 4: Improving
What's Covered?
Planning Your Improvement Strategy
Making the Most of PHP's Type System
Using Type Hints and Return Types
Union Types
Type Hints and Return Types in Closures
DRYing Up Your Code
Advantages of DRYing Up Your Code
When to DRY Up Your Code
Refactoring Conditions
Reducing Indented Code
Replacing if and elseif with match
Using the Nullsafe Operator
Using Database Transactions
Adding the Database Transactions
Manually Using Database Transactions
Tips for Interacting with Third-Party Services
Using Automatic or Manual Transactions
Dispatching Queued Jobs inside Database Transactions
Improving the Testability of Your Code
Using Objects Over Arrays
Final Words
Discount Codes
Flare
Oh Dear
StyleCI
Laravel Security In Depth
Master the art of automated testing using Selenium with Java in this comprehensive guide. Whether you're a beginner or an experienced tester, the book equips you with the knowledge and techniques to build robust and maintainable test suites, ensuring the quality and reliability of your web applications.
This book starts introducing the basics of automated testing and the importance of Selenium. It then covers the setup and configuration of the Selenium WebDriver in Java, providing a solid foundation for your testing environment. You'll learn essential aspects of Selenium testing in Java, including working with different browsers, locating web elements using locators, and performing actions on them. From there, you’ll explore how to handle dynamic web pages and effective wait mechanisms and verifications to ensure accurate and reliable test results. The book also guides you in setting up Selenium in Java for continuous integration and emphasizes best practices for test codeorganization and maintainability, such as the Page Object Model (POM) and structuring test suites effectively. By the end, you’ll have the expertise to address advanced scenarios, such as working with iframes, and know how TestNG enhances Selenium automation, enabling structured tests, data-driven insights, and swift parallel executions.
Throughout the book, you'll benefit from real-world examples and practical exercises that reinforce the concepts. The clear explanations and step-by-step guidance make it easy to follow along and apply the knowledge to your own testing projects.
Understand the fundamentals of automated testing and the role of Selenium in web application testing
Set up the Selenium WebDriver in Java and configure the testing environment
Work with different web browsers and their drivers to perform cross-browser testing
Identify and locate web elements using various locators, such as IDs, class names, CSS selectors, and XPath expressions
Perform actions on web elements, such as clicking buttons, entering text, submitting forms, and navigating through web pages
Handle dynamic pages by implementing effective wait mechanisms, including implicit waits, explicit waits, and fluent waits
Verify and assert expected conditions and outcomes using assertions and verification techniques provided by Selenium in Java
Apply best practices for test code organization and maintainability, including using the Page Object Model (POM) design pattern
Handle advanced scenarios, such as working with iframes, and elevating Selenium automation through TestNG’s structured frameworks, data utilization, and parallel processing
Software testers, quality assurance professionals, and developers interested in mastering automated testing with Selenium and Java. Suitable for various experience levels. Offers practical insights and techniques to automate web application testing accurately and reliably. Benefits testers, developers, and individuals familiar with Java and web testing, empowering them to write robust, maintainable test code and integrate Selenium seamlessly into their workflows.