Public speaking: lessons learned

I’m on the train going home from Gliwice, where Quality Excites conference was held this year. I was giving Testing Microservices Architecture talk here and it was my biggest event so far. Over the past few months I was fulfilling my personal goal, which was to participate in IT events as a speaker. I started as a complete beginner, and despite I still consider myself as one, I manage to gain some experience and learn important lessons.

FullSizeRender

Continue reading

Wiremock stateful behaviour

In distributed systems architecture, testing becomes much more complex than in monolith architecture. Although only end-to-end testing gives us full confidence of system-wide implementations, we should also test services in isolation. The easiest way to obtain isolation in microservices architecture is to stub external applications.

The problem is that mocks are usually stateless – they simulate application logic with fixed actions, without any conditional behaviour. If we want to test cases like HTTP latency or data redundancy validations, where external service represents different behaviour among repeated calls, simple mocks can be insufficient.

Continue reading

How to hire a tester

Being a tester is quite confusing: you write code, but you’re not a Programmer. You perfectly know business requirements, but you’re not a Product Owner. You handle test environments, but you’re not an DevOps. Role of technical testers in modern agile development teams is significantly different, and requires knowledge in many fields: software engineering, programming, test automation, environment management, …etc. Result? Hiring good and experienced testers becomes more and more difficult, since being one often means to be in temporary state before turning into programmer or product owner role. So, how to hire dedicated testers?

howtohiretester

Continue reading

Top 5 traps of test automation

This article by me was originally published on TheServerSide.

There’s a common phrase in testing: if you do something more than once – automate it. Software testing, where we routinely perform similar actions, is a perfect base for automation. In modern software development, with the use of microservices and continuous deployment approach, we want to deliver features fast and often. Therefore, test automation becomes even more important, yet still facing some common problems. Based on my experience, here is my list of top 5 mistakes that teams make in acceptance test automation.

not-sure-if-its-a-trap

Continue reading

Selenium Grid with Docker: custom nodes

In my last post I wrote about creating Selenium Grid with use of Docker. I’ve received some questions about customising node’s containers – by default, Docker containers for Selenium Grid nodes run only one instance of browser per node. It’s important to understand that running Grid on Docker is slightly different approach than running it alone – instead of building huge Grid with multiple nodes and dozens of browsers, you run few smaller, independent machines. If one machine is down – you throw it away and build another one. Great use case of Selenium Grid with Docker is to build Grid’s machines as a self service for teams in your company, or to build it automatically before automated tests trigger, and destroy it after.

Nevertheless, it is possible to tweak default node’s conteiners, so they would contain more browser instances. In this post we’ll create container with custom Selenium Grid’s node configuration – our container would provide more than one instance of browser. Remember, that if you have an account on Docker Hub, you can host one container for free, so after going through this tutorial you can commit your own container and host it, or just create your own, custom Grid on Docker, tailored to your needs.

containers

Continue reading

Building microservices testing framework

RESTful services and microservice architecture in general are big trends in the industry right now. I’ve noticed it also from this blog’s traffic analytics, where topics related with REST testing get the highest interest. Therefore I’ve decided to create some kind of example framework for RESTful APIs functional testing. Project is based on REST-Assured as a services client, Spock as a testing framework, Groovy and Gradle. You can clone full repository from my github. Tests are run against Wiremock API described in this post. Please consider this project as a kind of bootstrap, since it’s an example, not full-blown test framework. Ok, so as Linus said – talk is cheap, show me the code! (PS: and yes, I know that guy on the picture isn’t Linus Torvalds 😉 )

linus

Continue reading

2015 Retrospective and Planning

It’s almost a year since I started to run this blog (back then, under different domain) and following a good practice, I think it’s time to do a little retrospective. I will try to summarise some aspects that I’m happy about, and some which I think needs more focus in the future. I’ll also do a kind of planning (or maybe just filling a backlog) with ideas for next few months for this blog. I’ll include some interesting statistics about site traffic, page load times, and few bugs (of course) found in the process of site development.

retroBig

Continue reading

Selenium Grid with Docker

Selenium webdriver on it’s own, or with it’s implementation, like Geb is arguably the most popular solution for testing web-based applications. Besides all it’s greatness, it has some flaws. Selenium tests are slow, and it’s cost of maintenance is big. The answer for the first issue is distributed testing with Selenium Grid, which I described previously.

From the DevOps perspective though, setting Selenium Grid configuration like that is highly over-expensive and non-scalable. The answer for this can be Docker with it’s docker-compose tool. In this post we will try to create vm provisioned by docker-compose and set up scale Selenium Grid. All of this will be run with one command.

docker

Continue reading

Performance Testing – Vegeta Attack!

Performance testing is crucial field of modern software development. Taking into account that in today’s world majority of app’s communication is web-based, it turns out to be even more important.  However, it still enjoys less interest than automated functional testing, and publications on load testing subject usually focus on mature and complex tools like JMeter or Gatling. In this post I’d like to introduce command line usage of a super simple and lightweight tool for performance testing of HTTP services, which is Vegeta.

vegeta-min

Continue reading

What is Agile Testing?

So, what is this Agile Testing? It’s kind of fancy term and everybody use it in software development and QA world, but do we really understand it? What is different in agile approach to testing than in classic ones?

I will try to highlight core concepts, that stands for Agile Testing approach. Please don’t consider this as any kind of manifesto, rather that I want to summarize list of good practices for testers and QAs working in agile teams.

Strips-Fin-de-lagile-650-finalenglis-compressor

Continue reading