tag:blogger.com,1999:blog-69164237583323033452024-02-07T04:07:22.510-08:00The Testing ExpressShivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-6916423758332303345.post-36535042712314644182017-05-05T07:22:00.000-07:002017-05-05T07:22:31.651-07:00Automation Perspectives & Misunderstandings<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">This observation is from the Indian IT companies point of view(I don't say all, but what I have worked with and those that I heard from my colleagues & friends):</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">There are 2 types of testers, Manual testers and Automation testers</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Automation tester can switch to manual testing role anytime but vice versa is not that easy!</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Automation is not same as development</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">All automation tools are same, If you know Selenium then by default you will definitely also know </span><br />
<span style="font-family: inherit;">the UFT's, the Cucumber's, the Carrot's :P ? why? because client needs it. </span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Automation is nothing but few automated data entries, clicks, verification..etc</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">If you know automation, you are bound to be in any interview panel that has the word "Automation" in the job requirements document.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Automation tests are like the high precision tests that should never fail, I don't care if it's a licensed tool or a free tool.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">What? you have completed the automation runs? I don't believe you ! where are the numbers? After giving numbers. how many defects you found using your automation scripts? none/one? what is the value you are providing?</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">We are facing issues with existing framework and tool, which other tool should be consider? let's start evaluation.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><br /></span>
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-20937859834712942512015-05-22T02:28:00.002-07:002015-05-22T02:28:41.036-07:00Selenium tips: Locate elements that have same attributes for all elements<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<br /></div>
Some times a group of elements have same attributes for all elements, in that case if I want to click or select any specific element from that group, it will be hard using any location strategies. Here is one solution that I came up with<div>
<br /></div>
<div>
<div>
WebDriver driver = new FirefoxDriver();</div>
<div>
driver.get("file:///D:/SameName.html");</div>
<div>
driver.manage().window().maximize();</div>
<div>
List<WebElement> cbox = driver.findElements(By.name("chk"));</div>
<div>
cbox.get(cbox.size()-1).click();<span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div>
<br /></div>
<div>
In the above code we are getting all elements using locator name and value "chk" into a List</div>
<div>
Then we are calling the get method on the list object by passing the index value and the performing the action.</div>
<div>
<br /></div>
<div>
<br /><span class="Apple-tab-span" style="white-space: pre;"> </span></div>
</div>
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-73137725249354466082015-05-19T01:52:00.001-07:002015-05-19T01:52:40.695-07:00Selenium : Mistakes and Learnings<div dir="ltr" style="text-align: left;" trbidi="on">
I had a long pending issue in a selenium script. Problem was, after succesfully completing a flight booking transaction, I wanted to verify the confirmation message and get the pass result.This is the way I had implemented<br />
<br />
public void isFlightConfirmationSuccessful(){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println(flightConfirmation.getText());<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if(flightConfirmation.getText()==("Your itinerary has been booked!")){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("Flight Booked Successfully");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if("more data" != null){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>backToFlights.click();<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}else<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>logOut.click();<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}else{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("Flight Not Booked");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
}<br />
<br />
Even though this method flightConfirmation.getText() would return the same string as expected "Your itinerary has been booked!" ,<br />
<br />
still I would get the result false.<br />
<br />
I was missing a java concept here "==" is not same as ".equals"<br />
<br />
".equals" checks the equality of content<br />
"==" checks the equality of references<br />
<br />
This is the code that passes the test<br />
<br />
public void isFlightConfirmationSuccessful(){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println(flightConfirmation.getText());<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if(flightConfirmation.getText().equals("Your itinerary has been booked!")){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("Flight Booked Successfully");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if("more data" != null){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>backToFlights.click();<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}else<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>logOut.click();<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}else{<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("Flight Not Booked");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
}<br />
<br />
<br /></div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-33574479661412815062015-05-17T12:52:00.000-07:002015-05-17T12:52:46.493-07:00Java Concepts - Strings literals<div dir="ltr" style="text-align: left;" trbidi="on">
what is string literal?<div>
it is a sequence of characters between quotations</div>
<div>
Eg; "apple"<br /><div>
<br /></div>
<div>
what is string literal/constant pool?</div>
<div>
Its a collection of references to string objects</div>
<div>
String objects that have references from string constant pool live on heap memory</div>
<div>
String s = "apple";</div>
<div>
s is a variable in string constant pool referencing to string object "apple" that lives on heap</div>
<div>
<br /></div>
<div>
if I write</div>
<div>
String s1 = "apple";</div>
<div>
s1 is another variable in string constant pool that is referencing to same object "apple"</div>
<div>
<br /></div>
<div>
<div>
s.equals(s1) // will return true because equals checks contents of objects</div>
<div>
s==s1//will also return true because equality operator checks for referential equality</div>
</div>
<div>
<br /></div>
<div>
String s = "mango";</div>
<div>
Here, reference of variable s is changing from "apple" to "mango", but "apple" object is still present in heap memory. Hence, strings objects are Immutable(cannot be changed)</div>
<div>
<br /></div>
<div>
s.equals(s1);//will return false because now s is referencing to object "mango" and s1 is referencing to object "apple", which are 2 different objects</div>
<div>
<br /></div>
<div>
String object referenced from the string literal pool is created when the class is loaded</div>
<div>
<br /></div>
<div>
String literals are not eligible for garbage collection, the object is always reachable through the intern() method.</div>
<div>
<br /></div>
<div>
<div>
source: http://www.javaranch.com/journal/200409/Journal200409.jsp#a1<br /><div>
<br /></div>
</div>
</div>
</div>
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-48482389718444474302015-05-04T12:14:00.000-07:002015-05-17T13:07:46.585-07:00Assertions in TestNG - HardAssert & SoftAssert<div dir="ltr" style="text-align: left;" trbidi="on">
TestNG is a unit testing framework used by developers, but it has also gained popularity among testers.<br />
<br />
It makes life easy of a tester while writing tests.<br />
This post will be focused on one of the important features of TestNG called Assertions.<br />
<br />
what is assertion?<br />
A statement that asserts that a certain premise is true<br />
<br />
In Testers language, Assertion is a check/validation to compare the expected and actual outcome.<br />
<br />
All the assertions are part of the Assert class<br />
<br />
Example of a assertion<br />
<br />
<code style="background-color: white;"><b>Assert.<a href="http://testng.org/javadoc/org/testng/Assert.html#assertEquals(boolean, boolean)">assertEquals</a></b>(boolean actual, boolean expected)</code><span style="background-color: white;"> </span><br />
<span style="background-color: white;">Asserts that two booleans are equal.</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">More assertions can be found here : </span>http://testng.org/javadoc/org/testng/Assert.html<br />
<br />
There are 2 types of assertions<br />
<br />
Hard assertions & Soft assertions<br />
<br />
Hard Assertion : Throws an AssertException once Assert fails and continues with execution of next test in the suite. For example if you have a bunch of assertions in a @Test, If one assertion fails, the whole test fails.All assertions after the failed assertion are skipped once a assertion fails.<br />
<br />
Soft Assertion; soft assert allows to continue with next @Test without throwing any exception<br />
<br />
Hard assert:<br />
<pre style="background-color: #eeeeee; border: 0px; color: #222222; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"> @Test(priority = 2)
public void ffPageElementsTestHardAssert() {
Assert.assertTrue(ffPage.ff_Type_oneway.isDisplayed());
Assert.assertTrue(ffPage.ff_Type_roundtrip.isDisplayed());
Assert.assertTrue(ffPage.ff_PassengerCount.isDisplayed());
Assert.assertTrue(ffPage.ff_DepartingFrom.isDisplayed());
Assert.assertTrue(ffPage.ff_DepartingMonth.isDisplayed());
Assert.assertTrue(ffPage.ff_DepartingDay.isDisplayed());
Assert.assertTrue(ffPage.ff_ArrivingIn.isDisplayed());
Assert.assertTrue(ffPage.ff_ReturningMonth.isDisplayed());
Assert.assertTrue(ffPage.ff_ReturningDay.isDisplayed());
Assert.assertTrue(ffPage.ff_ServiceClass_EC.isDisplayed());
Assert.assertTrue(ffPage.ff_ServiceClass_BC.isDisplayed());
Assert.assertTrue(ffPage.ff_ServiceClass_FC.isDisplayed());
Assert.assertTrue(ffPage.ff_Airline.isDisplayed());
Assert.assertTrue(ffPage.ff_Continue.isDisplayed());
}</code></pre>
Soft assert:<br />
<pre style="background-color: #eeeeee; border: 0px; color: #222222; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;"> SoftAssert sa = new SoftAssert();</code></pre>
<pre style="background-color: #eeeeee; border: 0px; color: #222222; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; margin: 0px; padding: 0px; white-space: inherit;">@Test(priority = 2)
public void ffPageElementsTestHardAssert() {
sa.assertTrue(ffPage.ff_Type_oneway.isDisplayed());
<span style="white-space: inherit;">sa</span><span style="white-space: inherit;">.assertTrue(ffPage.ff_Type_roundtrip.isDisplayed());</span>
<span style="white-space: inherit;">sa</span><span style="white-space: inherit;">.assertTrue(ffPage.ff_PassengerCount.isDisplayed());</span>
<span style="white-space: inherit;">sa</span><span style="white-space: inherit;">.assertTrue(ffPage.ff_DepartingFrom.isDisplayed());</span>
<span style="white-space: inherit;">sa</span><span style="white-space: inherit;">.assertTrue(ffPage.ff_DepartingMonth.isDisplayed());</span>
<span style="white-space: inherit;">sa</span><span style="white-space: inherit;">.assertTrue(ffPage.ff_DepartingDay.isDisplayed());</span><span style="white-space: inherit;"> </span>
}</code></pre>
Soft assertions can be helpful when we are validation forms.</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-31176000618946443442014-03-30T08:52:00.000-07:002014-03-30T08:52:02.421-07:00Back after a long gap<div dir="ltr" style="text-align: left;" trbidi="on">
It's been exactly 1 year since my last post. I have moved to my home town for a new job. It took some time to settle down. My work place is far away from my home, I was not able to spend much time to blog, But I have promised my self to continue from where I had left in whatever possible time I get.<br />
<br />
The domain of my new job is completely different from my previous jobs and the work culture is also different. The application which I am working on is vast and there is a big team that takes care of quality & development. Tight schedules as usual and ever changing requirememts. <br />
<br />
We also have a automation team that struggles to run automation scripts on each build because they have a list of problems that never end.<br />
<br />
It's been a long time since I have kept my self updated with selenium, With my new laptop, I need to set up the environment from scratch.While I am writing this post, softwares are already getting installed in the background.<br />
<br />
Hope to keep up my blogging pace.By the way this is my first post this year and happy about it, I believe anything first is always exciting & helps us to motivate ourselves.<br />
<br />
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-38527249973378479142013-03-30T03:58:00.000-07:002013-03-30T03:58:31.265-07:00Automated build deployment<div dir="ltr" style="text-align: left;" trbidi="on">
As a tester, the time we spend on each task is important, we need to keep identifying solutions that can save our time and effort. I will discuss one such solution we implemented during automated build deployment.<div>
<br /></div>
<div>
There are many tasks that we repeat several times, this will be exciting first few times when this task is new but once you get used to it, it becomes repeatative.<div>
<br /></div>
<div>
As part of my work I am responsible for deploying the client side builds to web server. There is a fixed process that needs to be followed always, this situation is appropriate for automation and the good thing is, it does not need much time and effort. First, I will highlight the manual process that is followed to achieve this task.</div>
<div>
<br /></div>
<div>
1.Checkout the code from svn with a specific revision number to folder in local machine</div>
<div>
2.Run a shell script to minify the buid</div>
<div>
3.Rename the minified build as per the naming convention</div>
<div>
4.Deploy build to server using any of the ftp clients, we used winscp.</div>
<div>
<br /></div>
<div>
This process takes 15-20 mins for each build</div>
<div>
If there is a mistake in build like</div>
<div>
Incorrect revision no</div>
<div>
Missing file</div>
<div>
Incorrect svn url</div>
<div>
This process needs to be repeated</div>
<div>
<br /></div>
<div>
The solution was simple, we used a shell script to automate this whole process. the only things we needed was svn commands, winscp commands & dos commands</div>
</div>
<div>
<br /></div>
<div>
This helped us reduce total deployment time from 15-20 mins to 5 mins</div>
<div>
<br /></div>
<div>
With the help of systems team we made this solution more optimized and brought down the deployment time from 5 mins to 1-2 mins</div>
<div>
<br /></div>
<div>
The systems guy introduced us to TeamCity which is a continous integration server, it has a lot of features that can help us achieve automated build deployment.</div>
<div>
Here are the general steps for setting up the deployment taken from teamcity site, This can vary based on your requirement.</div>
<div>
<ol style="background-color: white; font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 17.328125px;">
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;"><i>Write a build script that will perform the deployment task for the binary files available on the disk. (e.g. use Ant or MSBuild for this)</i></li>
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;"><i>Create a build configuration in TeamCity that will execute the build script.</i></li>
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;"><i>In this build configuration configure <a href="http://confluence.jetbrains.com/display/TCD7/Dependent+Build#DependentBuild-ArtifactDependency" style="color: #326ca6; outline: none; text-decoration: none;">artifact dependency</a> on a build configuration that produces binaries that need to be deployed</i></li>
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;"><i>Configure one of the available triggers if you need the deployment to be triggered automatically (e.g. to deploy last successful of last pinned build), or use "Promote" action in the build that produced the binaries that need to be deployed. Consider using <a href="http://confluence.jetbrains.com/display/TCD7/Dependent+Build#DependentBuild-SnapshotDependency" style="color: #326ca6; outline: none; text-decoration: none;">snapshot dependencies</a> in addition to artifact ones and check <a href="http://confluence.jetbrains.com/display/TCD7/Build+Chain#BuildChain-BuildChainsVisualRepresentation" style="color: #326ca6; outline: none; text-decoration: none;">Build Chains</a> tab to get the overview of the builds.</i></li>
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;"><i>If you need to parametrize the deployment (e.g. specify different target machines in different runs), pass parameters to the build script using <a href="http://confluence.jetbrains.com/display/TCD7/Triggering+a+Custom+Build" style="color: #326ca6; outline: none; text-decoration: none;" title="Triggering a Custom Build">custom build run dialog</a>. Consider using<a href="http://confluence.jetbrains.com/display/TCD7/Typed+Parameters" style="color: #326ca6; outline: none; text-decoration: none;" title="Typed Parameters">Typed Parameters</a> to make the custom run dialog easier to use.</i></li>
<li style="font-size: 10pt; line-height: 13pt; margin: 0px; padding: 0px;"><i>If the deploying build is triggered manually consider also adding commands in the build script to pin and tag the build being deployed (via sending a <a href="http://confluence.jetbrains.com/display/TW/REST+API+Plugin#RESTAPIPlugin-BuildTags" style="color: #326ca6; outline: none; text-decoration: none;">REST API</a> request).<br />You can also <a href="http://confluence.jetbrains.com/display/TCD7/How+To...#HowTo...-Sharethebuildnumberforbuildsinachainbuild" style="color: #326ca6; outline: none; text-decoration: none;">use a build number</a> from the build that generated the artifact.</i></li>
</ol>
<div style="text-align: left;">
<span style="font-family: inherit;"><span style="line-height: 17.328125px;">Build Script could be shell script or ant </span><span style="line-height: 17.328125px;">This build script will have the above manual process in form of commands,</span></span><span style="font-family: inherit; line-height: 17.328125px;"> once the configuration is completed you can just click a "run" button from the dashboard, deployment is done automatically and the results displayed on dashboard. There is also facility to check the log file to debug if deployment fails.</span></div>
<div style="text-align: left;">
<span style="font-family: inherit;"><span style="line-height: 17.328125px;">You can also add auto sending of emails if a build is deployed successfully to the relevant user group. This can be added in script. </span></span></div>
<div style="text-align: left;">
<span style="font-family: inherit;"><span style="line-height: 17.328125px;"><br /></span></span></div>
<div style="text-align: left;">
<span style="line-height: 17.328125px;">There is also facility to pass parameters to build script</span></div>
</div>
<div style="text-align: left;">
<span style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: x-small;"><span style="line-height: 17.328125px;"><br /></span></span></div>
<div>
<span style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: x-small;"><span style="line-height: 17.328125px;"><br /></span></span></div>
<div>
<span style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: x-small;"><span style="line-height: 17.328125px;"><i><br /></i></span></span></div>
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-38736849185328014482013-02-18T09:42:00.001-08:002013-02-18T09:42:28.662-08:00Selenium<br />
This is my first post on selenium - A web based automation testing tool. I got in touch with selenium when I was hired to automate an application and I choose to use selenium. I must admit that it was confusing for me at the start, but as I read and did more practice, I was better than before :)<br />
<br />
I had used Watir before using selenium, It was natural for me to compare both. Advantage of selenium was that it had IDE unlike watir which made selenium look more easy. but today I feel there is no advantage because I don't use IDE at all. In real time projects most people don't often use IDE for automation.<br />
<br />
For a new tester who wants to learn automation, IDE is a good way for getting the feel of automation, motivating testers to do more, BUT there comes a point during the learning curve of a tester, where recording and running script is no more happy happy or motivating.<br />
<br />
Next level requires some sort of scripting or programming skills, this is a challenge for some one who has never written a single piece of code. Either you give up and boast you know automation till record and playback or you start the challenging journey to learn.<br />
<br />
Selenium provides a decent list of options to choose as a supporting language, this is more confusing to someone who has never programmed, which language to choose?<br />
<br />
Initially its confusing & struggle to kickstart, but persisting will help you overcome and add to your learning curve. There are different tools provided by selenium that you need to understand and choose the options that you want to use for your automation.<br />
<br />
SeleniumRC, Web-Driver, Grid, IDE, Different language options<br />
<br />
Selenium Groups is a good place to join, you can hear and ask, you get lots of valuble learning tips.<br />
<br />
In addition, there are different tools used if you are developing automation as a fulltime project, it almost similar to any develpment project that needs versioning tools, build tools, development environment..etc<br />
<br />
Will be talking more about selenium experiences in upcoming posts<br />
<br />
Have a good time :)Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-60234516491114803252013-02-01T12:18:00.001-08:002013-02-01T12:18:36.634-08:00Is Playing a Game same as Game testing?(part2)<div dir="ltr" style="text-align: left;" trbidi="on">
This is a continuation from my previous post<br />
<br />
There are different categories of games, I will categorize them in only 2 ways<br />
<br />
1.Play free<br />
2.Play with real money<br />
<br />
Play free, as you all know are available on many game sites and social networking sites, you just need to login and then play.<br />
<br />
There are another category of games, gambling-oriented games that let people win or loose actual cash<span style="background-color: white; font-family: helvetica, arial, clean, sans-serif; line-height: 20px;">.</span> Here, you create an account, deposit money and play....that's it.<br />
<br />
Console games - Here you need to purchase hardware and the game software to play, you need to invest cash to buy<br />
<br />
There are other ways of making a player invest real cash in a game in the form of buying virtual currency, gifts...etc<br />
<br />
Now let me comeback to the topic of Game testing and Playing.<br />
<br />
If you are a tester who is testing the first category of games that are for free or the second category for real cash, the approach of testing would be different. there would be different strategy because the aim of building the games is different in each case from a business perspective. The is taken into consideration while testing the games.<br />
<br />
Now, If I am a game player or user who loves to play game, why the hell must I bother about the business perspective. My aim is entertainment. I want to play the game to enjoy. I will play the game and only complaint or get frustrated if I face some problem while playing, either I report the problem or don't comeback to this game or site. If I like the game I may give my feedback and suggest for more features.<br />
<br />
A game player plays for himself to enjoy while a game tester tests the game from different stakeholders perspectives and sees that game adds value to both end-user and company.<br />
<br />
In addition, a game tester also has to be technical to understand the the system which provide different features apart from the game itself. For example<br />
<br />
1.If you are testing a single player client based game developed using client side technologies like javascript, html5,css, major testing efforts are focused on the game functionality, user experience and compatibility<br />
<br />
2.If you are testing a multi player game eg; gambling games, which has client-server and database and a whole group of supporting servers, the testing scope and efforts increase. This kind of system is complex and a challenge for testers. Integration testing, database testing, system testing, backend testing, performance testing need to be considered in addition to the client side testing.<br />
<br />
A tester needs to understand the whole system and should be able to create good tests that can uncover defects.Test team needs to be in sync with other teams in order to rollout a good game. The competition in the gaming market demands new features quickly to retain users and attract new one's. This puts pressure on all teams including QA to rollout quality games ASAP.<br />
<br />
The severity or importance of a missed critical defect in a game is felt when<br />
<br />
1. your game crashes at peak user traffic and your users are seen on a competitor's site :)<br />
2. player looses real cash eventhough he has won the game<br />
3. game is not playable on a popular device<br />
4. player's game is reset to level1 after he has crossed 10 levels spending hours on clicking next level<br />
<br />
If you still feel that playing a game is same as testing a game you are kidding me? :)<br />
<br />
I am not aware of how the console based games are tested or how the beta testers work. I would be interested in knowing that.</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-74826834994312316182013-02-01T10:08:00.001-08:002013-02-01T12:18:54.714-08:00Is Playing a game same as Game testing?(part1)<div dir="ltr" style="text-align: left;" trbidi="on">
Game testing is not what most people assume it to be. Yes, I said ASSUME. It's pity that people judge with whatever limited knowledge they have. I feel sorry for them, because every one has freedom to form their own opinions.<br />
<div>
<br /></div>
<div>
Few examples</div>
<div>
1.I play free games on my mobile to pass my time</div>
<div>
2.We are a group of friends who play for fun during breaks</div>
<div>
3.I play to test my gaming skills</div>
<div>
4.I earn money by playing gambling games</div>
<div>
5.I am a professional online gamer</div>
<div>
<br /></div>
<div>
What do you call all these people in the above examples</div>
<div>
<br /></div>
<div>
Gamers?</div>
<div>
Users?</div>
<div>
Game testers?</div>
<div>
<br /></div>
<div>
Isn't there a difference in playing a game and testing a game?</div>
<div>
<br /></div>
<div>
Yes there is, this is what interests me and I will elaborate on this interesting aspect.</div>
<div>
<br /></div>
<div>
It is very natural to assume that playing is testing and testing is playing, but I would like to point out while playing do you really care about anything other than winning the game or reaching next level?</div>
<div>
<br /></div>
<div>
Every game's intention is to attract a user and make them involved in the game so that user gets addicted and keeps coming back. and a user's skill improves as he plays more and more and achieves new levels.</div>
<div>
<br /></div>
<div>
Now how is a game tester different from a user who plays a game</div>
<div>
<br /></div>
<div>
A tester needs be in control before he has the task of testing a game. there could be a tendency to get involved in a game. BUT here is the difference between a game tester and a game user</div>
<div>
<br /></div>
<div>
A game tester wears different hats to test the game to find bugs, these hats can be</div>
<div>
<br /></div>
<div>
F-hat - Functionality</div>
<div>
U-hat - Usability</div>
<div>
C-hat - Compatibility</div>
<div>
UI-hat - User interface(graphics, colors, effects, animations)</div>
<div>
E-hat - Entertainment(enjoyment, challenging)</div>
<div>
<br /></div>
<div>
A game user wears only one hat</div>
<div>
E-hat - Entertainment</div>
<div>
<br /></div>
<div>
The hats concept I have used from the famous author Edward de bono's classic - "Six Hats" for thinking skills, this helps us in testing different aspects of a game. </div>
<div>
<br />
When I say games, there are different categories of games and the user experience is also different. will continue this in next post...stay tuned</div>
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-32444365380394623602013-01-06T11:29:00.001-08:002013-01-06T11:31:25.910-08:00First post this year - Automation Buzz<div dir="ltr" style="text-align: left;" trbidi="on">
Don't get desperate to build castle in one day.<br />
<br />
The context is, testers doing manual testing suddenly realize that they need to learn automation, because one of his friends told that automation is mandatory in resume these days.<br />
<br />
So, my dear friend, goes to a automation tools forum and asks a question.<br />
<br />
"I am new to automation, please guide me how I can learn it quickly, send me code, sample examples, tutorials...blah...blah..blah".<br />
<br />
On one hand it's good that my friend is quick to act, as the saying does "Better late than never". But still, he needs to calm down and think, think and think.<br />
<br />
He has got a good start and now he needs to plan how he will achieve this goal, what are the methods to achieve this goal.<br />
<br />
-Ask yourself why you need to learn automation tool<br />
-Research on what automation tools are available.<br />
-What technologies they support<br />
-Does it support the application you test in your company<br />
-Do you need any programming knowledge<br />
-Ask friends who have experience in automation<br />
-Install tool, follow tutorials, get hands dirty, read, do and reflect<br />
<br />
I can keep writing more...<br />
<br />
Automation is good if applied sanely, but it cannot be a quick fix for each and every testing problem.<br />
<br />
I just realized, this is my first post of this year.<br />
<br />
Happy New Year :)<br />
<br />
<br /></div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-74120811312033241502012-12-20T11:52:00.000-08:002012-12-20T11:52:19.016-08:00Rip the Pessimism<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<br /></div>
<div>
I was interacting with a Junior team member and he was saying that, "There is no importance for QA". He was referring to the speech of head of the company. </div>
<div>
<br /></div>
<div>
Suddenly I did flashback about the year end speech. I remembered one of the statement that stuck me hard "we have delivered lot of products this year, this was possible due to quick iterations".</div>
<div>
<br /></div>
<div>
I was wondering what does he mean by quick iterations? Now I relate this with the juniors complain that QA is not valued. Then I tried to explain him. How are quick iterations possible? you cannot just develop+fix+deliver. This is not an iteration. develop+test+fix, This is called an iteration. test part is completely Ignored, people think that products are delivered in quick iterations without any testing efforts?</div>
<div>
Ignorance at its best.</div>
<div>
<br /></div>
<div>
Quality of build delivered depends on many factors</div>
<div>
<br /></div>
<div>
1.Experience of a developer</div>
<div>
2.Expertise on the technology and platform for which the app is built</div>
<div>
3.Knowledge about the domain</div>
<div>
4.Attitude for delivering quality code that has minimal defects if they are expected to be delivered quickly</div>
<div>
<br /></div>
<div>
These factors are never considered or not spoken at all. They are all assumed that they are part of a quick delivery process.</div>
<div>
<br /></div>
<div>
The role of QA in delivering a product in quick iterations is significant</div>
<div>
<br /></div>
<div>
QA gives developers </div>
<div>
-Freedom to make mistakes</div>
<div>
-Experiment with design</div>
<div>
-Helps test their solutions quickly</div>
<div>
-Provides valuble information</div>
<div>
-Give continous feedback</div>
<div>
<br /></div>
<div>
but there is no acknowledgement, because there is a lack of awareness from management. The only thing business/management is interested is to roll out the product as quickly as possible. credit being given to creator but not even a small part to the person who supported to make the product better for release. This is the sad part but we as testers have to live with it. Infact, we can proudly appreciate ourselves because we contribute without any expectations. I draw a parallel with the nature, it gives us so much still we don't appreciate and take it for granted :)</div>
<div>
<br /></div>
<div>
This is what I had to tell my junior team member to motivate him. I could see a broad smile on his face with pessimism turning to optimism.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-13355358757681428062012-11-04T10:53:00.000-08:002012-11-04T10:53:45.167-08:00Performance Testing - An Experience<div dir="ltr" style="text-align: left;" trbidi="on">
The best part our minds is that it always wants something new to do. I had an opportunity to do some performance testing which was something different from my daily routine.<div>
<br /></div>
<div>
Performance testing is considered to be part of non-functional testing group. The term itself suggests that in this type of technique, testers measure the performance application, server or the database. This process is similar to any other testing process, only difference is the requirements and goals. </div>
<div>
<br /></div>
<div>
My approach was to keep it simple. Start with a plan. Since I did not have any specific requirements, I had to define a baseline requirements based on conversation with server architect & database architect.</div>
<div>
<br /></div>
<div>
My first step was to define a baseline requirement which was my performance goal. Now few questions arise in my mind</div>
<div>
<br /></div>
<div>
Are these goals for the whole application? or for specific components? I made it clear again by discussion with all stakeholders that this was for the whole application. This helps in moving forward because you need to clear with what you are doing.</div>
<div>
<br /></div>
<div>
Next step was to choose a tool for performance testing. what tools must I use open-source or commercial? so, I started analyzing performance test tools that will fulfill my goals. since the project did not have a budget to afford a commercial tool at this stage of project, I had a very easy decision, I had to choose a open-source tool. After some analysis, I chose Jmeter for several reasons.</div>
<div>
<br /></div>
<div>
-open source & free</div>
<div>
-easy to use</div>
<div>
-has lot of features </div>
<div>
-most important it fulfills my goal</div>
<div>
<br /></div>
<div>
Do we have an environment for performance test? because if you do a performance test anywhere, then it will have consequences like results may not be correct, others may get affected who are using the same environment..etc.</div>
<div>
<br /></div>
<div>
I choose a environment that was under control so that it neither affects the results or any other persons.</div>
<div>
<br /></div>
<div>
We are entering the execution phase now. we have set up the environment and we need to do several runs to determine the results and information during runs.</div>
<div>
<br /></div>
<div>
All runs may not be successful but each run will give important information even if it fails.</div>
<div>
<br /></div>
<div>
After every run there were some steps needed in the environment setup to get the application back to what we call the initial or clean state.</div>
<div>
<br /></div>
<div>
For ever run a report was generated that captured all the details and it was presented to all stakeholders. The architect's did some tuning to see that we achieve the performance goals.</div>
<div>
<br /></div>
<div>
Finally, Performance goals for the sprint were achieved. During this experience I learned a lot of things that I like to share.</div>
<div>
<br /></div>
<div>
1.Baseline requirements are very important, they act as a goal for the performance test</div>
<div>
2.Environment must be set up correctly. </div>
<div>
3.Identify factors that can affect the test results</div>
<div>
4.Load test tool can simulate a limited no of users from a client machine. we need to know that number.</div>
<div>
5.The tests run within an intranet will give different results. This may not be the case in real world scenario</div>
<div>
6.Discuss with architect's based on information in test reports, what tuning they are doing for removing the bottlenecks, so that you can focus more in those areas</div>
<div>
7.Jmeter has both GUI and NON-GUI interfaces. It makes a huge difference</div>
<div>
8.While running tests you need to be observing the activity in server and db.Logs is one of the sources.</div>
<div>
<br /></div>
<div>
I am writing this article as my thoughts flow. It may not be as per best writing guidelines or rules, apologies for that. I will try to improve with each of my write ups.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-60174827296544594022012-08-29T10:11:00.001-07:002012-08-29T10:11:18.329-07:00Escape special characters - RubySelenium<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<br /></div>
We use JIRA as a defect tracking system. For a project we were not able to log defects in JIRA due to lack of time and frequent builds. we instead used google doc to log defects and track them. As the project moved on defects kept piling up. One fine day new manager took charge of this project and suggested to move all defects from googledoc to JIRA. <div>
<br /></div>
<div>
The first thought that came to my mind was to use automation tool to log defects. without giving a second thought and not bothering about any other solutions, I started working on it, because It had been a long time since I used automation tool, This was the only reason for not thinking about any other alternatives.</div>
<div>
<br /></div>
<div>
I decided to use selenium with ruby for this task. First I recorded the script with Selenium IDE and then exported it as a Ruby test. when I ran the test I found something strange. I was getting an error "Incorrect password", whereas I was able to login manually into JIRA login page. I was hitting my head to figure out this strange behavior.</div>
<div>
<br /></div>
<div>
I tried to enter a passoword that didn't have special charcters, and the tool was doing it perfectly but when I gave it my original password with special characters, It was not even typing it.At one instance I thought of changing my password to something that doesn't have any special characters, But it was not possible.So I choose to put my query in selenium groups. I got a reply the next day. I want to share that with you.</div>
<div>
<br /></div>
<div>
In RUBY you need to escape the special characters, since my test was in ruby it was not working, when I escaped them with '\' it worked like a breeze :)</div>
<div>
<br /></div>
<div>
Any problem is not a small problem until it is solved </div>
<div>
<br /></div>
<div>
I hope this post helps if you bump into a similar problem</div>
</div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-81676982245817792512012-08-26T11:51:00.003-07:002012-08-26T11:51:45.580-07:00HTML5+CSS+JS - Bringing power to browsers<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
I am amazed at the way browsers use is changing. The buzz word most heard with web developers is HTML5, because it comes with a lot of promise for web developers.<br />
<br />
The new elements in HTML5 have helped companies to build games, make the user experience more interactive with audio support. one of the most common terms with game developers is the <canvas> tag. There are quite few libraries that have been built to showcase the power of working with canvas and the results are astonishing. HTML5+Javascript+CSS are becoming one of the powerful technologies to rollout smart apps that attract the users.<br />
<br />
But, there are challenges as well like<br />
<br />
IE doesn't support the canvas tag<br />
Developed apps must be compatible with browsers and devices<br />
Javascript is not considered to be as robust as programming languages like Java....<br />
Performance issues<br />
<br />
Its also a challenge for testers to test the apps built using these platforms, Though some apps are small but still they need to work well on all platforms. Time pressure to rollout apps ASAP still worsens the problems.<br />
<br />
I have tried my hands to do some experiment using html5 and see what it is all about, my experience is that it is fun to play with these technologies, It doesn't need a heavy setup as with programming languages, You just need a text editor, and a browsers. The browser have very good debugging tools that makes it more easy. I found a lot of problems both from a developer's perspective and a tester's perspective.<br />
<br />
I built a bouncing balls POC using HTML5, CSS and Javascript. It was fun.<br />
<br />
I promised myself to jump to next level and build a nice game next time :)<br />
<br />
<br /></div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-18068444498327898142012-07-02T12:06:00.003-07:002012-07-02T12:06:49.901-07:00Version control - Part1<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
As a tester, <br />
<br />
How may times have you encountered this <br />
<br />
1)You recieved a wrong build?<br />
2)A closed defect is reproducible?<br />
3)Fixes are missing from build?<br />
4)QA environment has different version from dev environment?<br />
<br />
Software versioning and revision control is one of the most important activity of a software project. There are many freeware and commercial version control tools available in market, The main aim is to help developers manage code.<br />
<br />
Why should a tester know about version control? what is the use? A tester gets a deployed build to test from a deployment team or a development team. why does he need to worry?<br />
<br />
Because, This is one of the potential areas of bugs being created.<br />
<br />
For Example, Imagine a software project team divided into different groups: server team, client team, graphics team, database team etc. Eventhough they all work on different groups of a project, they all use a common source control tool to manage and maintain their code. This is infact a place where many things can go wrong. That is why project managers or leads define a common structure and best practices for all the groups to follow so that they do not make mistakes.<br />
<br />
In theory this looks easy but in practical, it is very hard to avoid mistakes. Sofware development is considered a complex activity, As the project scope increase, so does the team size and with the changing dynamics, it is very important to keep every thing in sync.<br />
<br />
Today I got an opportunity to attend a session on SVN. It was very interesting. I heard a lot of terms used in the session which I will list out here<br />
<br />
Trunk<br />
Branch<br />
Tag<br />
Merge<br />
Conflict<br />
Commit<br />
Update<br />
Repository<br />
Version<br />
<br />
In another post we will discuss more about each of these terms.</div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-73906943513958873762012-07-01T12:44:00.001-07:002012-07-01T12:44:36.034-07:00What Testing IS and NOT<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<br />
A tester is the only person in a software project who has priviledge of knowing the product end-to-end. This is unlike their developer counterparts, who are restricted to certain feature or module.<br />
<br />
Testing is considered a natural trait in any person. I feel this is a misconception. Though, testing is a natural activity, but It needs more skills, passion and attitude. Tester's only get better by practice. The more complex the software the more challenging it is for any tester.<br />
<br />
There may be few simple applications, which gives the tendency that testing is simple. For me, testing is an interesting & challenging activity, where I can use and apply my skills. Testing is not bounded to one specific area, unlike developers who are labeled by the technology. EG; Java developers, C++ developers. Even there are many agencies or companies who try to label testers as database testers, windows testers. This is irrelavant.<br />
<br />
Testing is similar to solving puzzles where you have different categories of puzzles, similarly different applications in testing terms. The skills needed are same but strategies may differ.<br />
<br />
A tester who is testing a banking application cannot use the same technique/methodologies when he is testing a massive multiplayer game. There is nothing as a "Banking applications" tester or a "Gaming" tester. A tester who can test banking application can test gaming application as well and vice versa. The only thing that changes is domain. <br />
<br />
Because testing is considered a natural trait, we can draw inspiration from different fields of professions for ideas & skills. Tester's can wear different kinds of hats based on situations<br />
<br />
Testers are like <br />
Detectives - Investigation skills<br />
Journalists - Question asking abilities<br />
Scientists - Analysis, problem solving <br />
Politicians - Diplomatic<br />
Military - Team management & leadership skills<br />
<br />
Testing is NOT <br />
-a simple activity<br />
-last option<br />
-something everyone can do<br />
-the only activity of finding bugs<br />
-about finding mistakes<br />
</div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-4617391864242954662012-06-25T11:18:00.000-07:002012-06-25T11:18:15.492-07:00Recursion - A simple example in ruby<div dir="ltr" style="text-align: left;" trbidi="on">
<em>class Recursion </em><br />
<em> def sum_positive(n)<br /> <br /> if n==1<br /> $t = 1<br /> else<br /> $t1= n.to_i + sum_positive(n-1)<br /> end</em><br />
<br />
<em> end</em><br />
<br />
<em>end</em><br />
<br />
<em>s = Recursion.new<br />puts s.sum_positive(9) </em><br />
<br />
Problem: Write a recursive Ruby function <tt>sum_positive(n)</tt> that has one parameter <tt>n</tt> that represents a positive integer. The function should return the sum of the first n positive integers. Your solution must use recursion and should not have a loop in it. <br />
Eg; <br />
sum_positive(5) must give<br />
<br />
5+4+3+2+1 = 15 as output<br />
<br />
Do you have a better solution?</div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-32346520449443103892012-06-25T10:54:00.001-07:002012-06-25T11:19:27.086-07:00Why every release is a "ThRilleR"<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
I bet you too might have experienced this. Thrillers have<br />
<ul style="text-align: left;">
<li>Tension</li>
<li>Suspense</li>
<li>Excitement </li>
</ul>
"A thriller is villain-driven plot, whereby he or she presents obstacles that the hero must overcome" - wikepedia<br />
<br />
I agree with the above statement from wiki. Now you need to fit in the characters in the above statement.<br />
Don't take it seriously ;)<br />
<br />
I always keep thinking, why this happens?<br />
<br />
Improper planning<br />
Lack of motivation in team<br />
Lot of changes<br />
Unexpected deadlines<br />
Unreasonable expectations<br />
Lacking a good leader<br />
Too much commitment<br />
Casualness<br />
<br />
Add on, if you can share from your experiences<br />
<br />
<em>"Paani da rang vekh ke, akhiyaan cho hanju rul de" = "Seeing the color of water, tears roll down my eyes" -AK</em></div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-32627619546040733962012-05-19T07:48:00.001-07:002012-05-19T09:22:54.564-07:00Adding power to browsers - node.js<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;">As a tester I need to keep myself updated with the latest technologies and tools, So I thought of putting down my learning experiences here</span><br />
<br />
</font><span style="font-family: Verdana, sans-serif;">There is a new technology in the javascript land called "node.js", it is being used in one of our projects. This gave me some motivation to explore it.</span><br />
<br />
</font><span style="font-family: Verdana, sans-serif;">I was thinking, where does node.js fit in the knowledge/information I have? I started with browser as a starting point. The main basic elements of a browser are HTML, JavaScript & CSS. I will be referring JavaScipt as js, because I may need to use it often. </span><br />
<div>
</div>
</font><span style="font-family: Verdana, sans-serif;">what problem does js solve? </span><br />
<span style="font-family: Verdana, sans-serif;">Html can serve only static webpages, js can serve dynamic webpages.</span><br />
<div>
</div>
</font><span style="font-family: Verdana, sans-serif;">I tried to find out more information about js:</span><br />
<br />
</font><span style="font-family: Verdana, sans-serif;">1) js is an interpreted language with object-oriented capabilities</span><span style="font-family: Verdana, sans-serif;"> </span><br />
<span style="font-family: Verdana, sans-serif;">2) js runs in a single threaded environment, meaning multiple scripts cannot run at the same time</span><span style="font-family: Verdana, sans-serif;"> </span><br />
<span style="font-family: Verdana, sans-serif;">3) Each of the popular browsers use different js engines</span><br />
<div class="MsoNoSpacing" style="margin: 0in 0in 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Verdana, sans-serif;">IE – Chakra</span></i></div>
<div class="MsoNoSpacing" style="margin: 0in 0in 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Verdana, sans-serif;">FF – SpiderMonkey(built in C++), Rhino(built in Java)</span></i></div>
<div class="MsoNoSpacing" style="margin: 0in 0in 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Verdana, sans-serif;">Safari – Nitro</span></i></div>
<div class="MsoNoSpacing" style="margin: 0in 0in 0pt;">
<i style="mso-bidi-font-style: normal;"><span style="font-family: Verdana, sans-serif;">Chrome – V8</span></i></div>
<br />
</font><span style="font-family: Verdana, sans-serif;">What is node.js?</span><br />
<em><span style="font-family: Verdana, sans-serif;">"node is a bunch of sugar on top of virtual machine v8" --Quote from Ryan Dhal, creator of node.js</span></em><br />
<br />
</font><span style="font-family: Verdana, sans-serif;">It means node is a tool built on top of google's js engine v8, this is the same engine which chrome browser uses.</span><br />
<br />
</font><span style="font-family: Verdana, sans-serif;">What problem does node.js solve?</span><br />
<span style="font-family: Verdana, sans-serif;">js has concurrency issues, it is not possible to do several things at same time, node addresses this concurrency problem. you can run multiple scripts at same time. It means response times are fast.</span><br />
<br />
</font><span style="font-family: Verdana, sans-serif;">Eventhough node solves this problem, it has some limitations</span><br />
<span style="font-family: Verdana, sans-serif;">its still young and immature, you can listen to this video to know more about node from the creator ryan dhal </span><a href="http://www.youtube.com/watch?v=jo_B4LTHi3I"><span style="font-family: Verdana, sans-serif;">http://www.youtube.com/watch?v=jo_B4LTHi3I</span></a><br />
<br />
</font><span style="font-family: Verdana, sans-serif;">Important points </span><br />
<ul style="text-align: left;">
<li><span style="font-family: Verdana, sans-serif;">generally js is executed in browsers, with node you can execute js from outside a browser</span></li>
<li><span style="font-family: Verdana, sans-serif;">node has a command line tool/console, similar to irb in ruby</span></li>
<li><span style="font-family: Verdana, sans-serif;">you can execute javascript file from the command line tool/console using node command</span></li>
</ul>
<span style="font-family: Verdana, sans-serif;">For testers this can be a important tool in the toolkit for learning & exploring js, which is an important element of a browser.</span></div>
Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-46307032649496830552012-05-04T12:51:00.002-07:002012-05-19T08:05:52.389-07:00Automation - The buzz word<div dir="ltr" style="text-align: left;" trbidi="on">
There is a flood of automation tools in market in the past few years. "Automation" has become a buzz word. Every manager wants his team to find automated solutions to speed up the testing efforts.<br />
<br />
From a tester's perspective, what does it mean?<br />
<br />
1. Opportunity to explore and learn new tools<br />
2. Learn a new scripting language that can give new insight to a tester<br />
3. Break routine patterns as a tester. Eg; thinking beyond black box<br />
4. Chance to think from a development perspective<br />
<br />
From a management perspective, what does it mean?<br />
<br />
1. How much do we save with automation<br />
2. Can we automate everything?<br />
3. Can we move testers to other projects, because automation will free up their time<br />
4. There is a new automation tool in market, can we do a quick POC and implement?<br />
<br />
There are lot of expectations that cannot be fulfilled because the perception is "Automation can solve all problems on click of a button"<br />
<br />
This cannot be true, because automation is similar to development effort and can be complex if you plan to automate big projects. <br />
<br />
Few questions to ask before thinking of automation:<br />
<br />
1. What are the testing requirements?<br />
2. What tools are available that suit the testing requirements?<br />
3. Is the product stable enough to start automation?<br />
4. How much do we want to automate?<br />
5. Does the tool support automation for the application under test(AUT) or do we need testability in the AUT ?<br />
6. Are the testers skilled enough to do automation?<br />
7. If testers don't have automation skills, is company ready to groom them or hire people with skills?<br />
8. What value does automation add? <br />
9. What are the expectations/timelines for automation efforts?<br />
10. How mature is the automation tool?<br />
11. What community support does it have?<br />
12. Is the tool open-source or commercial? <br />
<br />
Automation is not bad, It can be a powerful tool in a testers toolkit, if used effectively. Over use and hype of "Automation" will not solve problems. Thinking and Implementing smart automation solutions is the need.<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-46443573534765041552011-11-16T01:52:00.000-08:002011-11-16T01:52:50.984-08:00Convert a string to a list<div dir="ltr" style="text-align: left;" trbidi="on">Ruby is one of my favourite languages. Its because of its ease of use. I always had a problem of converting a long string as a list to put in excel. Before I knew any scripting I used to do it manually by copy pasting each word of string in excel. This was not so frequent, so I did not pay much attention but this situation gave me some motivation. I thought of finiding a solution using ruby. Its damn easy and a permanent solution. you can do it only with very few lines of code<br />
<br />
<pre class="brush: ruby" name="code">fruits = "apple,mango,pear,water melon,guava,black and blue (berries)"
list = [fruits]
list.each do|ps|
a = ps.split(/,/)
puts a
end</pre><br />
Output is:<br />
apple<br />
mango<br />
pear<br />
water melon<br />
guava<br />
black and blue (berries)<br />
<br />
Now I can easily put it in an excel<br />
<br />
Explanation:<br />
<br />
I am storing the string in a string variable, then passing it to an array list. Then I iterate over the array and split when there is a ',' and then store each element in variable 'a' and print it on screen.<br />
<br />
I know this can be done in many other ways, I would love to see that. feel free if you have more better solutions. My intention here is to solve my problem and get some hands on with ruby.</div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-1385269701435709792011-11-15T02:44:00.000-08:002011-11-15T02:44:03.434-08:00Good bug report<div dir="ltr" style="text-align: left;" trbidi="on">This post was born as a result of message from a colleague tester who is new to this field of testing.<br />
<br />
<em>[12:51:41 PM] xyz: i was playing and there was hang problem<br />
[12:51:58 PM] xyz: and all of a sudden i got that msg and i was out</em><br />
<br />
My first reaction was not good, but later I realized even I have done these things when I was a novice. So, I planned to help tester in a simple way<br />
<br />
What is a good bug report? what is its main purpose?<br />
A good bug report consists of all relevant information for a developer about the bug<br />
Main pupose is to help developer reproduce and fix it<br />
<br />
What is all relevant information?<br />
Short summary of the defect that clearly describes the defect<br />
Environment details<br />
Is it reproducible? if yes steps to reproduce<br />
Actual result vs expected result<br />
Any screenshots or videos of the defect attached?<br />
Any specific build no<br />
Which area this bug belongs to in the software/application you are testing?<br />
Test data used<br />
What is the severity, means how much damage it does?<br />
<br />
Who is the audience of bug reports?<br />
Mostly developers, but there can be testers & managers who might be interested<br />
<br />
If you feel I have missed any point or you can add to it from your experience feel free to do that</div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-62709592254745766992011-11-14T11:17:00.000-08:002011-11-14T11:17:08.710-08:00He is not technical?<div dir="ltr" style="text-align: left;" trbidi="on">Scene: In a scrum a developer was explaining an issue to a tester, manager interrupts & tells, please explain him functionally, "he is not a technical person".<br />
<br />
what does this mean "He is not technical ?", I keep wondering<br />
<br />
should the tester get offended? or appreciate manager for protecting him?<br />
<br />
I feel testers need to be both functional and technical to do justice for their role. Its a myth that a tester need not be technical or he commits a crime if he is inclined towards the technical aspects of software. Infact it is an important skill.<br />
</div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0tag:blogger.com,1999:blog-6916423758332303345.post-73078214384424392302011-09-02T02:25:00.000-07:002011-09-02T02:25:47.797-07:00Back after a long time<div dir="ltr" style="text-align: left;" trbidi="on"><div closure_uid_gnig0y="123">I realized that blogging is not a easy job. I appreciate people who blog regularly because it needs discipline, time management and proper organization of ideas. I take some inspiration from them and get things moving in my blog. It been a long gap since I updated my last post. There are many things I would like to update.</div><div closure_uid_gnig0y="123"><br />
</div><div closure_uid_gnig0y="123">I still have my goal this year to improve my writing and blogging skills. I have been trying to push myself to do many things recently but not so encouraging results. </div><div closure_uid_gnig0y="123"><br />
</div><div closure_uid_gnig0y="123">Thats all for now</div><div closure_uid_gnig0y="123"><br />
</div><div closure_uid_gnig0y="123">adios</div><div closure_uid_gnig0y="124"><br />
</div><div closure_uid_gnig0y="122"><br />
</div></div>Shivhttp://www.blogger.com/profile/14801002833819622941noreply@blogger.com0