Behavior, Content, Money – 3 Things you should never give away for free!!!

BCmoney MobileTV

SeleniumIDE “.side” JSON parser for “Durable Selectors”, more maintainable Test Automation

Posted by bcmoney on April 27, 2019 in Automated Testing, DevOps with No Comments

No Gravatar

Selenium is the leading open source Test Automation framework. Its WebDriver specification is in the process of being adopted by all the major browser vendors, with most having fairly complete support at this point. WebDriver is the spec document, language-specific SDK bindings, and associated browser-specific driver implementations that enable you to remotely control a browser in an automated manner. This uses a “selector” in the form of:

  • id – attribute “id” of the element
  • name – attribute “name” of the element
  • css selector – full CSS syntax querySelector like “div#search.find”
  • css path – dotted class names like “.my > .thing > .stuff”
  • xpath – xml path based retrieval like “//html/body/div”
  • linktext – “a” anchor tag text values

Choosing a selector for each “Test Step” in a given “Test Case” enables you to fire “commands” at your browser. Using this recipe we can create and run (record & playback) Selenium tests which automate the repetitive mind-numbing testing steps that a Tester would traditionally carry out manually, such as clicking around within a web application, mobile application or website; entering some data, submitting forms, clicking through E-Commerce flows to make purchases, interacting with specific on-screen elements, etc… all to simulate user behavior with your web/mobile application or website in the “real-world”. This frees up QA Testers for more intellectual work such as Performance Testing to help provide suggestions to speed up the app and support more users, Exploratory Testing “fuzz/negative tests” to try to break the system and find its boundaries by using intentionally wrong inputs, Security/Penetration Testing to identify vulnerabilities, Accessibility Tests to improve support for those with disabilities and regulatory compliance, Usability Tests to improve the UI to help end-users, A/B Tests with Marketing team to improve conversions, etc..

There’s just one catch, creating Selenium tests (and test automation in general) can be seen as a significant investment for most companies, one that certainly not all businesses will agree is worth the upfront cost (or that they’ll even fully understand the value of for that matter). This is a problem in today’s fast-moving marketplaces where if you don’t innovate and move with the speed of the market, you stand a real chance at becoming irrelevant and passed up for more “customer-centered” up and coming competitors. Even large enterprises who once enjoyed long lifetimes as monopolies, oligopolies, or simply “difficult to challenge incumbents” are increasingly seeing competition from all corners. Development teams in all companies are being asked to do more with less, and to keep pace; but how can we possibly move quickly and maintain quality, when all of our testing is manual and acts as a gatekeeper or bottleneck to releases getting out the door? This is what the DevOps series on this blog is meant to address.

What if we had a tool for recording and “playing back” a set of manual steps we’ve carried our one time? Could it be possible to “seed” our test automation this way? In fact, yes this is one possible way, and when it comes to Selenium, then SeleniumIDE for the longest time was the answer. Selenium IDE was historically considered as somewhat of the “black sheep” of the Test Automation industry. You wouldn’t kick it out of your Automated Testing flock (toolkit) completely, it still has useful wool to provide, but you might not be able to sell it as easily to a Dev, Ops or QA team as the “best” long-term solution for their test automation efforts. This became especially true recently as Mozilla’s FireFox team, announced they were deprecating their legacy NSAPI/XUL plugin frameworks in favor of the more standardized and modern W3C’s WebExtensions specification. FireFox being originally the only browser that SeleniumIDE 1.x-2.x was built to work on, this effectively set a ticking clock on the lifetime of SeleniumIDE’s usefulness, and as promised, immediately as FireFox 55 was released, QA engineers relying on SeleniumIDE recorded tests confirmed the death of the legacy test automation tool.

All seemed lost for “record & playback” test automation in Selenium, until Visual Test Automation company Applitools got behind an open source project aimed at a revival of SeleniumIDE. There’s pretty clear benefits to them in having an easy-to-use browser-based automation recording too:

  • it lowers the barrier to Test Automation for most Dev, Ops & QA teams out there (not all of which or all members of which will have coding skills to write a bunch of Selenium scripts by hand)
  • it helps companies seed/bootstrap a suite of Automated Tests where they may be in the unfortunate situation of having absolutely none to start out with
  • it puts Applitools on the map in Developer & QA engineer mindshare by contributing a worthwhile project to the open source community
  • folks who previously didn’t know anything about their company now are more likely to hear about them and at least give them a try
  • it enables companies to quickly get up and running with some recorded Selenium tests, then integrate those tests to Applitools’ visual testing (although of course there’s no requirement to do so, you can just go ahead with basic Test Automation and skip the visual stuff or even roll your own basic visual DIFF tool, a possible topic for a future article)

Whatever their main motivations, their efforts are certainly applauded by myself and many others in the open source & Test Automation communities. Documentation for SeleniumIDE in terms of the commands available can be found here:

You can download the following flavours of SeleniumIDE:

Installation is easy, but in case you need a walkthrough with screenshots this will take you through the main steps:

So that’s pretty much all the context you’ll need for why “Record & Playback” has value but if you’re still not convinced, listen to the following podcast and webinars:

Read the rest of this entry »

How to check CRC and Hashes on file/code downloads

Posted by bcmoney on July 13, 2018 in Uncategorized with No Comments

No Gravatar

Agile adoption roadblocks in Enterprise – is the opposite of Continuous Improvement really Intermittent Deterioration?

Posted by bcmoney on June 13, 2018 in E-Business, E-Government with No Comments

No Gravatar

“The question isn’t who is going to let me; it’s who is going to stop me.” ~Ayn Rand

Everybody seems to want to “do Agile” these days, but few understand what that entails. Likewise, they don’t seem to realize that you can’t just “do Agile” but you can either “be Agile” or be what you’ve always been (or something else).

English: Extract from Raspberry Pi board at Tr...

English: Extract from Raspberry Pi board at TransferSummit 2011 (Photo credit: Wikipedia)

Today, I’d like to expand on some thoughts I shared on Mike Cohn’s “Mountain Goat Software” blog on Agile:

For the most part, those comments are simply summarizing some of my frustrations trying to push Agile adoption within an Enterprise company setup for very traditional Waterfall projects and Software Delivery LifeCycle (SDLC).

It’s a problem many Dev teams face.

Publishing an App to the Cloud – AWS .vs. AppEngine .vs. Azure .vs. Heroku .vs. OpenShift .vs. OpenStack

Posted by bcmoney on May 30, 2018 in Cloud Computing with No Comments

No Gravatar

Public Cloud

Also known as a shared cloud, such Public Cloud services are provided “as-a-service” over the Internet, with little or no control over the underlying technology infrastructure. This cloud setup is appealing to many decision-makers as it reduces complexity (server sprawl within each company/department/location) and also reduces long lead times in testing, deploying and distributing new products. It is generally cheaper than traditional IT infrastructure in terms of moving the costs/risks of equipment ownership to the Public Cloud company, and the commoditization of such infrastructure makes managing the day-to-day operations of applications more efficient as well.

Private Cloud

Also called an “internal cloud” or “enterprise cloud”, the Private Cloud can offer activities and functions “as-a-service” but is deployed within a company intranet or internally hosted & managed datacenter, offsite. This cloud setup is packaged as a private product for a company or organization to implement on their own resources, and offers advanced security and high availability or fault-tolerant solutions not typically possible in a Public Cloud setup. In this scenario, the Private Cloud owner shares few, if any, resources with other organizations. Hence, multi-tenancy is not an issue. Little or no control is usually permitted over the underlying technology infrastructure. This cloud is appealing to many decision-makers as it reduces complexity and long lead times in testing and deploying new products. It is generally cheaper, too.

Open Cloud

Open Cloud Computing services are defined as those which allow full not only read/write access to their paying users but also the ability to download the entire environment, as well as to customize which software and platforms are installed in the environment. In addition, the full source code for the Cloud platform is made available so that more advanced users could potentially run their own instances on their own commodity servers/hardware.

Closed Cloud

Closed Cloud Computing services are defined as those which allow only partial (or possibly full) read/write access to their paying users but differ drastically from Open Clouds in that they do not provide the capability to download the entire environment, and the options for customizzation are limited to preset options for which software and platforms are installed in the environment (in particular, that company’s own technology would likely feature prominently; as in the case of Windows Azure which only runs Microsoft technologies such as C# and on a Windows Server and/or IIS, or, Oracle MyCloud which runs only Java-based technologies on Solaris and/or Glassfish). In addition, the source code for the Cloud platform itself is not available thus customers typically do not have the option of running an instance of the cloud platform on their own commodity servers/hardware.

Hybrid Cloud

The Hybrid Cloud is an integrated approach, combining the power of both public and private clouds. Customized rules and policies govern areas such as security and the underlying infrastructure. In this scenario, activities and tasks are allocated to internal or external clouds as required.


Summary of Cloud Offerings

  Open Closed Public Private Hybrid Data Cost AWS AppEngine Azure OpenShift OpenStack

Working with Apache Cordoba to make a cross-platform hybrid Mobile App

Posted by bcmoney on January 30, 2018 in AJAX, HTML, Mobile with No Comments

No Gravatar

Write once, run anywhere

English: A pile of mobile devices including sm...

A pile of mobile devices including smart phones, tablets, laptops and eBook readers. (Photo credit: Wikipedia)

Despite its best intentions, the motto of Java did not ring quite so true when it came to natively supporting the complex slew of Mobile devices such as Smart Phones, Tablets, E-Readers and Fitness Devices (wearables, smartwatches, etc) that began to emerge in the mid 2000’s through to today. Theoretically, yes, one could write a small basic Java project using only the most essential native Java library packages/APIs, which “should” then pretty much just run on any device upon which you were able to get root access and install a JVM (if one weren’t already installed), and then run your compiled code. On smaller less powerful devices like Mobile phones in the early days we could use various flavours of Java Micro Edition (or “JME”, then called “J2ME”, although rarely used it is still deployed in edge contexts, mostly just for IoT and embedded devices these days). The problem was we could not use the full suite of Java Swing or later JavaFX UI components, and had to learn a whole new set of UI programming techniques which was more similar to the “bad ol’ days” of Applets and raw GUI programming via the Abstract Windowing Toolkit (AWT). Inefficiently re-painting the complete GUI with each interaction programmatically, and commonly needing to get right down to X,Y,Z graphics programming, rather than deferring to UI libraries for rendering reusable components.

“Ok, I’m sold already” you say? Then jump to the Apache Cordova instructions! If not read on for the rest of the abbreviated/opinionated take on Mobile development history.

Read the rest of this entry »

BC$ = Behavior, Content, Money

The goal of the BC$ project is to raise awareness and make changes with respect to the three pillars of information freedom - Behavior (pursuit of interests and passions), Content (sharing/exchanging ideas in various formats), Money (fairness and accessibility) - bringing to light the fact that:

1. We regularly hand over our browser histories, search histories and daily online activities to companies that want our money, or, to benefit from our use of their services with lucrative ad deals or sales of personal information.

2. We create and/or consume interesting content on their services, but we aren't adequately rewarded for our creative efforts or loyalty.

3. We pay money to be connected online (and possibly also over mobile), yet we lose both time and money by allowing companies to market to us with unsolicited advertisements, irrelevant product offers and unfairly structured service pricing plans.

  • Archives