FitNesse is a wiki-based software testing tool that can be a powerful addition to your Continuous Integration Environments. Its greatest advantages include providing visibility into tests and results, and providing access to test-writing by non-technical team members. We will:
* look at specific examples and code,
* discuss the advantages and drawbacks of using FitNesse as a test framework
* implement, deploy, and use a simple fixture in a fitnesse test
* review different kinds of fixtures, including decision table, script, query, html, and selenium webtest fixtures
* discuss some of the more interesting fixture extensions we've implemented, including JSON-based verification and the ability to pass in javascript code for dynamic verification
* use Hudson/Jenkins to run your FitNesse tests as a step in your Continuous Integration/Deployment process
Principles and patterns for test driven developmentStephen Fuqua
Developed to help introduce key topics in Test Driven Development, for new and veteran developers alike. Some examples are language-specific (C# / MSTest / Moq), but the principles apply to any object oriented language.
A short presentation slide deck I gave to interns we have this summer of 2019 on (unit) testing in software development. This is not a code-centric slide deck and just looking at the slides loses some context without being there in person, or having discussions, etc.
Refactoring Legacy Web Forms for Test AutomationStephen Fuqua
THE CHALLENGE:
Given you understand the value of test automation.
Given you are handed a legacy application to maintain and enhance
Given the application is in ASP.Net Web Forms
When you try to add tests
Then you find that test-driven development is literally impossible.
Continuous Integration using Hudson and Fitnesse at Ingenuity Systems (Silico...Jen Wong
Continuous Integration using Hudson and Fitnesse
Speaker: Vasu Durgavarjhula , Jennifer Wong , Norman Boccone
Level: Intermediate | Room: 4221 | 11:15 AM Saturday
Learn about Continuous Integration (CI) and Continuous Deployment(CD) and how Ingenuity Systems moved from a traditional release process to a more agile frequent release model. In this talk we will discuss specifics and show demos on:
using Hudson as a framework for continuous integration, deployment, and build promotion
deployment and configuration management
changes we made to make our architecture more service-oriented
our automated test strategy using JUnit, FitNesse, and Selenium
migrating our build and deployment process from Ant to Maven
challenges to overcome and lessons learned in implementing a successful CI system
Principles and patterns for test driven developmentStephen Fuqua
Developed to help introduce key topics in Test Driven Development, for new and veteran developers alike. Some examples are language-specific (C# / MSTest / Moq), but the principles apply to any object oriented language.
A short presentation slide deck I gave to interns we have this summer of 2019 on (unit) testing in software development. This is not a code-centric slide deck and just looking at the slides loses some context without being there in person, or having discussions, etc.
Refactoring Legacy Web Forms for Test AutomationStephen Fuqua
THE CHALLENGE:
Given you understand the value of test automation.
Given you are handed a legacy application to maintain and enhance
Given the application is in ASP.Net Web Forms
When you try to add tests
Then you find that test-driven development is literally impossible.
Continuous Integration using Hudson and Fitnesse at Ingenuity Systems (Silico...Jen Wong
Continuous Integration using Hudson and Fitnesse
Speaker: Vasu Durgavarjhula , Jennifer Wong , Norman Boccone
Level: Intermediate | Room: 4221 | 11:15 AM Saturday
Learn about Continuous Integration (CI) and Continuous Deployment(CD) and how Ingenuity Systems moved from a traditional release process to a more agile frequent release model. In this talk we will discuss specifics and show demos on:
using Hudson as a framework for continuous integration, deployment, and build promotion
deployment and configuration management
changes we made to make our architecture more service-oriented
our automated test strategy using JUnit, FitNesse, and Selenium
migrating our build and deployment process from Ant to Maven
challenges to overcome and lessons learned in implementing a successful CI system
We propose and illustrate a complete test automation solution based on open source technologies, Fitnesse, Ruby and Watir. This system is web based, and enables a diverse set of project stakeholders to carry out automated testing from anywhere.
TestWorks Conf 2015 Beefing up FitNesse - Arjan MolenaarXebia Nederland BV
The mission of FitNesse has always been to provide a vehicle for programmers and non programmers to formally describe the behavior they desire from software systems. FitNesse has grown to a comprehensive authoring and execution platform for acceptance tests and functional specifications. During this talk there was a demonstration how FitNesse can be extended with test systems like JBehave and Cucumber, and the benefits of combining those tools. Additionally we’ll discuss several best practices in how to use FitNesse properly, using plugins and IDE support.
JavaLand: Quantified Social - Fitness-Geräte und -Portale mit AgoravaWerner Keil
Quantified Self ist die Messung, Protokollierung und in der Regel das Teilen von Gesundheits- und Fitnessdaten mit anderen über einen gewissen Zeitraum durch Verwendung von Sensoren - zur Förderung eines gesünderen Lebensstils, um fit zu bleiben oder Gewicht zu verlieren. Andere Anwendungsfälle sind Messung von Blutzuckerspiegel, Puls oder Herzfrequenz - die Grenzen zwischen Freizeit/Fitness und Gesundheitswesen sind hier oft fließend.
Diese Session bietet einen Überblick zu populären Fitness-Geräten, APIs, Fitness- und IoT-Portalen. Deren Anbindung durch Agorava, das Social Framework auf Basis von CDI, JAX-RS, JSON und OAuth. Dank paralleler Unterstützung mehrerer APIs ermöglicht Agorava nicht nur, Freunde bei Fitbit, Strava, Twitter oder Facebook über die Leistungen zu informieren, sondern auch etwa bei Foursquare auf der Strecke einzuchecken.
Methodologies for Test-Driven Development of OSGi enabled Embedded Devices - ...mfrancis
OSGi DevCon 2008
This tutorial introduces test-driven methodologies for developing OSGi-based [1] Java ME [2] applications. We present a solution using the Eclipse IDE and a modified version of the FitNesse testing framework [3]. FitNesse extends the Framework for Integrated Tests (FIT) [4] with a wiki interface.
One of the main challenges when developing embedded systems is the fact that development and execution take place on different platforms. Ideally, application code and corresponding automated tests are executed on the target execution platform. Common practice, however, is that automated tests are mostly performed on the development machine using simulators - tests on the target platform are often performed manually.
Another challenge in software development is customer acceptance. Developer understanding and customer expectation based on written requirement specifications often differ drastically. These misunderstandings can result in problems which are recognized fairly late in the development process, particularly when acceptance tests are performed with the final software version only.
Why not encourage the customer to express his requirements and expectations as acceptance tests in a human readable (while also executable) form ? If this method is adpoted, developers are able to implement the software which fulfills the defined requirement tests, and acceptance procedures become a verification process of the test execution. FitNesse closes this gap by providing a wiki with an easy to learn markup language to define acceptance tests and an extensible feature set to execute and verify these tests.
In this tutorial we present our modified version of FIT/FitNesse, called eFitNesse, a bundle that enables OSGi applications to be tested via the FitNesse wiki interface. eFitNesse enables OSGi applications that can either run on the development machine or on an embedded Java ME-enabled target device. eFitNesse can be seamlessly integrated into the already available Eclipse plug-in for FitNesse [5].
We discuss the extension of the FitNesse framework to enable
Java ME
Remote debugging
Execution on the target platform
Support for standard JUnit test cases to unify unit and acceptance testing within one framework and user interface
Extendible system analysis feature with standard queries for system
properties or OSGi bundle states
We will also show live demonstrations for how to express acceptance tests within eFitNesse and test them on embedded applications running on a Linux Gumstix device and a Windows Mobile smartphone.
FitNesse is an open-source automated framework for Integration, Acceptance Testing. It increases collaboration between developers, testers and customers. This presentation was presented at Knoldus Knolx session. We used Scala to write Fixtures and used simple example to explain it.
Test-Driven Development (TDD) and Behaviour-Driven Development (BDD) are powerful techniques, helping developers write better designed, more maintainable and more reliable code, and stay focused on the real user requirements. But how does the rest of the team fit in to the picture?
In this talk, we will look at how BDD techniques, and tools such as easyb, FitNesse, and other BDD-related tools can also act as drivers for the overall development process, and also as communication tools, giving testers and end-users clear and unambiguous feedback on what is being developed and where it is at in terms of delivery and schedule.
Introduction to JIRA & Agile Project ManagementDan Chuparkoff
Join me for a brief introduction to JIRA & Agile Project Management. I'll talk about basic Agile concepts. I'll show you basic JIRA planning and working with Scrum and Kanban. And I'll show you the most important reports to master so you can build great software just like Atlassian.
Developer testing 101: Become a Testing FanaticLB Denker
In this workshop we will cover the methodologies and three basic levels of testing, then we will deep dive into how to use PHPUnit to achieve developer testing. The tests may not be the prettiest, most robust, or efficient, but you should leave the course with the ability and confidence to write tests for your code.
Topics include: xUnit framework basics and workflows, test classification, asserts, data driven testing, and an introduction to mocking.
This is a beginner course, but seasoned veterans may discover features they never knew.
Leveling Up With Unit Testing - php[tek] 2023Mark Niebergall
Writing unit testing on a project can seem like a daunting task, and earning team and leadership buy-in can be challenging. Level up your skillset as we cover PHPUnit and Prophecy setup with composer, writing meaningful tests, restructuring existing classes with dependency injection to allow for unit testing, using mock objects, and releasing code confidently with test coverage. We will also discuss overcoming common biases, unit testing challenges, and shortcomings of unit testing.
Leveling Up With Unit Testing - LonghornPHP 2022Mark Niebergall
Writing unit testing on a project can seem like a daunting task, and earning team and leadership buy-in can be challenging. Level up your skillset as we cover PHPUnit and Prophecy setup with composer, writing meaningful tests, restructuring existing classes with dependency injection to allow for unit testing, using mock objects, and releasing code confidently with test coverage. We'll also discuss overcoming common biases, unit testing challenges, and shortcomings of unit testing.
Breaking Dependencies to Allow Unit TestingSteven Smith
Unit testing software can be difficult, especially when the software wasn't designed to be testable. Dependencies on infrastructure concerns and software we don't control are one of the biggest contributors to testing difficulty. In this session, you'll learn the difference between unit tests and other kinds of tests, how to recognize and invert dependencies, and how to unit test your code's interactions with these dependencies without testing the infrastructure itself.
Presented at FalafelCON 2014, San Francisco, September 2014
Breaking Dependencies To Allow Unit Testing - Steve Smith | FalafelCON 2014FalafelSoftware
Unit testing software can be difficult, especially when the software wasn't designed to be testable. Dependencies on infrastructure concerns and software we don't control are one of the biggest contributors to testing difficulty. In this session, you'll learn the difference between unit tests and other kinds of tests, how to recognize and invert dependencies, and how to unit test your code's interactions with these dependencies without testing the infrastructure itself.
Getting Started with Test-Driven Development at Midwest PHP 2021Scott Keck-Warren
In this presentation, we discussed what Test-Driven Development(TDD) is, how to get started with TDD, work through an example, and discuss how to get started in your application.
Have you ever finished writing unit tests and deploying to production, only to get errors or problems later down the line? If you want to learn how to minimize these kinds of data problems or failures before they occur, you need to program defensively. Join us to learn about Apex design patterns for resilient code, how to build applications that monitor themselves, and how to avoid common mistakes that even experienced developers make.
This workshop is a hands-on training where a real Zend Framework application is used as an example to start improving QA using tools to test, document and perform software metric calculations to indicate where the software can be improved. I also explain the reports produced by a CI system.
This presentation would help learn how to install, integrate, write automated test script with PHPUnit.Would also involve looking into different example and execute them.
Quality assurance and testing are very important in a life cycle of any application. Although, by far not all developers understand the significance of tests.
In this presentation, we cover the basic testing practices for developers. The following tools are discussed: JUnit, Mockito, Hamcrest, JsTestDriver, DBUnit, Arquillian, SoapUI, Selenium.
May: Automated Developer Testing: Achievements and ChallengesTriTAUG
Developer testing, a common step in software development, involves generating sufficient test inputs and checking the behavior of the program under test during the execution of the test inputs. Complicated logics inside a method make generating appropriate arguments difficult. In testing object-oriented programs, generating method sequences to put the receiver object or argument objects into appropriate states further complicates test-input generation. After the generated test inputs are executed, program crashes or uncaught exceptions can be used to indicate program problems, especially robustness problems. However, some program problems such as producing wrong program outputs do not crash the program.
In this talk, the speaker will present an overview of achievements and challenges in improving automation in developer testing, especially on test-input generation (i.e., generating sufficient test inputs) and test oracles (i.e., checking the behavior of the program under test).
About the speaker:
Tao Xie is an Associate Professor in the Department of Computer Science of the College of Engineering at North Carolina State University. He received his Ph.D. in Computer Science from the University of Washington in 2005. Before that, he received an M.S. in Computer Science from the University of Washington in 2002, an M.S. in Computer Science from Peking University in 2000, and a B.S. in Computer Science from Fudan University in 1997. He worked as a visiting researcher at Microsoft Research Redmond and Microsoft Research Asia.
His research interests are in software engineering, focusing on automated software testing and mining software engineering data. He has published more than 100 research papers in refereed journals and conference proceedings in the area of software engineering. Besides doing research, he has contributed to understanding the software engineering research community.
He has served as the ACM SIGSOFT History Liaison in the SIGSOFT Executive Committee as well as serving in the ACM History Committee. He received a National Science Foundation Faculty Early Career Development (CAREER) Award in 2009. He received 2008, 2009, and 2010 IBM Faculty Awards and a 2008 IBM Jazz Innovation Award. He received 2010 North Carolina State University Sigma Xi Faculty Research Award. He received the ASE 2009 Best Paper Award and an ACM SIGSOFT Distinguished Paper Award. He was Program Co-Chair of 2009 IEEE International Conference on Software Maintenance (ICSM) and is Program Co-Chair of 2011 and 2012 International Working Conference on Mining Software Repositories (MSR).
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)
1. Fitnesse and Continuous Integration
Jennifer Wong | Staff SQE Engineer | twitter: @jenlwong
Proprietary and Confidential
2. Overview
►Intro
► What is FitNesse (Not an exercise program!)
► The Details
► Integration: putting the pieces together
► Lessons Learned
Proprietary and Confidential
3. Intro
• Who:
– Jennifer Wong
– Scrum Master for Tools Team, Staff SQE Engineer
• Where:
– Ingenuity Systems: A leading provider of information
and analytics solutions for life science researchers
• What:
– FitNesse as a key element of Continuous Integration
workflow
• Why:
– Follow up to last year’s presentation
(http://www.slideshare.net/jenlwong/ingenuity-svcc-ci-presentation-20111007 )
Proprietary and Confidential
5. FitNesse
• FitNesse is a wiki-based web server test tool
– Helps abstract test definition from technical implementation
– Provides visual reporting and result history tracking
Proprietary and Confidential
6. Test Types: FitNesse
• We use it for:
– Integration tests
– Acceptance and Functional tests
– UI Tests (com.jbergin.HtmlFixture, webtest)
– DB Tests (dbfit)
– Backward Compatibility tests
• What is it good for?
– Framework and visibility
– accessibility to non-technical people
• What is it bad for?
– Unit tests
– Complicated ui tests
– Extensive performance testing
Proprietary and Confidential
8. Downloading and Installing FitNesse
• Get the jar file and run it
– http://fitnesse.org/FrontPage.FitNesseDevelopment.DownLoad
– java –jar fitnesse.jar
• Or use the demo package:
• Get the file: on the svcc web site, attached to the session, or
on Github
• unzip the file and cd to lib dir
• start the fitnesse server: java -jar fitnesse.jar -p 8080
• open web browser and access http://localhost:8080
• click the link at the top for "CodeCampDemoPage“
• click the test button
Proprietary and Confidential
9. Setting your classpath
• Classpath statements
– Fitnesse needs to know where to find your fixture code
• This kind of error :
• Means you need to add this kind of statement: !path
– You should usually have this kind of stuff:
!contents
!path fitnesse.jar
!path C:/eclipse/fit_demo/eclipse-bin
!define TEST_SYSTEM {slim}
Proprietary and Confidential
10. Some Basic Test Tables
• Script table
– Good for procedural/workflow tests
– Flexible
– Use syntax: check, reject, ensure, show
• Decision table
– Good for data-driven tests
– Specific workflow
• Input methods execute() output methods
– Special method name interpretation
– Automatically calls reset() and execute() methods
• Query table
– Good for validating lists or tables of data
Proprietary and Confidential
11. Variable Usage
• Defining a static variable
– !define ROOT_URL {http://myserver.com}
– !define TESTUSER {testuser1@something.com}
• Storing a value in a variable on the fly
– Store variable: $X=
– Use variable: $X
• Using a variable
– To use this variable, enclose the variable name in ${ }
– Example:
• this: ${URL_ROOT}/context/index.html
• Will resolve to this: http://myserver.com/context/index.html
Proprietary and Confidential
12. Naming and Parameter passing
(Methods)
• (Un) Graceful Naming
– Automatically concatenates space-separated
words
• isHalloween isHalloween()
• Is Halloween isHalloween()
• is halloween isHalloween()
• Is halloWeen error
– When using methods with multiple
parameters, tries to intersperse method
name and paremeters
Proprietary and Confidential
13. Parameter passing (cont)
• Multi-parameter methods: isHalloween(int, String)
– |ensure|is|31|Halloween|October|
– |ensure|is Halloween|31||October|
• Single parameter: setCostume(String)
– |set costume|Clark Kent|
– |set|Clark Kent|costume|
• Constructors with parameters
– This constructor:
• public Halloween(String month, int day, String costume)
– Translates to this usage in a fitnesse table:
|Halloween|October|31|Cat|
|isHalloween?|get surprise?|
Proprietary and Confidential
14. UI Test Fixtures
• com.jbergin.HtmlFixture
– an adapter between FitNesse and HtmlUnit for use in
testing web applications
– Need to use !define TEST_SYSTEM {fit}
– http://htmlfixture.sourceforge.net/
– http://uebuild5:8084/FrontPage.UmaFitNesse.IngsecuritySuite.ConcurrentUserS
essionTest.AcceptanceTests
• webtest selenium
– an extension to FIT/FitNesse that uses Selenium Remote
Control. WebTest runs inside FitNesse.
– http://www.fitnesse.info/webtest
– http://uebuild5:8084/FrontPage.ReportsFitNesse.IsoformView.IsoformVi
ewWebTestSuite.IsoformViewWebTests
Proprietary and Confidential
15. Real world usage is more complex
• What it looks like in the real (ie, complicated)world
– Session handling
• http://uebuild5.ingenuity.com:8084/FrontPage.UmaFitNesse.IngsecuritySuite.Concurren
tUserSessionTest.AcceptanceTests
– Static objects to provide data access
• http://uebuild5.ingenuity.com:8084/FrontPage.ContentserviceFitNesse.TestSuiteForCurrentContent.Ec
sMappingDataProviderTestSuite.P1Tests
– Complex checking of validity
• Unmarshaling JSON to check special conditions in a non
order dependent way
– http://uebuild5.ingenuity.com:8084/FrontPage.FaFitNesse.Test
SuiteForBaselineContentSpecific.FaProviderTestSuite.Execute
FaQuery.LfaQueryTestSuite.AcceptanceTests
Proprietary and Confidential
16. Fixture code can get complicated
very quickly
public static boolean matchGFAResult(JSONObject jsonResult, GFAResult actualResult, boolean allowSubset,
boolean allowPvalueVerification,boolean geneCountVerification ,boolean allowZscoreVerification, boolean allowGeneEffectVerification) throws
JSONException {
JSONArray jsonItems = jsonResult.getJSONArray("items");
logger.info("expected item size = " + jsonItems.length());
logger.info("actual item size = " + actualResult.getFAResultItems().size());
if (jsonItems.length() > actualResult.getFAResultItems().size()) {
return false;
}
Map<String, GFAResultItem> itemMap = buildGFAResult(jsonItems);
if (allowSubset) {
for (Map.Entry<String, GFAResultItem> entry : itemMap.entrySet()) {
logger.info("Look for " + entry.getKey() + " in actual result");
GFAResultItem item = entry.getValue();
if (!containsItem(item, actualResult.getFAResultItems(), allowSubset, allowPvalueVerification,
geneCountVerification,allowZscoreVerification, allowGeneEffectVerification)) {
logger.info(item.getId().getAsString() + " is expected but couldn't be found in actual result");
return false;
}
}
} else {
return equalGFAItems(itemMap, actualResult.getFAResultItems(), allowSubset,allowPvalueVerification,
geneCountVerification,allowZscoreVerification, allowGeneEffectVerification);
}
return true;
}
private static boolean equalGFAItems(Map<String, GFAResultItem> itemMap,
Collection<GFAResultItem> actualResultItems, boolean allowSubset,
boolean allowPvalueVerification,boolean geneCountVerification ,boolean allowZscoreVerification, boolean allowGeneEffectVerification) {
if (itemMap.size() != actualResultItems.size()) {
return false;
}
Proprietary and Confidential
17. Tips and tricks
• Search in your FitNesse wiki
• Use Includes
– Use includes as templates
– http://uebuild5.ingenuity.com:8084/FrontPage.IngtestFitNesse.StableSui
te.FaStableCompat
– http://uebuild5.ingenuity.com:8084/FrontPage.IngtestFitNesse.StableSui
te.ContentserviceStableCompat
• Comments
• Escaping special characters
– Start tables with ! to avoid unwanted interpretation of
graceful names, etc
– Surround special chars with !- -!
• Example: !-gobbledeygook ~!@#$%^&*(){}| as plain string-!
Proprietary and Confidential
18. Fancy fixtures and other nifty stuff
• JSON
– http://uebuild5:8084/FrontPage.MgFitNesse.TestSuiteForBaselineContentSpecific.GraphProviderTestSuite.GetNeighb
orhoodGraph.P1Tests
• Javascript validation
– http://localhost:8080/FrontPage.AutocompFitNesse.FunctionalTests.FitTests.GeneralTests.P1Tests
EVAL {
void execute(Parse row, JSONFixture fixture) {
Parse textCell = row.parts.more;// row.parts.more;
String evalText = textCell.text();
String text = fixture.page.getWebResponse().getContentAsString();
try {
jsEngine.eval("result = " + text + ";");
Object evaluationResult = jsEngine.eval(evalText);
if (evaluationResult instanceof Boolean) {
if ((Boolean)evaluationResult){ fixture.right(textCell);}
else {fixture.wrong(textCell); }
• Running tests based on tag
• Include: http://<host>:<port>/<suite path and test name>?responder=suite&suiteFilter=smoke,critical
• Exclude: http://<host>:<port>/<suite path and test name>?responder=suite&excludeSuiteFilter=NotRunningOnHudson
Proprietary and Confidential
19. Test Variations
• What we’ve done with it that is different
– Use as execution framework for more
complex tests
– Extension of fitnesse server for data-driven
tests
– json fixture – pass in javascript
– Execution of Selenium tests
– Backwards Compatibility tests
Proprietary and Confidential
20. Best practices
• Test robustness
• Test organization
• Test readability
• Fixture design
– Tradeoff between flexibility and readability,
usability
Proprietary and Confidential
25. Lessons learned
• Adds a lot of value for our team
– Visibility into results and test history
– Accessible to non-technical people
– FitNesse is very good for visibility and straightforward
verification of data
• Not good for everything
– Easy to do it wrong
– Requires maintenance
– Not as flexible
• To do more, you have to get creative
• Fixture and test ownership needs to be a shared
responsibility
Proprietary and Confidential
26. • Demo files will be posted to github under jwong-github
• Slides are on slideshare
• Demo and slides are attached to session
• Q&A
Proprietary and Confidential
27. The “As Seen By” Matrix
Proprietary and Confidential
Editor's Notes
Outline for this deck:Who we areWhat challenge we are addressing (high level)Our platform = Ingenuity Knowledge Base Content (3 slides) Ontology (1 slide)Products and Solutions Overview Research and Analysis Solutions The challenge IPA addresses IPA overview The challenge Ingenuity Answers addresses Additional Solutions eCommerce EnterpriseWhat Sets Ingenuity Apart (USPs)