SlideShare a Scribd company logo
AUTOMATED
TESTING IN DRUPAL
8
• @jaypan on Drupal.org and drupal.stackexchange.com
• Acquia certified Drupal Grandmaster
• Acquia Certified Developer
• Acquia Certified Developer – Front end specialist
• Acquia Certified Developer – Back end specialist
• Living in Japan since 2000
• Working with Drupal since 2007
• Currently writing a book on coding in Drupal
JAY FRIENDLY
JAY FRIENDLY
• Owner of Jaypan in Yokohama
• English https://www.jaypan.com
• Japanese https://www.jaypan.jp
• Jaypan specializes in
• high-performance AJAX/JavaScript heavy applications
• Custom module/theme development
• App Development
• Drupal integration with outside technologies
• JavaScript libraries
• Linux programs
• Multiple Drupal instances
• Technical consulting and translation (Japanese/English)
OVERVIEW
• Manual testing vs. automated testing
• How do automated tests work?
• History of testing in Drupal
• Types of automated tests in Drupal
• Discussion of each type of test
MANUAL TESTING
• Developer creates new functionality
• Developer tests new functionality
• Other people (client, team-members) test new functionality
• Found bugs are fixed
PROBLEMS WITH MANUAL TESTING
• Complex functionality requires significant time to test
• Easy to forget to test a given scenario
• Changes to code require re-testing every scenario after any change
• Changes to code in other parts of the system may break functionality
without anyone realizing it
• As time passes, the conditions that need to be tested may be
forgotten or lost as project members change
• Coming back to code after a period of time means the developer is
not sure what is required
AUTOMATED TESTING
• Developer creates automated tests that run through all testing
scenarios
• Testing system runs all tests and reports any behaviors that are
unexpected (aka bugs)
BENEFITS OF AUTOMATED TESTING
• Removes requirement of getting humans to test after each code
change
• Tests are faster than human testing
• Tests for the whole system can be run before committing any code to
a production server, to ensure new functionality in one part of the
system hasn’t broken functionality in another part of the system.
• If (or rather, when) new bugs are found, tests can be added along
with the fix, to ensure that the bug never arises again
• Overall system is more stable.
PROBLEMS WITH AUTOMATED TESTING
• Writing tests takes a significant amount of time
• Extra time means extra development resources
• Clients cannot directly see tests, and may not understand the extra costs
in developing when there is nothing for them to look at.
• Tests only test what they have been written to test. If the developer does
not think to test something, a bug could exist. The existence of automated
tests in such a case may create a false sense of security
• Tests happen in a virtual (non-visible) environment, making them hard to
debug (and even create)
• Changing code often requires re-writing old tests
OR IN OTHER WORDS, WHAT IS IT?
HOW DOES A TEST WORK?
• A test will first run some code, then do ‘assertions’ to ensure that the results work as
expected.
• For example, in Drupal 8, nodes have a method id(), that returns the ID of the
node.
• An automated test would create a new node object, then run $node->id() and test:
• Was a result returned?
• Is the result an integer?
• Is the returned ID the expected (correct) ID of the node that was created?
• Any failed assertions result in a failed test, telling the developer exactly what failed,
so they know what to fix.
AUTOMATED TESTING IN DRUPAL - HISTORY
• Drupal 6 - Simpletest module
• Drupal 7 - Simpletest in core
• Drupal 8 -
• Simpletest still in core but deprecated (to be removed in D9)
• PHPUnit introduced into core
• This presentation focuses exclusively on PHPUnit
TYPES OF TESTS IN DRUPAL 8
• Unit tests
• Kernel tests
• Functional tests
• JavaScript functional tests
UNIT TESTS IN DRUPAL 8
• A Unit is a PHP Class (OOP)
• Unit tests test code, not user-end functionality
• Unit tests will test a single class, to ensure that it behaves as
expected
• Unit tests test the unit (class) alone in isolation, rather than in the
Drupal environment
• Unit testing is very fast, as the system does not need to be
bootstrapped to run the tests
UNIT TEST OVERVIEW
• Unit tests go in [MODULENAME]/tests/src/Unit
• Namespace is DrupalTests[MODULENAME]Unit
• Unit tests extend DrupalTestsUnitTestCase
• Annotation should include (at a minimum)
• Class:
• @coversDefaultClass - the class the the test is testing
• @group - the group of tests (usually module name) that the test belongs to
• Method:
• @covers - the method of the class being tested
UNIT TEST OVERVIEW
• Testing class name should end in ‘Test’
• Example: the test for the Person class would be PersonTest
• Testing method (function) name must start with ‘test’
• Example: the method used to test the id() method of Person
would be testId()
UNIT TEST OVERVIEW
• Test classes can have a setUp() method, that sets up
conditions/objects before each test in the test class.
• Useful when all tests require a similar set of conditions
• Test classes can also have a tearDown() method, where objects
are cleaned up after each test in the test class.
• Test classes can have a setUpBeforeClass() method that is run
once before the test class is run
• Test classes can have a tearDownAfterClass() method that is run
once after the test class is finished
CLASS (UNIT) TO BE TESTED
class Person {
private $id;
public function setId($id) {
$this->id = $id;
}
public function id() {
return $this->id();
}
}
EXAMPLE UNIT TEST FOR PERSON CLASS
/**
* @coversDefaultClass Person
*/
class PersonTest {
/**
* @covers ::setId()
*/
public testId() {
$person = new Person();
$person->setId(123);
$this->assertNotNull($person->getId(), ‘A value is returned for the ID’);
$this->assertTrue(is_int($person->id()), ‘The returned ID is an
integer’);
$this->assertEqual(123, $this->getId(), ‘The returned ID is correct’);
}
}
KERNEL TESTS
KERNEL TESTS IN DRUPAL 8
• Kernel tests are executed in a limited Drupal environment, similar to
the environment before Drupal has been installed
• Tests can access files and the database
• Declared modules are loaded, but not installed. Installation needs
to be done manually
• Kernel tests are slower than Unit tests, but faster than Functional
tests
KERNEL TEST OVERVIEW
• Kernel tests go in [MODULENAME]/tests/src/Kernel
• Namespace is DrupalTests[MODULENAME]Kernel
• Kernel tests extend DrupalTestsKernelTestBast
EXAMPLE KERNEL TEST
Sorry no example!
FUNCTIONAL TESTS IN DRUPAL 8
• Functional tests work in an installed Drupal environment
• Modules needed for the test need to be declared for installation
• Tests use an internal browser (aka code - not visual), where links
can be clicked, form elements can be filled out, and pages can be
requested, all programmatically
• Users, roles, blocks and other entities can be created
• Tests are slow as each test builds a new Drupal instance in which
to run the tests
FUNCTIONAL TEST OVERVIEW
• Unit tests go in [MODULENAME]/tests/src/Functional
• Namespace is DrupalTests[MODULENAME]Functional
• Unit tests extend DrupalTestsBrowserTestBase
• Annotation should include (at a minimum)
• Class:
• @group - the group of tests (usually module name) that the test belongs to
• $modules property contains an array of modules to be installed
• example: $modules = [‘node’, ‘restrict_ip’]
FROM RESTRICT IP MODULE
EXAMPLE FUNCTIONAL TEST
namespace DrupalTestsrestrict_ipFunctional;
/**
* @group restrict_ip
*/
class RestrictIpAccessTest extends RestrictIpBrowserTestBase // which extends BrowserTestBase
{
protected static $modules = ['restrict_ip', 'node'];
/**
* Test that a user is blocked when the module is enabled
*/
public function testModuleEnabled()
{
$adminUser = $this->drupalCreateUser(['administer restricted ip addresses', 'access administration
pages', 'administer modules']);
$this->drupalLogin($adminUser);
$this->drupalGet('admin/config/people/restrict_ip');
$this->assertStatusCodeEquals(200);
$this->checkCheckbox('#edit-enable');
$this->click('#edit-submit');
$this->assertSession()->pageTextContains('The page you are trying to access cannot be accessed from
your IP address.');
}
}
JAVASCRIPT FUNCTIONAL TESTS IN DRUPAL
8
• JavaScript Functional tests work in a fully installed Drupal
environment
• Extends Functional tests to include JavaScript
• Require PhantomJS browser
• Virtual browser (no GUI)
• Requires installation on testing computer/server
• Can test #ajax methods, as well as other JavaScript functionality
JAVASCRIPT FUNCTIONAL TEST OVERVIEW
• Unit tests go in [MODULENAME]/tests/src/FunctionalJavascript
• Namespace is
DrupalTests[MODULENAME]FunctionalJavascript
• Unit tests extend
DrupalFunctionalJavascriptTestsJavascriptTestBase
• Annotation should include (at a minimum)
• Class:
• @group - the group of tests (usually module name) that the test
belongs to
FROM FANCY LOGIN MODULE
EXAMPLE JAVASCRIPT FUNCTIONAL TEST
namespace DrupalTestsfancy_loginFunctionalJavascript;
/**
* @group fancy_login
*/
class FancyLoginJavascriptTest extends FancyLoginJavascriptTestBase // which extends JavascriptTestBase
{
public function testDimmerBackgroundColor()
{
$this->openPopup();
$this->assertJsCondition('jQuery("#fancy_login_dim_screen").not(":animated")');
$this->assertJsCondition('jQuery("#fancy-login-user-login-form").not(":animated")');
$script = $this->createScriptString('#fancy_login_dim_screen', 'background-color', 'rgb(255, 255,
255)');
if(!$this->getSession()->evaluateScript($script))
{
throw new Exception('background-color is not white');
}
// …
}
}
WRITE TESTS THEN CODE
TESTING DRIVEN DEVELOPMENT
• Write tests as the start of the project, rather than the end
• Developers build and test as they go
• Gives a clear indicator of what to do next
• Gives a clear indication of when the project is complete
• Note - testing driven development is purely theoretical for me - I’ve
never done it
WHERE TO GO FROM HERE
• PHPUnit in Drupal 8 - https://www.drupal.org/docs/8/phpunit
• Documentation is limited
• Lots and lots of Googling
Thank you!
(Questions?)
Ad

More Related Content

What's hot (19)

Personal Productivity for Developers
Personal Productivity for DevelopersPersonal Productivity for Developers
Personal Productivity for Developers
Elmer Thomas
 
Mlflow with databricks
Mlflow with databricksMlflow with databricks
Mlflow with databricks
Liangjun Jiang
 
BDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User StoriesBDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User Stories
Sauce Labs
 
Unit testing
Unit testingUnit testing
Unit testing
Slideshare
 
Unit Tests And Automated Testing
Unit Tests And Automated TestingUnit Tests And Automated Testing
Unit Tests And Automated Testing
Lee Englestone
 
Introduction to using google colab
Introduction to using google colabIntroduction to using google colab
Introduction to using google colab
ali alemi
 
Automated testing web application
Automated testing web applicationAutomated testing web application
Automated testing web application
Kiattikhun Prathumma
 
Representing TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMMLRepresenting TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMML
Villu Ruusmann
 
“Houston, we have a model...” Introduction to MLOps
“Houston, we have a model...” Introduction to MLOps“Houston, we have a model...” Introduction to MLOps
“Houston, we have a model...” Introduction to MLOps
Rui Quintino
 
Test-Driven Machine Learning
Test-Driven Machine LearningTest-Driven Machine Learning
Test-Driven Machine Learning
C4Media
 
Testing Hadoop jobs with MRUnit
Testing Hadoop jobs with MRUnitTesting Hadoop jobs with MRUnit
Testing Hadoop jobs with MRUnit
Eric Wendelin
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
priya_trivedi
 
Types of performance testing
Types of performance testingTypes of performance testing
Types of performance testing
NaveenKumar Namachivayam
 
Software Quality Assurance (QA) Testing Interview Questions & Answers
Software Quality Assurance (QA) Testing Interview Questions & AnswersSoftware Quality Assurance (QA) Testing Interview Questions & Answers
Software Quality Assurance (QA) Testing Interview Questions & Answers
JanBask Training
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
Scott Leberknight
 
Defect analysis course v1.0
Defect analysis course   v1.0Defect analysis course   v1.0
Defect analysis course v1.0
Gunesh Apte
 
Model-based Testing: Taking BDD/ATDD to the Next Level
Model-based Testing: Taking BDD/ATDD to the Next LevelModel-based Testing: Taking BDD/ATDD to the Next Level
Model-based Testing: Taking BDD/ATDD to the Next Level
Bob Binder
 
Cloud migration
Cloud migrationCloud migration
Cloud migration
KreesanPillay1
 
Introduction to Automation Testing
Introduction to Automation TestingIntroduction to Automation Testing
Introduction to Automation Testing
Archana Krushnan
 
Personal Productivity for Developers
Personal Productivity for DevelopersPersonal Productivity for Developers
Personal Productivity for Developers
Elmer Thomas
 
Mlflow with databricks
Mlflow with databricksMlflow with databricks
Mlflow with databricks
Liangjun Jiang
 
BDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User StoriesBDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User Stories
Sauce Labs
 
Unit Tests And Automated Testing
Unit Tests And Automated TestingUnit Tests And Automated Testing
Unit Tests And Automated Testing
Lee Englestone
 
Introduction to using google colab
Introduction to using google colabIntroduction to using google colab
Introduction to using google colab
ali alemi
 
Representing TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMMLRepresenting TF and TF-IDF transformations in PMML
Representing TF and TF-IDF transformations in PMML
Villu Ruusmann
 
“Houston, we have a model...” Introduction to MLOps
“Houston, we have a model...” Introduction to MLOps“Houston, we have a model...” Introduction to MLOps
“Houston, we have a model...” Introduction to MLOps
Rui Quintino
 
Test-Driven Machine Learning
Test-Driven Machine LearningTest-Driven Machine Learning
Test-Driven Machine Learning
C4Media
 
Testing Hadoop jobs with MRUnit
Testing Hadoop jobs with MRUnitTesting Hadoop jobs with MRUnit
Testing Hadoop jobs with MRUnit
Eric Wendelin
 
Software Quality Assurance (QA) Testing Interview Questions & Answers
Software Quality Assurance (QA) Testing Interview Questions & AnswersSoftware Quality Assurance (QA) Testing Interview Questions & Answers
Software Quality Assurance (QA) Testing Interview Questions & Answers
JanBask Training
 
Defect analysis course v1.0
Defect analysis course   v1.0Defect analysis course   v1.0
Defect analysis course v1.0
Gunesh Apte
 
Model-based Testing: Taking BDD/ATDD to the Next Level
Model-based Testing: Taking BDD/ATDD to the Next LevelModel-based Testing: Taking BDD/ATDD to the Next Level
Model-based Testing: Taking BDD/ATDD to the Next Level
Bob Binder
 
Introduction to Automation Testing
Introduction to Automation TestingIntroduction to Automation Testing
Introduction to Automation Testing
Archana Krushnan
 

Similar to Automated php unit testing in drupal 8 (20)

Automated testing in Drupal
Automated testing in DrupalAutomated testing in Drupal
Automated testing in Drupal
Artem Berdishev
 
Testing
TestingTesting
Testing
Shweta Grover
 
Test in action – week 1
Test in action – week 1Test in action – week 1
Test in action – week 1
Yi-Huan Chan
 
Principles and patterns for test driven development
Principles and patterns for test driven developmentPrinciples and patterns for test driven development
Principles and patterns for test driven development
Stephen Fuqua
 
Java 201 Intro to Test Driven Development in Java
Java 201   Intro to Test Driven Development in JavaJava 201   Intro to Test Driven Development in Java
Java 201 Intro to Test Driven Development in Java
agorolabs
 
Drupalcamp Simpletest
Drupalcamp SimpletestDrupalcamp Simpletest
Drupalcamp Simpletest
lyricnz
 
Testing In Drupal
Testing In DrupalTesting In Drupal
Testing In Drupal
Ryan Cross
 
Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3
Drupalcon Paris
 
Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014
Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014
Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014
FalafelSoftware
 
Breaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit TestingBreaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit Testing
Steven Smith
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...
SQALab
 
Breaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit TestingBreaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit Testing
Steven Smith
 
Test Driven Development with JavaFX
Test Driven Development with JavaFXTest Driven Development with JavaFX
Test Driven Development with JavaFX
Hendrik Ebbers
 
Qt test framework
Qt test frameworkQt test framework
Qt test framework
ICS
 
junit-160729073220 eclipse software testing.pdf
junit-160729073220 eclipse software testing.pdfjunit-160729073220 eclipse software testing.pdf
junit-160729073220 eclipse software testing.pdf
KomalSinghGill
 
Junit
JunitJunit
Junit
FAROOK Samath
 
Into The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsInto The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applications
Ortus Solutions, Corp
 
Infinum Android Talks #17 - Testing your Android applications by Ivan Kust
Infinum Android Talks #17 - Testing your Android applications by Ivan KustInfinum Android Talks #17 - Testing your Android applications by Ivan Kust
Infinum Android Talks #17 - Testing your Android applications by Ivan Kust
Infinum
 
Apache DeltaSpike
Apache DeltaSpikeApache DeltaSpike
Apache DeltaSpike
os890
 
Unit tests = maintenance hell ?
Unit tests = maintenance hell ? Unit tests = maintenance hell ?
Unit tests = maintenance hell ?
Thibaud Desodt
 
Automated testing in Drupal
Automated testing in DrupalAutomated testing in Drupal
Automated testing in Drupal
Artem Berdishev
 
Test in action – week 1
Test in action – week 1Test in action – week 1
Test in action – week 1
Yi-Huan Chan
 
Principles and patterns for test driven development
Principles and patterns for test driven developmentPrinciples and patterns for test driven development
Principles and patterns for test driven development
Stephen Fuqua
 
Java 201 Intro to Test Driven Development in Java
Java 201   Intro to Test Driven Development in JavaJava 201   Intro to Test Driven Development in Java
Java 201 Intro to Test Driven Development in Java
agorolabs
 
Drupalcamp Simpletest
Drupalcamp SimpletestDrupalcamp Simpletest
Drupalcamp Simpletest
lyricnz
 
Testing In Drupal
Testing In DrupalTesting In Drupal
Testing In Drupal
Ryan Cross
 
Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3
Drupalcon Paris
 
Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014
Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014
Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014
FalafelSoftware
 
Breaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit TestingBreaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit Testing
Steven Smith
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...
SQALab
 
Breaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit TestingBreaking Dependencies to Allow Unit Testing
Breaking Dependencies to Allow Unit Testing
Steven Smith
 
Test Driven Development with JavaFX
Test Driven Development with JavaFXTest Driven Development with JavaFX
Test Driven Development with JavaFX
Hendrik Ebbers
 
Qt test framework
Qt test frameworkQt test framework
Qt test framework
ICS
 
junit-160729073220 eclipse software testing.pdf
junit-160729073220 eclipse software testing.pdfjunit-160729073220 eclipse software testing.pdf
junit-160729073220 eclipse software testing.pdf
KomalSinghGill
 
Into The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsInto The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applications
Ortus Solutions, Corp
 
Infinum Android Talks #17 - Testing your Android applications by Ivan Kust
Infinum Android Talks #17 - Testing your Android applications by Ivan KustInfinum Android Talks #17 - Testing your Android applications by Ivan Kust
Infinum Android Talks #17 - Testing your Android applications by Ivan Kust
Infinum
 
Apache DeltaSpike
Apache DeltaSpikeApache DeltaSpike
Apache DeltaSpike
os890
 
Unit tests = maintenance hell ?
Unit tests = maintenance hell ? Unit tests = maintenance hell ?
Unit tests = maintenance hell ?
Thibaud Desodt
 
Ad

Recently uploaded (20)

Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical DebtBuckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Lynda Kane
 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from AnywhereAutomation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Lynda Kane
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
"PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System""PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System"
Jainul Musani
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical DebtBuckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Lynda Kane
 
Image processinglab image processing image processing
Image processinglab image processing  image processingImage processinglab image processing  image processing
Image processinglab image processing image processing
RaghadHany
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from AnywhereAutomation Hour 1/28/2022: Capture User Feedback from Anywhere
Automation Hour 1/28/2022: Capture User Feedback from Anywhere
Lynda Kane
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...
Alan Dix
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
"PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System""PHP and MySQL CRUD Operations for Student Management System"
"PHP and MySQL CRUD Operations for Student Management System"
Jainul Musani
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Ad

Automated php unit testing in drupal 8

  • 2. • @jaypan on Drupal.org and drupal.stackexchange.com • Acquia certified Drupal Grandmaster • Acquia Certified Developer • Acquia Certified Developer – Front end specialist • Acquia Certified Developer – Back end specialist • Living in Japan since 2000 • Working with Drupal since 2007 • Currently writing a book on coding in Drupal JAY FRIENDLY
  • 3. JAY FRIENDLY • Owner of Jaypan in Yokohama • English https://www.jaypan.com • Japanese https://www.jaypan.jp • Jaypan specializes in • high-performance AJAX/JavaScript heavy applications • Custom module/theme development • App Development • Drupal integration with outside technologies • JavaScript libraries • Linux programs • Multiple Drupal instances • Technical consulting and translation (Japanese/English)
  • 4. OVERVIEW • Manual testing vs. automated testing • How do automated tests work? • History of testing in Drupal • Types of automated tests in Drupal • Discussion of each type of test
  • 5. MANUAL TESTING • Developer creates new functionality • Developer tests new functionality • Other people (client, team-members) test new functionality • Found bugs are fixed
  • 6. PROBLEMS WITH MANUAL TESTING • Complex functionality requires significant time to test • Easy to forget to test a given scenario • Changes to code require re-testing every scenario after any change • Changes to code in other parts of the system may break functionality without anyone realizing it • As time passes, the conditions that need to be tested may be forgotten or lost as project members change • Coming back to code after a period of time means the developer is not sure what is required
  • 7. AUTOMATED TESTING • Developer creates automated tests that run through all testing scenarios • Testing system runs all tests and reports any behaviors that are unexpected (aka bugs)
  • 8. BENEFITS OF AUTOMATED TESTING • Removes requirement of getting humans to test after each code change • Tests are faster than human testing • Tests for the whole system can be run before committing any code to a production server, to ensure new functionality in one part of the system hasn’t broken functionality in another part of the system. • If (or rather, when) new bugs are found, tests can be added along with the fix, to ensure that the bug never arises again • Overall system is more stable.
  • 9. PROBLEMS WITH AUTOMATED TESTING • Writing tests takes a significant amount of time • Extra time means extra development resources • Clients cannot directly see tests, and may not understand the extra costs in developing when there is nothing for them to look at. • Tests only test what they have been written to test. If the developer does not think to test something, a bug could exist. The existence of automated tests in such a case may create a false sense of security • Tests happen in a virtual (non-visible) environment, making them hard to debug (and even create) • Changing code often requires re-writing old tests
  • 10. OR IN OTHER WORDS, WHAT IS IT? HOW DOES A TEST WORK? • A test will first run some code, then do ‘assertions’ to ensure that the results work as expected. • For example, in Drupal 8, nodes have a method id(), that returns the ID of the node. • An automated test would create a new node object, then run $node->id() and test: • Was a result returned? • Is the result an integer? • Is the returned ID the expected (correct) ID of the node that was created? • Any failed assertions result in a failed test, telling the developer exactly what failed, so they know what to fix.
  • 11. AUTOMATED TESTING IN DRUPAL - HISTORY • Drupal 6 - Simpletest module • Drupal 7 - Simpletest in core • Drupal 8 - • Simpletest still in core but deprecated (to be removed in D9) • PHPUnit introduced into core • This presentation focuses exclusively on PHPUnit
  • 12. TYPES OF TESTS IN DRUPAL 8 • Unit tests • Kernel tests • Functional tests • JavaScript functional tests
  • 13. UNIT TESTS IN DRUPAL 8 • A Unit is a PHP Class (OOP) • Unit tests test code, not user-end functionality • Unit tests will test a single class, to ensure that it behaves as expected • Unit tests test the unit (class) alone in isolation, rather than in the Drupal environment • Unit testing is very fast, as the system does not need to be bootstrapped to run the tests
  • 14. UNIT TEST OVERVIEW • Unit tests go in [MODULENAME]/tests/src/Unit • Namespace is DrupalTests[MODULENAME]Unit • Unit tests extend DrupalTestsUnitTestCase • Annotation should include (at a minimum) • Class: • @coversDefaultClass - the class the the test is testing • @group - the group of tests (usually module name) that the test belongs to • Method: • @covers - the method of the class being tested
  • 15. UNIT TEST OVERVIEW • Testing class name should end in ‘Test’ • Example: the test for the Person class would be PersonTest • Testing method (function) name must start with ‘test’ • Example: the method used to test the id() method of Person would be testId()
  • 16. UNIT TEST OVERVIEW • Test classes can have a setUp() method, that sets up conditions/objects before each test in the test class. • Useful when all tests require a similar set of conditions • Test classes can also have a tearDown() method, where objects are cleaned up after each test in the test class. • Test classes can have a setUpBeforeClass() method that is run once before the test class is run • Test classes can have a tearDownAfterClass() method that is run once after the test class is finished
  • 17. CLASS (UNIT) TO BE TESTED class Person { private $id; public function setId($id) { $this->id = $id; } public function id() { return $this->id(); } }
  • 18. EXAMPLE UNIT TEST FOR PERSON CLASS /** * @coversDefaultClass Person */ class PersonTest { /** * @covers ::setId() */ public testId() { $person = new Person(); $person->setId(123); $this->assertNotNull($person->getId(), ‘A value is returned for the ID’); $this->assertTrue(is_int($person->id()), ‘The returned ID is an integer’); $this->assertEqual(123, $this->getId(), ‘The returned ID is correct’); } }
  • 19. KERNEL TESTS KERNEL TESTS IN DRUPAL 8 • Kernel tests are executed in a limited Drupal environment, similar to the environment before Drupal has been installed • Tests can access files and the database • Declared modules are loaded, but not installed. Installation needs to be done manually • Kernel tests are slower than Unit tests, but faster than Functional tests
  • 20. KERNEL TEST OVERVIEW • Kernel tests go in [MODULENAME]/tests/src/Kernel • Namespace is DrupalTests[MODULENAME]Kernel • Kernel tests extend DrupalTestsKernelTestBast
  • 22. FUNCTIONAL TESTS IN DRUPAL 8 • Functional tests work in an installed Drupal environment • Modules needed for the test need to be declared for installation • Tests use an internal browser (aka code - not visual), where links can be clicked, form elements can be filled out, and pages can be requested, all programmatically • Users, roles, blocks and other entities can be created • Tests are slow as each test builds a new Drupal instance in which to run the tests
  • 23. FUNCTIONAL TEST OVERVIEW • Unit tests go in [MODULENAME]/tests/src/Functional • Namespace is DrupalTests[MODULENAME]Functional • Unit tests extend DrupalTestsBrowserTestBase • Annotation should include (at a minimum) • Class: • @group - the group of tests (usually module name) that the test belongs to • $modules property contains an array of modules to be installed • example: $modules = [‘node’, ‘restrict_ip’]
  • 24. FROM RESTRICT IP MODULE EXAMPLE FUNCTIONAL TEST namespace DrupalTestsrestrict_ipFunctional; /** * @group restrict_ip */ class RestrictIpAccessTest extends RestrictIpBrowserTestBase // which extends BrowserTestBase { protected static $modules = ['restrict_ip', 'node']; /** * Test that a user is blocked when the module is enabled */ public function testModuleEnabled() { $adminUser = $this->drupalCreateUser(['administer restricted ip addresses', 'access administration pages', 'administer modules']); $this->drupalLogin($adminUser); $this->drupalGet('admin/config/people/restrict_ip'); $this->assertStatusCodeEquals(200); $this->checkCheckbox('#edit-enable'); $this->click('#edit-submit'); $this->assertSession()->pageTextContains('The page you are trying to access cannot be accessed from your IP address.'); } }
  • 25. JAVASCRIPT FUNCTIONAL TESTS IN DRUPAL 8 • JavaScript Functional tests work in a fully installed Drupal environment • Extends Functional tests to include JavaScript • Require PhantomJS browser • Virtual browser (no GUI) • Requires installation on testing computer/server • Can test #ajax methods, as well as other JavaScript functionality
  • 26. JAVASCRIPT FUNCTIONAL TEST OVERVIEW • Unit tests go in [MODULENAME]/tests/src/FunctionalJavascript • Namespace is DrupalTests[MODULENAME]FunctionalJavascript • Unit tests extend DrupalFunctionalJavascriptTestsJavascriptTestBase • Annotation should include (at a minimum) • Class: • @group - the group of tests (usually module name) that the test belongs to
  • 27. FROM FANCY LOGIN MODULE EXAMPLE JAVASCRIPT FUNCTIONAL TEST namespace DrupalTestsfancy_loginFunctionalJavascript; /** * @group fancy_login */ class FancyLoginJavascriptTest extends FancyLoginJavascriptTestBase // which extends JavascriptTestBase { public function testDimmerBackgroundColor() { $this->openPopup(); $this->assertJsCondition('jQuery("#fancy_login_dim_screen").not(":animated")'); $this->assertJsCondition('jQuery("#fancy-login-user-login-form").not(":animated")'); $script = $this->createScriptString('#fancy_login_dim_screen', 'background-color', 'rgb(255, 255, 255)'); if(!$this->getSession()->evaluateScript($script)) { throw new Exception('background-color is not white'); } // … } }
  • 28. WRITE TESTS THEN CODE TESTING DRIVEN DEVELOPMENT • Write tests as the start of the project, rather than the end • Developers build and test as they go • Gives a clear indicator of what to do next • Gives a clear indication of when the project is complete • Note - testing driven development is purely theoretical for me - I’ve never done it
  • 29. WHERE TO GO FROM HERE • PHPUnit in Drupal 8 - https://www.drupal.org/docs/8/phpunit • Documentation is limited • Lots and lots of Googling