Testing views in express js - testing

I'm trying to figure out an ideal way to test my views, written in Jade. They contain some logic. For example on the home page if a cookie has been set it should show a button to link to the main console and have option to logout versus if no cookie is set it should show login.
Any advice is appreciated.

Have a look at selenium
http://seleniumhq.org/
And of course the node adapter
https://github.com/LearnBoost/soda

I think that are not hard bugs to debug(You should see that in the browser window if it happens). But if you really want to I think you have following options:
Write the tests the way TJ did looking at his tests. He has written tests for almost everything.
Doing headless testing use for example tobi or zombie.js. There is also phantom.js, but this product is not developed in node.js.
selenium(not developed in node.js) with soda like deltanovember pointed out.
You could use js-test-driver to test all your browsers(client-side javascript). You could also use YETI(using YUI test framework) to test all your code in all the browsers.

Related

How to simulate 20 users click a button at the same time in Web GUI Test Automation

Now I hava a requirement about Web GUI TA
I want to simulate some users(20-30) click a button at the same time and evaluate the performance of Web GUI at that time.
I use RobotFrameWork + Selenium library to do the Web Gui TA before, but as far as I know. selenium library only can handle one broswer at one time, so i dont know how to do now.
Can you give me some advice? need use another library or framework?
Like mentioned by other, what you want to do in this case is not UI testing but rather stress/load testing. You should be able to try easily Gatling. First you record the http request associated with the click on your button. Then, you write a simple scenario that launches this request 20 times at once. Something like:
setUp(scn.inject(atOnce(20 users)))
.protocols(httpConf)
Selenium has a "grid" option you can use to configure many instances running many browsers.
http://www.seleniumhq.org/projects/grid/
http://www.seleniumhq.org/docs/07_selenium_grid.jsp
Grid allows you to :
scale by distributing tests on several machines ( parallel execution )
manage multiple environments from a central point, making it easy to
run the tests against a vast combination of browsers / OS. minimize
the maintenance time for the grid by allowing you to implement custom
hooks to leverage virtual infrastructure for instance.
In short, you create a "hub" that manages things, then each "node" can perform tests as required by the hub.
Consider, however, this may not be the best route to go down. Something like multi-mechanize might be more useful: http://testutils.org/multi-mechanize/
That will allow you to have many users "clicking" the button, but not via a browser but via direct HTTP calls. That might be more suitable for multi user simultaneous "headless" load testing, which is what I think you are attempting to do.
I'm slightly confused at this question:
Are you wanting to test the GUI? If it's something like "This button makes a dropdown menu appear", then it doesn't matter how many users do it at the same time, it'll either always work, or never work.
Are you wanting to test the server under load? If so, then Selenium will work, but there are better tools. I have used JMeter with success, but there is a really good listing of all of them here: http://performance-testing.org/
Finally, are you wanting to press 20 different buttons on the same page on the same browser at the same time? If so, this isn't possible with selenium, and it isn't a standard use case either.

Playframework selenium autotest debugging

I am developing a play 1 application and testing it with the selenium. In several cases, play auto-test fails when normal testing within a browser (play test) succeeds. This can be due to different behaviour of js/ajax, or development mistakes on my side.
Is there a way to get some more feedback regarding what's going on in the headless browser? For example, assertTitle does give some feedback, as in the test-results HTML the title found is displayed.
Are there ways to get a the whole response at a given point, or any other usable feedback to debug the application and the test cases?
It would be better if you could give some more details about what all things are failing in your tests, give some code examples which u are writing.
Even i had faced lot of issues in running selenium tests in play auto-test, u can refer this link for our issuesPlay Auto-tests issues
The best way to debug the selenium tests is to use echo and see what are the results it is returning.

Testing progressively enhanced features with Capybara

I'm using Capybara to test features on a progressively enhanced website. Let's say my feature is to navigate around a hierarchy of locations. The non-javascript version involves getting a new version of the page when we click around on different locations. The enhanced javascript version opens up hidden elements, or loads up new information via Ajax.
I start by writing a test for the non javascript version, which looks something like this:
When I visit the page for "UK"
And I click "London"
Then I should see the information for "London"
Using the default mechanize driver, the test fails, I develop the feature, then the test passes.
I then create an identical test for the javascript version, flagged up with #javascript. It runs the test with the javascript driver, and that test passes because the feature has been implemented. (It's running through the non-js flow). However, I want the javascript version of the test to fail at this point because the feature has not yet been enhanced with Javascript.
So I'm looking for a good strategy for determining whether or not a whole new page has come from the server, and making sure both versions of the feature work. (I plan on integrating this with pushState so testing for a changed URL won't do)
I'm interested to hear other peoples opinions on this - I'm not convinced Cucumber is the right tool for the job, since you're describing features from the perspective of user interaction, and it sounds like your implementation of progressive enhancement will result in essentially the same user interaction.
That aside, I think you may want to consider building in some kind of testing hook to the page itself to help with this. Hard to say what without knowing your exact situation, but maybe one of:
The script-enhanced version of the page could add some element to the DOM, indicating that the enhancements are active, or indicating that the data came from an AJAX request rather than page load.
You could generate a random page identifier (from the server) on every load (e.g. new GUID), embed this into the DOM and assert that it hasn't changed after the interaction (on the enhanced version). This would be a very simple way of achieving your stated goal ("determining whether or not a whole new page has come from the server")
Why does your javascript "enhanced" version work the same as your non-enhanced? Your cucumber tests using #javascript should be testing to ensure the enhancements work.
For instance,
* if the javascript opens a modal dialog instead of following a link to a new page, test for that.
* if the javascript submits a form and updates a value, test for that.
These tests would fail if run without javascript support.

What's the simplest/easier way to do a health check/smoke test in an internal web app?

I have an intranet web application and I would like to do a simple health check/smoke that runs once an hour to make sure that everything is how it is supposed to be.
The tests are supposed to do some requests and check response for text and in some cases do one or two POSTs to see if the application in answering like it should.
I thought about using Selenium or Visual Studio's WebTest and schedule the run via CC.NET or another CI application but seems like a big shot for a simple thing.
Any ideas?
Thanks
Selenium is a good option. So is PhantomJS.
I dare to say that SWAT could be a good choice for you. It does exactly what you say - makes various http calls and check data returned, also it is possible to pass the test results to different report systems, using TAP format which swat is compliance with. And finally there is a simple DSL to write such a checks.
Regards, the author.

Software Automation tool

At my company, we have to fill out a daily timecard, and I want to automate it.
I want to use some sort of tool that will allow me to write something like this:
Launch Firefox
go to www.example.com/timecard
Wait for page load complete
In UserName box: put username
In Password box: put password
Press enter
Wait for page load complete
if login failed
email me#example.com that unable to automatically do timecard, please check password
return;
Get today's date
if today is Saturday or Sunday
close firefox
return;
find the timecard column that matches today's date
find the row with the right charge number
put in 8.0 hours
click "Save" link
close firefox
return;
It would be really nice if the software solution will also execute itself daily at a given time.
Since you are asking about UI automation you might want to check out AutoHotKey.
It's a macro language and you can compile the code into executable binaries (.exe).
However, sending web request could be done better without a browser by sending the necessary HTTP requests. Such an approach is more light-weight, more flexible and probably easier to maintain as well.
Check out the Chickenfoot extension for Firefox. I believe it may help you a long the way.
Chickenfoot is a Firefox extension that puts a programming environment in the browser's sidebar so you can write scripts to manipulate web pages and automate web browsing.
It also provides a basic record feature, and you can then fine-tune the interactiosn with the web page(s).
If all you need to automatize is related to browsers, then you may try out Selenium Remote Control which provides libraries in different languages.
For browser automation, there are a couple more experimental libraries in javascript (you should search for web app testing tools as these are imo your best bet for now)
./alex
For decision making, you might have to write some code.
iMacros for firefox has the ability to record/playback.
I have not used it myself but I have heard good things about Selenium. This is a Web UI testing tool that can be scripted in a number of different languages.
I would try to accomplish this with twill.
If by "some sort of tool" do you mean something like a programming language or environment that will allow you to automate what FireFox does? If so, I recommend learning how to write a FireFox extension. Extensions are written in Javascript. See https://developer.mozilla.org/en/Extensions
--
bmb
You could use selenium or watin on a simple .net console program. Then configure a task on window to call it at a given time of day.
If you are using Linux you could easily do this with a bash script of some kind. Have a look at the CURL library.http://curl.haxx.se/. You could then schedule the script to run with cron.
This is why I love Linux, the above is simple to do. I windows I suppose you could use the windows shell. I think the curl library runs on windows.
Selenium (www.openqa.org) tools will work for you. Install the Selenium IDE and record the macro. The "code" is simple JavaScript/HTML.
Selenium RC provides a very strong solution for automated testing from a variety of languages and tools.