Waweru Mwaura
Software Engineer
Waweru Mwaura is a software engineer and a life-long learner who specializes in quality engineering. He is an author at Packt and enjoys reading about engineering, finance, and technology. You can read more about him on his web profile.
![Developer RP sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2JbzjMah0Oqun3vNePlwoJ/ca93a1b54ee9be5c1e2499df684b042d/Tutorial-Intermediate-RP.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Contract testing with Pact
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer B sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/3BCGQWZ82HqX3Fb80MICvr/343c5ce6f8fd52d7fa68474505983a37/Tutorial-Intermediate-B.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Viewport testing with Cypress
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Tutorial-Intermediate-A](https://ctf-cci-com.imgix.net/1s6LKn090EJwGEpfUFUZMy/b529acd2183d8afe1d04bc0792aecc09/Tutorial-Intermediate-A.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Web scraping with Cheerio and Node.js
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer C sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/DtZJx2rtQkl00iwq5R8TW/a94ca5478d65ed8f762d0fad71db1fdb/Tutorial-Intermediate-C.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Accessibility testing with Cypress
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer RP sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2JbzjMah0Oqun3vNePlwoJ/ca93a1b54ee9be5c1e2499df684b042d/Tutorial-Intermediate-RP.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Mocking API requests with Mirage
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer A sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/1s6LKn090EJwGEpfUFUZMy/b529acd2183d8afe1d04bc0792aecc09/Tutorial-Intermediate-A.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Cypress component testing for React applications
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer RP sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2JbzjMah0Oqun3vNePlwoJ/ca93a1b54ee9be5c1e2499df684b042d/Tutorial-Intermediate-RP.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
JavaScript immediately invoked function expressions (IIFEs)
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer A sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/1s6LKn090EJwGEpfUFUZMy/b529acd2183d8afe1d04bc0792aecc09/Tutorial-Intermediate-A.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Conditional CircleCI pipeline execution
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer RP sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2JbzjMah0Oqun3vNePlwoJ/ca93a1b54ee9be5c1e2499df684b042d/Tutorial-Intermediate-RP.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Configuring a pipeline using multiple CircleCI orbs
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer D sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2jhAmaQbvDE5e0JAcZfVVy/a0596040a4eb4d0137b47105e975627a/Tutorial-Intermediate-D.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Dockerize a Python app and deploy to Docker Hub
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer B sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/3BCGQWZ82HqX3Fb80MICvr/343c5ce6f8fd52d7fa68474505983a37/Tutorial-Intermediate-B.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Testing Commander.js command line applications
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer A sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/1s6LKn090EJwGEpfUFUZMy/b529acd2183d8afe1d04bc0792aecc09/Tutorial-Intermediate-A.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Data structures for effective Python applications
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer B sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/3BCGQWZ82HqX3Fb80MICvr/343c5ce6f8fd52d7fa68474505983a37/Tutorial-Intermediate-B.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
From class components to React Hooks
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer RP sits at a desk working on an intermediate-level project](https://ctf-cci-com.imgix.net/3uyUcGrVFI9u4yOYN3NNYm/45f0e802c05a50f413c491fedd80212e/Tutorial-Intermediate-RP.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Making HTTP requests with Axios
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer D sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2jhAmaQbvDE5e0JAcZfVVy/a0596040a4eb4d0137b47105e975627a/Tutorial-Intermediate-D.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Application logging with Flask
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer C sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/DtZJx2rtQkl00iwq5R8TW/a94ca5478d65ed8f762d0fad71db1fdb/Tutorial-Intermediate-C.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Snapshot testing React applications with Jest
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer B sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/3BCGQWZ82HqX3Fb80MICvr/343c5ce6f8fd52d7fa68474505983a37/Tutorial-Intermediate-B.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Automating Flask deployments with PythonAnywhere
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer D sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2jhAmaQbvDE5e0JAcZfVVy/a0596040a4eb4d0137b47105e975627a/Tutorial-Intermediate-D.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Scheduling load tests and persisting output with k6
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer C sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/DtZJx2rtQkl00iwq5R8TW/a94ca5478d65ed8f762d0fad71db1fdb/Tutorial-Intermediate-C.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Using authentication decorators in Flask
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer B sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/3BCGQWZ82HqX3Fb80MICvr/343c5ce6f8fd52d7fa68474505983a37/Tutorial-Intermediate-B.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
API performance testing with k6
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer A sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/1s6LKn090EJwGEpfUFUZMy/b529acd2183d8afe1d04bc0792aecc09/Tutorial-Intermediate-A.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
HTTP request testing with k6
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer RP sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2JbzjMah0Oqun3vNePlwoJ/ca93a1b54ee9be5c1e2499df684b042d/Tutorial-Intermediate-RP.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Object validation and conversion with Marshmallow in Python
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer C sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/DtZJx2rtQkl00iwq5R8TW/a94ca5478d65ed8f762d0fad71db1fdb/Tutorial-Intermediate-C.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Testing a Flask framework with Pytest
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer D sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2jhAmaQbvDE5e0JAcZfVVy/a0596040a4eb4d0137b47105e975627a/Tutorial-Intermediate-D.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Testing an API with Cypress
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer B sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/3BCGQWZ82HqX3Fb80MICvr/343c5ce6f8fd52d7fa68474505983a37/Tutorial-Intermediate-B.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
API mock testing with Nock
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer A sits at a desk working on an advanced-level project.](https://ctf-cci-com.imgix.net/1s6LKn090EJwGEpfUFUZMy/b529acd2183d8afe1d04bc0792aecc09/Tutorial-Intermediate-A.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
API contract testing with Joi
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer
![Developer RP sits at a desk working on an intermediate-level project.](https://ctf-cci-com.imgix.net/2JbzjMah0Oqun3vNePlwoJ/ca93a1b54ee9be5c1e2499df684b042d/Tutorial-Intermediate-RP.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Beyond API testing with Jest
![Waweru Mwaura](https://ctf-cci-com.imgix.net/4sY9qwNVhkejXjfA7s3XJ3/5eaa5f07d59ffad01d55baa7ccaf68a8/waweru-mwaura.jpg?ixlib=rb-3.2.1&w=2000&auto=format&fit=max&q=60)
Software Engineer