From QA to Development

I’ve awakened the blog from its almost year-long slumber.

I’m moving from QA/Testing to Development, and I’d be lying if I said I wasn’t nervous. I haven’t had much luck finding other women with a similar experience (if you have, or know someone that has, contact me!) so I thought I’d share at least part of my journey.

I’m most concerned that I’m going to fail – that I’ll never “get it”, that my employer will find me worthless, that I’m destined to be on the QA side of software forever. Deep down, I know these feelings are irrational and I am trying to push them aside for the moment as they are not constructive.

I figure that you can’t grow without at least a little bit of pain, so I’m anticipating that this process will be at least a little bit painful in terms of learning a new skill.  Painful, but worth it.

I’m looking forward to creating instead of verifying and validating. Looking forward to learning new things, to contributing to the open source community, to encouraging other women to make the same leap.

I’m almost done with my first application – a simple console app that parses a CSV. I just added error handling and logging today. I also attended a Javascript & jQuery class run by Girl Develop IT Pittsburgh, which inspired confidence in me that I would be able to successfully transition to development.

Here’s to nerves, to learning, and to a change.

 


Test Recorder in Visual Studio 2010

Yesterday, I took a training class on Web Application Performance and Scalability Testing. One of the most exciting things about the class is that it exposed a feature in Visual Studio 2010 that I didn’t know existed – load testing.  This feature is only available in the Ultimate edition of Visual Studio 2010.

In order to perform the load test, I recorded some Web Performance tests. I ran into a bit of an issue with Visual Studio’s built-in test recorder. I clicked the “Record” button and a new instance of Internet Explorer was launched. In Visual Studio, I saw a “Stop Recording” link which made me think that the recorder was working. However, when actions are recorded, they are listed under the webtest title, as seen in the image below.

Despite the appearance that the web recorder was working, I didn’t see any steps being logged, so I knew something was wrong. A little googling led me to a few frustrated posts on the Microsoft help forums. There were suggestions to delete registry keys, create new users on the computer, and even run the recorder in safe mode – all of which are last resort options in my opinion. Most of the posts were from a couple years ago – people using older versions of  Windows,Visual Studio, and IE8. A single post, all the way at the bottom of a thread, led me to what would solve my problem.

I clicked Tools->Manage Add-ons in IE. I then scrolled through the list and found the “Microsoft Web Test Recorded 10.0 Helper”. It was disabled by default. By enabling the add-on, the test recorder finally worked as it should.

 

 

Why Microsoft would disable by default its own add-on in its own browser is another question for another day.

 


Selenium: What I’ve Learned So Far

I’ve been experimenting with Selenium off and on for the past month or so. I thought I’d share some of the things I’ve gleaned from my experience so far.

1. Selenium can only be used to test things that render in a web browser. People are surprised by this, initially assuming that Selenium can be used to automate almost the testing of almost any software. However, think of this “limitation” as a benefit. Instead of being mediocre at testing all types of software, it is excellent for browser-based testing. As time goes on, more and more software is web-based.

2. The Selenium IDE is easy to use, but is limiting. I started out using the IDE but within a day I found myself wanting to use functionality that was only available by writing code. This is made possible by using the Webdriver API. The IDE was a good way to get my feet wet with Selenium basics, but there is so much more that can be done than what the IDE allows. So far I’ve set up a SQL data source and a method that waits for element X to load on the page or waits 10 seconds, whichever comes first, before performing a test. This method solved the “ElementNotFound” exception issues I had at first.

As with many things, learning the code is more daunting than using the GUI, but it’s easier in the long run to know how things work ‘under the hood’. The pain of the initial learning curve is more than made up for by the addition of features and the increased flexibility. Also, I’m happy that I’m getting to brush up on some C# as I work towards my goal of re-visiting programming.

3. Selenium is great for cross-browser testing. I’ve had success in testing in Chrome, Firefox, and Internet Explorer. You can even run the same tests in all three browsers at the same time. There is also support for Opera and HtmlUnit, which I haven’t tried yet. I was happy to discover that Webdriver also supports AndriodDriver and iPhoneDriver for mobile testing – something I hope to do in the future.

4. Most of the Selenium examples I’ve found are in Java. C# examples seem to be few and far between, but I’ve had some luck. Thankfully, the lack of C# examples is starting to matter less and less as I learn to translate Java into C#.

5. Selenium is very well documented. If it wasn’t for this, I probably would have given up long ago. But with a quick search, I can usually find the exact answer I’m looking for. I’ve found both the Google Project Wiki  and the SeleniumHQ Docs invaluable. I’ve also seen a lot of informative examples on various test automation blogs. I’m trying to ‘pay it forward’ by posting here – hopefully someone out there finds my posts valuable as well!

6. There are lots of front-end option for running Selenium tests. The one I’ve seen suggested most often is NUnit. So far I’ve just been running my tests straight from Visual Studio.

There’s still so much to learn and I’ve just scratched the tip of the iceberg within the past month. I will continue using Selenium & WebDriver to automate parts of my testing (not everything I’m testing is browser based). I’ll let you know what other interesting things I find!

 

 


Using the Selenium IDE for Data-Driven Testing: XML

I just started looking into Selenium as a way to automate some of my testing two days ago. Thanks to others posting about similar things, I’ve managed to create a data-driven web test using an XML file as the data source.  Here’s how I did it:

1. Download flowcontrol, includeCommand4IDE, and datadriven extensions

2. Install the extensions in the Selenium IDE in the same order as listed above. Re-start the IDE after you specify all of the extensions.

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Create an XML file. Here’s a small portion of mine:

<testdata>
<test nameText=”HELLO!!!!!&amp;&lt;&gt;&quot;&#39;” addressText=”This is my address”/>
<test nameText=”Name” addressText=”Address Test Test”/>
</testdata>

XML does have limitations with special characters, so I had to change “&” to “&amp;”, “<” to “&lt;” etc. – see “Special Characters and XML Strings”

4. Create a test case in the IDE. The first command must load the test data. I had to play around with the “while” portion of my test case to ensure that the loop was functioning properly. Here’s some useful documentation from the OpenQA Wiki on the structure of the test case. This is my test case, which edits Account Name and Address in my web application. It then saves the changes, logs out, logs back in, and ensures that the name displayed on the home screen is the name that was just saved. It’s just a simple test, I plan to add a lot more to it.

Edit_AccountInfo
loadTestData file:///C:\ASM\Automated Testing\TestData.xml
open http://localhost:90
type id=username test@test.com
type id=password password
clickAndWait id=loginButton
clickAndWait link=Account Info
click link=Edit
while !testdata.EOF()
nextTestData
type name=name ${nameText}
type name=address-line-1 ${addressText}
click //button[@type=’submit’]
clickAndWait link=Logout
type id=username test@test.com
type id=password password
clickAndWait id=loginButton
verifyTextPresent ${nameText}
clickAndWait link=Account Info
click link=Edit
endWhile

And that’s it! At first, I kept getting errors in the IDE about the datadriven extension, but when I traced the code, I discovered that the real problem was with my XML file. Your XML file cannot have ANY errors in it (no matter how small) or else the test won’t work. If you get an error, check your XML file first!

Although I am happy to be able to easily create data driven tests, I’m already seeing the limitations of using XML as input. I’ve made it my goal for today to figure out how to use a SQL data source. Look for that as my next blog post!


Shoulda, coulda, woulda: Computer Programming

I can count my college regrets on one finger. That’s a pretty bold statement, but after thinking about it, one regret is all I could come up with. However, this regret is haunting me to this day, and will continue to until I do something about it!

What is it? Not focusing on computer programming.

At the time, I wanted to stay as far away from programming as possible – granted, it was impossible to avoid entirely due to the class requirements of my major, IST. I had to take Java and C++ (if memory serves me right) as well as a SQL class and a discrete mathematics class (helped with the logic behind programming). SQL isn’t difficult, and I work with it every day now. It’s a necessary skill to have in the software world, but let’s face it, it’s not quite the same as actual programming. In college, I just tried to make it through my programming classes. Looking back on it, I should have tried to accomplish more than I did, especially focusing on doing things myself and not relying on group work or office hours to get me through. I think I could have learned a lot more if I had just pushed myself.

IST offered an option for those with interests in programming, but I chose the integration and application option so that I didn’t have to take any more programming classes. Mistake!  In college, I thought that I would never want to be a programmer and that I’d likely never need programming skills. Yeah, right. But hindsight is always 50/50 and all I can do now is work on diversifying the skills I do have.

I’d like to develop programming skills for a few reasons. First, it will be fun to be on the “creating” end of things instead of on the “testing” end. As much as I enjoy what I do,  possessing programming skills can only make me better at it. It works the other way, too: after years spent on the testing side, I will know certain things to avoid or aspects to include in the software I write. Secondly, it will diversify my skill set. I will not only be able to test software, but also create it, and having both of these skills makes me more valuable than someone who just has one or the other. Thirdly, programming is vital if I am going to be involved in creating test automation, which is something I hope to do very soon.

I think the easiest way for me to stay excited about learning this new skill will be to build an idea I have for a start-up web application. This way I will have something of value I am working towards, rather than just doing empty exercises out of a book. I feel fortunate to be surrounded by smart people who already know how to program – I have plenty of co-workers, friends, and family who are willing to help me learn.  Even though I have some programming experience from college and from my first job, I think I need to start over. Here goes nothing.

public class HelloWorld {
 public static void main (String[] args) {
  System.out.println("Hello, World");
 }
}

 


Technology Entrepreneurship Course: Bad Business Ideas

Earlier this year, I signed up for a (free) online Technology Entrepreneurship class with Stanford University. This week, we got our teams and our first assignment. Our team has 10 people and will later be split into 2 smaller groups. I am really excited to work with people who have similar interests! Part of our first assignment is to come up with the 5 best and 5 worst business ideas. Sounds simple enough, but the challenge comes in getting 10 people to contribute and come to a conclusion. Although communicating online is easy, there are challenges that come along with more than 2 people communicating back and forth. So far, we have been using Google docs, Google+ (as Skype can’t handle 10 people at a time), and E-mail. I have a feeling we will be seeking out other means of communication in the future, as even the 3 means we’ve tried so far have been lacking in some areas. I’ve heard good things about Campfire so maybe we can try that.

Anyway…I’m rambling about something that I didn’t intend to write about. What I wanted to write about was a surprising challenge in our first activity: coming up with a bad business idea. I find myself thinking of bad business ideas, but each idea I come up with can be good for someone – it just depends on his/her circumstances! Maybe this is the lesson of the activity? Hmm…

For example, I started to think about a product that a certain group would never want. I came up with the business idea of diet bars that are high in calories (make you gain weight). Who would want those? That business would certainly flop! Actually, wait. Marathoners may be interested. Or people who can’t afford food and need lots of  cheap calories. So I guess it’s not such a bad business idea after all. How about a software program that completely ruins your hard drive? No one would want that…except maybe someone who wants to destroy all evidence on their computer or someone who wants to ruin someone else’s computer for whatever reason. Darn. Guess that one could succeed too..

So, what sounds like a simple exercise actually isn’t. It’s actually easier for me to think of a good business idea than a bad one. What is desirable just depends on the lens that the buyer is looking through. Not too bad for the first few days of class.


I Love Evernote

I found out about Evernote in a rather organic way, long before the hype developed. It’s a good thing I did, too, because I tend to shy away from the “latest and greatest” thing that everyone is crazed about. So if I didn’t find out about Evernote when I did, I would have probably never given it a chance. I saw Rick, my friend from Penn State, tweeting about it awhile back. I have a lot of respect for Rick, so I figured that if it had his stamp of approval, I’d probably find it useful too.

Evernote has subtly worked its way into my life. I love that I can use it on my Macbook (home), PC (work), and Android phone. It syncs automatically so I never worry that any of my devices are out of sync with each other at any given time. I think the thing I like the most about Evernote is that I never even have to think about it, except when I am singing it’s praises, of course. It’s just that simple.

With Evernote, my thoughts are captured more completely. I used to record a lot of my thoughts (read: business ideas) in a little Moleskine notebook, but the notebook is now stuffed in a drawer somewhere. I found it difficult to remember to keep the notebook with me when I was constantly switching purses, and not only did I need to keep track of the notebook, but a pen as well! The horror. While I wasn’t usually inclined to write more than a word or two in my notebook, I find myself being a bit more generous with my words when I use Evernote – only because typing is much more efficient than writing. It has also replaced Google Tasks, which I used to use to remind myself of things.

Evernote has simplified my life, turning what was once a very manual process into a streamlined process that integrates with an action that I’m already doing anyway – using a piece of technology and inputting data. And one of the best things about Evernote? When life gives you too many notebooks, there’s always the search function! (Fellow users will know what I mean 🙂 )

 


Creating a Team Mission Statement

I am currently reading “The 7 Habits of Highly Effective People“. The electronic version was 99 cents on Amazon a couple weeks ago so I started reading it on my computer. I was really enjoying the book but can’t stand to stare at my computer monitor to read things for extended periods of time – I don’t mind working on the computer, but sustained periods of reading on a computer screen bothers my eyes. Anyway, I did what any loyal Amazon fan would do. I went out and bought a Kindle. Good job, Amazon, your marketing tactic worked.

One of the (many) principles of  “The 7 Habits of Highly Effective People” is that you should spend your time doing things that align with your core values. These values can be summed up in a mission statement, which is to be used as a guide for all that you do. Creating a personal mission statement is no easy feat, the author suggests that it can require days, if not weeks or months, of a person’s time. Also, it is constantly evolving and must be tweaked depending on life circumstances. l will admit that I have not yet created a personal mission statement.

I got to thinking how interesting it would be if teams in the workplace had to come up with and agree on a mission statement. It really forces you to think about WHY you do what you do on a daily basis, and how that fits into the bigger picture. It would also be a great teambuilding exercise. I think I’d enjoy participating in a session to make a team mission statement. I’d also be very interested to read other teams’ mission statements. It’s easy to wonder why people do what they do, or even what they do. The mission statement provides clarity not only on roles, but more importantly, goals.

Not an easy exercise, but a worthwhile one.