Report on Zagreb STC #14

Reading Time: 1 minute

Yesterday our sponsor was CloudSense, and we would like to thank them for warm hospitality. They provided usual pizza and not so usual beer, but most important was that we got to know new people that are very interested in software testing.

We started with usual introductions (there was 17 people), and after that Kreso gave introduction about CloudSense software development and testing challenges.

Zeljko announced Zagreb CITCON 2014, software testing unconference that will be held in September.
Ranko talked about latest free version of SoapUI, toll that helps him in testing web services. We concluded that for next meeting he should gave a talk about it.
During mingle time over pizza and beer, we discussed various software testing topics. We found out that one of CloudSense software testing challenges in domain of browser automation is auto regeneration of html elements

ids after every deploy. The tool is SalesForce, at it seems that testability is not one of the product features. It was very interesting to here how they cope with that problem. We concluded that software testing is heating up in Croatia, because there are many job posts for software testing positions. Great meet up, great host, we are looking forward for Zagreb STC #15!

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Testing Microsoft SQL server etl procedures using tSQLt

Reading Time: 2 minutes

One of appropriate test strategy for testing extract, transform and load (ETL) procedures is to use automation. In this post I will explain what on this field Microsoft has to offer.

When you need to test ETL procedure, you usually have a large set of test data. This is first indicator that automation could help you a lot. Microsoft offers, as part of SQL server, its extension of SQL, tSQL. Based on that, community around Microsoft SQL server developed tSQLt, database unit testing framework. It has features that are expected of every modern testing framework on database access object level. The most important one is transactional support, which means that during your test you can modify your database, perform your checks, and test will automatically revoke all database changes when it is done with execution.
As an IDE I recommend Microsoft SQL management studio express which gives you Microsoft Visual Studio features for database development.
You can start by taking quick start guide, which is actually quick. I do not recommend installing tSQLt to your development database. Write tests in tSQLt_Example database and access your database using database_name.database_table notation available in Microsoft SQL Server management studio.
In order to be able to use tSQLt, you need to now any kind of database stored procedure SQL extension. By following links in Quick Start guide, you will find all needed resources to start testing your ETL procedures.

And one lesson from BBST foundation course. tSQLt is database unit testing framework. What is unit in this context?
Please write your answers as comments of this post.

In my context I used tSQLt in following manner. I tested ETL procedure written in C# and run from command line. I explored input and output databases, and tried to discover business rules of ETL procedure. I coded those rules as tSQLt tests, and discuss them with business analyst using source of tSQLt tests as requirements documentation.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

Announcement for Zagreb STC #14 meetup

Reading Time: 1 minute

We are inviting software developers and testers to Zagreb Software Testing Club meet up #14 that will be held on Wednesday 26.02.2014, from 18.30. This time our host is CloudSense, Radnicka cesta 80, Zagreb.

CloudSense will introduce their business and present their everyday challenges in software testing.

Sponsor of this meet up is our host, CloudSense, so after presentation we will discuss in unconference manner, hot and not so hot testing topics over traditional free pizza and refreshments.
In order to estimate pizza requirements, please register at and confirm your attendance on following link.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

iBug in iMessage?

Reading Time: 4 minutes


I have found an issue in iMessage iPhone application service which is part of Messages Apple application. In this post I will describe iMessage behaviour and use consistency oracles for test reporting. Consistency oracles for test reporting is one of the topic that you can learn and practice at BBST foundations testing course.

The issue.

One of my contacts also use iPhone. I successfully received iMessage from that contact, but my immediate reply on that message failed with red exclamation symbol and red text “Not Delivered” next to my reply. At that time I thought that GMS network problem is the reason for that. When the issue repeated again, this time I clicked on red exclamation sign. Pop up message appeared with text “This iMessage was not delivered.” and options Try again, Send as Text message and Cancel. Send as text message successfully send my reply with notification that this is text message. This time I knew that my contact’s iPhone was at servicing and that he put his SMS card to phone that do not have iMessages application.

Consistency oracles

How to explain to programmers (or other stakeholders) that this is bad? I will use seven consistency oracles for test reporting.

  • consistent within product – is this iMessage behaviour consistent with behaviour of comparable functions or functional patterns within the iPhone? I choose for comparable function Messages text message service. I send to my home fixed line, with not enabled SMS service, text message. Messages application notified this as Text message, sending time, and green text message. There was no information that action failed. So iMessage behaviour is not consistent with this behaviour.
  • consistent with comparable products – is this iMessage behaviour consistent with behaviour of comparable functions or functional patterns within the afreesms web application? I entered my GSM phone number without last number and application reported in pop up window “Ops, something went wrong.” Here we have consistent iMessage behaviour.
  • consistent with history – present behaviour consistent with past behaviour. I noticed described iMessage behaviour in period of two weeks (iPhone servicing time period). I have not upgraded iOS in that period, so I can not apply this consistency.
  • consistent with our image – behaviour consistent with an image the organisation wants to project. Apple wants to project image to public as technology leader, inovation leader, product design leader, business solution leader. Not immediately knowing why sending of iMessage message failed, threatens Apple image as business solution leader. Behaviour is not consistent with this oracle.
  • consistent with claims – behaviour consistent with documentation, specifications, or ads. Support document for iMessage claims following for the case when iMessage is not available: On iPhone, if iMessage is unavailable, the message may be sent as SMS or MMS, depending on the content. Carrier messaging rates may apply. You can adjust this behavior on your iPhone at Settings > Messages > Send As SMS. My iPhone messages settings has iMessages on, MMS on, send as SMS off (send SMS message when iMessage is unavailable. Carrier messaging rates may apply). So we have consistent behaviour of iMessage with this oracle consistency.
  • consistent with standards or regulations -behavior consistent with externally-imposed requirements. Since iMessage is messaging application developed in house by Apple using its own Apple push notification service protocol, this protocol is considered as “externally-imposed” protocol. Behaviour is consistent with this claim, because failed message send is reported in iMessage application. 
  • consistent with user’s expectations -behaviour consistent with what we think users want. Regular user of iMessage application would know that click on exclamation mark would give him additional information about message failure, along with information how to resolve the issue. It would also know that sending SMS message is not primary purpose of iMessage application. We can discuss that Message setting send as SMS is on by default, but Apple decided not to go with defaulting that option to on because this involves additional cost and Apple first claim for iMessage application is: iMessage is an Apple service that lets you send unlimited messages over an active Wi-Fi (or cellular data*) connection to other iOS devices using iOS 5 or later or Macs using OS X Mountain Lion or later. So we have another consistency. And this consistency supports that iMessage is consistent with image consistency. Because standard Apple user business would not be threatened when sending iMessage fails. 
  • consistent with purpose – behaviour consistent with product or function’s apparent purpose. Purpose of product is to send messages from Message application for free and to notify user when sending of message fails. Another iMessage behaviour consistency, this time with purpose oracle.

My impression is that many todays testers think that they are testers simply because they know how to use some fancy testing tool or framework. But this is not core tester skill. Writing effective test reports is one of tester’s core skill. When I first noticed this iMessage behaviour, my first thought was: come on Apple, you can do better that that. Where are your testers? But going through consistency oracles for test reporting, I found out that I was wrong and that this iMessage behaviour is not a bug. And reporting this as s bug, I would loose credibility with Apple stakeholders.
Do you want to become credible tester? Go here and here.
Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

How to retrieve email from Microsoft Exchange using Ruby

Reading Time: 1 minute

As a tester I am biased towards open source technologies. Which implies that I am not biased towards Microsoft technologies. Should professional tester be allowed to have such an opinion? In this blog post I will explain why I was wrong.
In my Ruby rspec test, I have to read email from Microsoft Exchange server. Because of my bias against Microsoft technologies, I thought that this is not possible. After few Google searches, I came across Exchange Web Services Managed API. What, Microsoft opened its technology using open standard?! Shame on me and big plus for Microsoft. Next search lead me to Viewpoint Ruby gem. As repo is not aligned with recent work, here you can read about gem updated documentation. Master branch is not aligned with code published on Rubygems, so in order to explore all viewpoint methods, you need to explore viewpoint source that is installed to your local Ruby. Here is how to find gem path:

> irb
2.0.0p353 :001> require ‘viewpoint’
2.0.0p353 :002> puts Gem.loaded_specs[‘viewpoint’].full_gem_pat

Here is github gist with simple target=”_blank”>viewpoint client.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather

How to use OWASP ZAP proxy with httpclient Ruby gem

Reading Time: 1 minute

In this blog post I will explain how to configure Ruby httpclient gem in order to redirect its http traffic through OWASP ZAP http proxy.

When you are testing REST API functions of some web application, you also have to check the correctness of your testing scripts. In order to observe actual http traffic that is generated by your testing scripts that use httpclient gem, you have to redirect your traffic through  some HTTP proxy. Her I will explain how to redirect http traffic through OWASP ZAP proxy.

First, start OWASP ZAP proxy. Go to Tools->Options and get/set local proxy value. Default is localhost:8080. Set http_proxy environment variable. On unix run in terminal

export http_proxy=http://localhost:8080

For ssl proxing, first get ZAP certificate. Go to Tools->Options->Dynamic SSL Certificate and save certificate with pem extension to your repository root folder and with some descriptive file name (e.g. owasp_zap_root_ca.pem). Add following line of Ruby code in your httpclient configuration class:

@web_client =

@web_client.ssl_config.set_trust_ca ‘./owasp_zap_root_ca.pem’

Note: this is only code snippet and I would not work without additional code. For setting trusted certificates, second line is important.
Now run your testing scripts. As I am using rspec, my run command line is rspec spec/script_name.rb. In ZAP history tab you will see details for generated http traffic.

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather