The document discusses various testing frameworks and approaches including unit test frameworks, functional test frameworks, test-driven development, behavior driven development, and using plain functions without a framework. It also summarizes the goals and evolution of a test framework created for OpenStack including initial goals, challenges with the first version, and improvements in the second version. The document concludes with recommendations around modularity, practices over specific tools, reuse of existing libraries, ensuring tests are documented and packaged, allowing for experimentation, and not over-engineering solutions.
If you’re responsible for creating diverse, scalable automated tests but don’t have the time, budget, or a skilled-enough team to create yet another custom test automation framework, then you need to know about Robot Framework!
In this webinar, Bryan Lamb (Founder, RobotFrameworkTutorial.com) and Chris Broesamle (Solutions Engineer, Sauce Labs) will reveal how you can use this powerful, free, open source, generic framework to create continuous automated regression tests for web, batch, API, or database testing. With the simplicity of Robot Framework, in conjunction with Sauce Labs, you can improve your test coverage and time to delivery of your applications.
TestWorks Conf Robot framework - the unsung hero of test automation - Michael...Xebia Nederland BV
The Robot Framework is a generic test automation framework for acceptance test-driven development, that appears to be largely neglected.
Undeservedly so, as it facilitates powerful and yet simple test automation against a variety of interfaces.
It features some distinct advantages when compared to seemingly similar frameworks such as Cucumber or Fitnesse.
This workshop is meant to show you what makes the Robot Framework special and what is has to offer you.
Network Protocol Testing Using Robot FrameworkPayal Jain
The slides describes how Robot Framework provides synergy in test automation, making a lot of
automation processes flexible and simple for testing network protocols(in this case BGP).
If you’re responsible for creating diverse, scalable automated tests but don’t have the time, budget, or a skilled-enough team to create yet another custom test automation framework, then you need to know about Robot Framework!
In this webinar, Bryan Lamb (Founder, RobotFrameworkTutorial.com) and Chris Broesamle (Solutions Engineer, Sauce Labs) will reveal how you can use this powerful, free, open source, generic framework to create continuous automated regression tests for web, batch, API, or database testing. With the simplicity of Robot Framework, in conjunction with Sauce Labs, you can improve your test coverage and time to delivery of your applications.
TestWorks Conf Robot framework - the unsung hero of test automation - Michael...Xebia Nederland BV
The Robot Framework is a generic test automation framework for acceptance test-driven development, that appears to be largely neglected.
Undeservedly so, as it facilitates powerful and yet simple test automation against a variety of interfaces.
It features some distinct advantages when compared to seemingly similar frameworks such as Cucumber or Fitnesse.
This workshop is meant to show you what makes the Robot Framework special and what is has to offer you.
Network Protocol Testing Using Robot FrameworkPayal Jain
The slides describes how Robot Framework provides synergy in test automation, making a lot of
automation processes flexible and simple for testing network protocols(in this case BGP).
A compare and contrast of Continuous Integration testing tools that can be used for Perl projects and where they all fall short. Also looking at what an ideal solution could look like.
It is always tough to test a complex API comprehensively. The additional level of complexity brings us to the question “How can we validate that our API is working as intended?”
In this talk I will explain how to use test driven development for APIs to solve this problem and even further how TDD can drive an API Design towards a more usable design. I will outline my practical approach with an implementation example based on django. And finally I will give you a brief summary of my lessons learned using this approach in customer projects.
Robot Framework is a generic keyword-driven test automation framework for acceptance level testing and acceptance test-driven development (ATDD). It has an easy-to-use tabular syntax for creating test cases and its testing capabilities can be extended by test libraries implemented either with Python or Java. Users can also create new keywords from existing ones using the same simple syntax that is used for creating test cases.
Old presentation was updated on 1st of September, 2014. Content stayed mostly the same but examples were enhanced. Copyrights and some links were also updated a bit later. The presentation is nowadays hosted on GitHub where you can find the original in ODP format: https://github.com/robotframework/IntroSlides
Learn how you can use the RobotFX for Acceptance Testing / Behavior Driven development / Integration Testing. Learn about the advanced keyword driven framework, and the ability to create reusable/custom higher-level keywords. Learn about the integration across multiple tools and extensibility.
Releasing High Quality Packages - Longhorn PHP 2021Colin O'Dell
Releasing open-source libraries is more than sharing your GitHub URL with the world. There are many considerations and steps involved especially for successful and long-lived projects.
In this talk, we’ll cover the principles behind creating, releasing, and maintaining high-quality libraries. Topics will include structuring the repository, implementing modern PHP standards, maintaining changelogs, using CI tests, releasing new versions, and more.
Brief introduction to Test Automation Frameworks, Acceptance Testing and ATTD using Testerone – custom made solution based on RobotFramework and it’s extensive libraries for Selenium’s and AutoIT’s support.
Bring the test cases closer to business people, leave the technical stuff to technical staff using simple business-to-tech excel sheet (map) for collaboration. Complete the solution by controlling everything using Jenkins CI server.
DotNext 2017 in Moscow - Challenges of Managing CoreFX repo -- Karel ZikmundKarel Zikmund
DotNext 2017 conference in Moscow, RU - 2017/11/12
Talk: Challenges of Managing CoreFX repo by Karel Zikmund
http://2017.dotnext-moscow.ru/en/2017/msk/talks/5egbw8vnbkqmmg2skiaey2/
Slides from the Seattle Software Craftsmanship's May Meetup. Topics covered included Test-Driven Development, Pair Programming, Software Design and Refactoring
Testing JSF with Arquillian and SeleniumLukáš Fryč
Testing of web applications is significant part of development cycle from perspective of both, application development and quality assurance.
JSF concepts makes testing of applications simple by separation of concerns, but enforces employing of specific tools for testing business logic and user interface.
Lukas covers testing pitas and introduce frameworks which make testing of JSF application a breeze and motivate developers to follow concepts of test-driven development.
API Testing: The heart of functional testing" with Bj RollisonTEST Huddle
View webinar: http://www.eurostarconferences.com/community/member/webinar-archive/webinar-81-api-testing-the-heart-of-functional-testing
An API, or Application Programming Interface, is a collection of functions that provide much of the functional capabilities in complex software systems. Most customers are accustomed to interacting with a graphical user interface on the computer. But, many customers do not realize the much of the functionality of a program comes from APIs in the operating system or program's dynamic-link libraries (DLL). So, if the business logic or core functionality is exposed via an API call then and if we want to find functional bugs sooner than API testing may be an approach that provides additional value in your overall test strategy. Additionally, API testing can start even before the user interface is complete so functional capabilities can be tested while designers are hashing out the "look and feel." API testing will not replace testing through the user interface, but it can augment your test strategy and provide a solid foundation of automated tests that increase your confidence in the functional quality of your product.
Many know of the famous quote, "Premature optimization is the root of all evil," but most people do not know the full quote or understand the context in which optimization is considered evil. As with anything in programming optimization is evil, maybe. Stop using excuses for slow code, and start to think about the places and tools that you can use to optimize. Thankfully there are are many different tools like xhprof, Valgrind, and others to help us out and properly optimize our code for those times when we need to dig deep into our code.
Arquillian - Integration Testing Made EasyJBUG London
Slides by Davide D'Alto presented at JBUG London event on the 24th of October 2012.
You can watch the presentation video here http://youtu.be/MuqAx9SuIOk
A compare and contrast of Continuous Integration testing tools that can be used for Perl projects and where they all fall short. Also looking at what an ideal solution could look like.
It is always tough to test a complex API comprehensively. The additional level of complexity brings us to the question “How can we validate that our API is working as intended?”
In this talk I will explain how to use test driven development for APIs to solve this problem and even further how TDD can drive an API Design towards a more usable design. I will outline my practical approach with an implementation example based on django. And finally I will give you a brief summary of my lessons learned using this approach in customer projects.
Robot Framework is a generic keyword-driven test automation framework for acceptance level testing and acceptance test-driven development (ATDD). It has an easy-to-use tabular syntax for creating test cases and its testing capabilities can be extended by test libraries implemented either with Python or Java. Users can also create new keywords from existing ones using the same simple syntax that is used for creating test cases.
Old presentation was updated on 1st of September, 2014. Content stayed mostly the same but examples were enhanced. Copyrights and some links were also updated a bit later. The presentation is nowadays hosted on GitHub where you can find the original in ODP format: https://github.com/robotframework/IntroSlides
Learn how you can use the RobotFX for Acceptance Testing / Behavior Driven development / Integration Testing. Learn about the advanced keyword driven framework, and the ability to create reusable/custom higher-level keywords. Learn about the integration across multiple tools and extensibility.
Releasing High Quality Packages - Longhorn PHP 2021Colin O'Dell
Releasing open-source libraries is more than sharing your GitHub URL with the world. There are many considerations and steps involved especially for successful and long-lived projects.
In this talk, we’ll cover the principles behind creating, releasing, and maintaining high-quality libraries. Topics will include structuring the repository, implementing modern PHP standards, maintaining changelogs, using CI tests, releasing new versions, and more.
Brief introduction to Test Automation Frameworks, Acceptance Testing and ATTD using Testerone – custom made solution based on RobotFramework and it’s extensive libraries for Selenium’s and AutoIT’s support.
Bring the test cases closer to business people, leave the technical stuff to technical staff using simple business-to-tech excel sheet (map) for collaboration. Complete the solution by controlling everything using Jenkins CI server.
DotNext 2017 in Moscow - Challenges of Managing CoreFX repo -- Karel ZikmundKarel Zikmund
DotNext 2017 conference in Moscow, RU - 2017/11/12
Talk: Challenges of Managing CoreFX repo by Karel Zikmund
http://2017.dotnext-moscow.ru/en/2017/msk/talks/5egbw8vnbkqmmg2skiaey2/
Slides from the Seattle Software Craftsmanship's May Meetup. Topics covered included Test-Driven Development, Pair Programming, Software Design and Refactoring
Testing JSF with Arquillian and SeleniumLukáš Fryč
Testing of web applications is significant part of development cycle from perspective of both, application development and quality assurance.
JSF concepts makes testing of applications simple by separation of concerns, but enforces employing of specific tools for testing business logic and user interface.
Lukas covers testing pitas and introduce frameworks which make testing of JSF application a breeze and motivate developers to follow concepts of test-driven development.
API Testing: The heart of functional testing" with Bj RollisonTEST Huddle
View webinar: http://www.eurostarconferences.com/community/member/webinar-archive/webinar-81-api-testing-the-heart-of-functional-testing
An API, or Application Programming Interface, is a collection of functions that provide much of the functional capabilities in complex software systems. Most customers are accustomed to interacting with a graphical user interface on the computer. But, many customers do not realize the much of the functionality of a program comes from APIs in the operating system or program's dynamic-link libraries (DLL). So, if the business logic or core functionality is exposed via an API call then and if we want to find functional bugs sooner than API testing may be an approach that provides additional value in your overall test strategy. Additionally, API testing can start even before the user interface is complete so functional capabilities can be tested while designers are hashing out the "look and feel." API testing will not replace testing through the user interface, but it can augment your test strategy and provide a solid foundation of automated tests that increase your confidence in the functional quality of your product.
Many know of the famous quote, "Premature optimization is the root of all evil," but most people do not know the full quote or understand the context in which optimization is considered evil. As with anything in programming optimization is evil, maybe. Stop using excuses for slow code, and start to think about the places and tools that you can use to optimize. Thankfully there are are many different tools like xhprof, Valgrind, and others to help us out and properly optimize our code for those times when we need to dig deep into our code.
Arquillian - Integration Testing Made EasyJBUG London
Slides by Davide D'Alto presented at JBUG London event on the 24th of October 2012.
You can watch the presentation video here http://youtu.be/MuqAx9SuIOk
Around 5 plus years of proven experience in software industry with a focus on Automation/Manual testing, Performance testing, DevOps and Big Data Hadoop. An Experienced Automation and DevOps engineer with excellent knowledge of automation.
Experience in all aspects of infrastructure, application, CI/CD, Containerization. Strong experience in latest DevOps tools like Docker, Kubernetes, Jenkins, Splunk.
Infrastructure testing with Molecule and TestInfraTomislav Plavcic
Presentation defines what infrastructure as code is and what are some of the frameworks used for writing and testing it. More info is provided about Molecule framework which is used for testing Ansible roles and also TestInfra framework which can be used as a verifier with Molecule, but also as a standalone test framework.
How do you tame a big ball of mud? One test at a time.Matt Eland
A broad and high level overview of .NET unit test libraries that will help you write better tests. Discussions around Scientist .NET, Bogus, AutoFixture, Snapper, and others.
Emulators as an Emerging Best Practice for API providersPostman
"Modern applications are highly distributed. We face challenges related to the use of internal and external APIs and how to build APIs with agility in the face of software that can evolve and change at any time. The API industry proposes two common strategies to circumvent these challenges: API Mocking and Service Virtualization. Both have pros and cons.
At Cisco, we came up with the idea of API emulators has a third strategy to handle the challenges we were facing. As a result of our work, we published a reference implementation for Webex ChatBots.
In this talk, we'll explain the motivation behind API emulators in the perspective of DevOps, CI/CD, Software Development, and serverless/microservices architectures. I will elaborate on the idea of integrating emulators as part of an overall API strategy, dive into the process of building such emulators, and validating them with Postman."
A key tenant of moving NFV from a Proof of Concept (Poc) to deployment is testing. NFV solutions that pull from open source projects such as OPNFV, OpenStack, OpenDaylight, and others must be integrated and tested in an environment that fully supports the performance and availability requirements of service provider networks. Testing criteria and solutions are also required to ensure NFV interoperability between hardware and software systems that comprise NFV. In this tutorial, you’ll learn best practices for open source NFV testing, including: methodology; mapping to ETSI NFV use-case/s; open source project integration; testing dashboards; Continuous Integration and Continuous Deployment (CI/CD); and testing acceleration.
Demo how to efficiently evaluate nf-vi performance by leveraging opnfv testi...OPNFV
Liang Gao, Huawei, Trevor Cooper, Intel
NFV environments are highly flexible and this introduces unique challenges for testing performance of NFVI and Network Services. This presentation introduces OPNFV performance test projects and explains their role as part of the testing ecosystem. Examples from three performance testing categories will be demonstrated showing test results and their interpretation. Test cases discussed will include data-path performance, live migration performance and storage performance.
How to implement continuous delivery with enterprise java middleware?Thoughtworks
The goal of Continuous Delivery is to move your production release frequency from months to weeks or even days. This all sounds great, but is Continuous Delivery achievable in a complex enterprise IT environment running Java EE middleware such as WebLogic, WebSphere or JBoss?
In this deck, Andrew Phillips, VP Products, XebiaLabs and Sriram Narayan, Product Principal, ThoughtWorks Studios examine the challenges of Continuous Delivery in a complex environment, the key drivers and benefits for moving to Continuous Delivery and simple ways to get started. We also demonstrate a Java EE delivery pipeline using ThoughtWorks Go and XebiaLabs Deployit that helps you get started and addresses the challenges commonly encountered in enterprise environments.
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.
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.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
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.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
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.
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
5. UNIT TEST FRAMEWORK?
FUNCTIONAL TEST FRAMEWORK?
WHAT ABOUT BEHAVIOR DRIVEN DEVELOPMENT?
TEST DRIVEN DEVELOPMENT?
CAT DRIVEN DEVELOPMENT?
WHAT ABOUT DEPENDENT AND ORDERED TESTS?
WHO NEEDS TEST FRAMEWORKS!? JUST USE FUNCTIONS AND
WRITE EVERYTHING IN-LINE!
6. * In Daryl’s opinion. Subject to change based on future Daryl’s new information.
7.
8. Create a test framework for OpenStack
Must be developed in Python
Must use open source libraries and tools
Should be capable of testing both JSON and XML
request/response content
Proof of Concept developed internally, but maintained in
the long term by the community
Initial focus was Compute, but should be able to be used to
test any OpenStack project
13. No prescribed
Python test runner
One monolithic
project
Single hard coded
configuration file
Poor logging
Credentials were
stored in the clear
14.
15. Design a repeatable architecture for test and test
infrastructure
Initial focus was testing OpenStack, but should be able to
be used to test all internal projects at Rackspace
Must be developed in Python
Must support multiple test runners
Should be extendable
18. Broke the single repository
pattern
Provided foundational
“drivers” for different types
of tests
Provided a pattern for
other teams to repeat with
their own test projects
Created a foundation for
discussions on future API
testing practices
20. Creating confusing
naming conventions
Being prescriptive
when not necessary
Some components
features exceeded
by alternatives
Serialization code
was tedious
Lack of
documentation and
self testing
You can extend the
framework…in any
way we tell you to
21.
22.
23.
24. Test runner A test model Assertions
Means of interacting
with the application
under test
Handling of test
data
Handling of test
results
28. pytest unittest.TestCase Pyvows.expect
behest conflagration
Standard Python
logger and PyTest
result formatter
Test Runner Test Model Assertions
Application Driver Test Data
Management
Test Artifact
Management
29. Think modularly in
your test solutions
1
Encourage practices
over specific tools or
libraries
2
Don’t re-invent the
wheel (unless there
is no wheel)
3
That which is not
tested, documented,
and packaged does
not exist
4
Leave room for
experimentation
5
If you try to come
up with a solution
for everything, you
may end up pleasing
no one
6
Thank you all for coming today and joining in my tech talk! I’d like to try to share some of my experiences about developing test frameworks here at Rackspace so that my mistakes don’t have to be repeated and my insights can be of use to others.
One of the challenges about giving this talk was condensing my experiences into a 25 minute presentation, so I’ve had to leave out some of the details and deeper explanations that I would normally dig deeper into. If there’s anything I go over that you’d like more information about, please ask questions!
Before we can talk about test frameworks, I wanted to make sure we have a common understanding of what I mean when I say test framework. So what is a test framework?
Like many terms in software development, it really depends on who you talk to.
When an application developer references test frameworks, they are most likely thinking about something to write unit tests with, while someone who writes black box functional tests may be thinking about end to end scenario tests.
It can sound confusing, but all of these different approaches have some similar characteristics in common. These characteristics are what I’ve used to create my personal definition for the phrase
So in my opinion,
I purposely called out both development and execution aspects because they are the most commonly provided capabilities that test frameworks provide. A test framework could provide more capabilities, but we’ll talk about the wisdom of that as we go.
With that out of the way, we can talk more about some of the trials and tribulations I’ve had with test frameworks during my time at Rackspace.
I’ll share two war stories today, the first of which has to do with a test framework called Zodiac.
This story starts about six and a half years back, not very long after I started at Rackspace. My manager at the time called me over to research something for him. I had no idea what I was about to get pulled in to
The conversation went something like “So you've been doing fairly well here...there's this OpenStack thing and we need a test framework for that. I'm going to need you bang out a solution for that.”.
Being the go-getter new Racker, I dove right in without asking too many questions. I’ve always liked new challenges, and this project had them in spades.
After the initial excitement wore off, I had a sobering moment when I thought through the problems I would need to overcome.
This was a really big ask for me at the time. Before I came to work at Rackspace, most of my test experience was in the realm of web applications.
I didn’t know what libraries existed for testing RESTful applications from code. There also weren’t any good examples of testing RESTful APIs (state of the art tooling for API testing at Rackspace was a GUI tool called SOAPUI), so I felt like I was going to have to make things up as I went.
On top of the technical challenges, this was during the pre-Public Cloud days when Rackspace was making their major push into OpenStack. Not only was I responsible for meeting the needs of the OpenStack community, but I also needed to meet the testing needs of Compute as we launched it as a product. There was a lot of tension (much of it self-imposed) to get this right.
A friend once told me to trust myself but to respect my self-doubt. I was certain that I could come up with a solution that worked, . Thankfully, I was working with a really creative team and we were able to put together a solution that met the initial scope and that we were relatively happy with.
Here’s a high level architecture of the testing solution we came up with.
When I’m testing the waters of new languages, I try to keep my solutions as simple as possible. I wanted to build just enough structure without complicating things.
It worked out fairly well! The OpenStack QA team was very happy to see developers focused on testing and embraced the work we had done.
That’s not to say that it didn’t have it’s rough edges. By initially not making a decision about a test runner, we lost the ability to test runner specific decorators.
Poor logging hurt because of the stability of OpenStack at the time. It wasn’t always apparent at first whether a test failure was due to an error in the application or in the test framework. Having verbose logs that explained what had happened during each test step by step would’ve gone a long way to making those types of issues much easier to triage.
As for Zodiac, it lived on internally for another year as place for Rackspace-specific tests.
The intent was to address the inefficiencies
We created three abstractions: test runners, application drivers, and configuration management.
You can have any runner you want as you write a plugin for it.
You can use requests and have it auto-serialize your responses.
You can validate specific data about a virtual machine without knowing the underlying OS.
You can use configuration files and environment variables to configure your tests
In my earlier slides I mentioned that when I started development on Zodiac, I didn’t have any resources to reference about tooling or practices for API testing. The work that I did on Zodiac and OpenCafe may not have solved everyone’s specific issues or have , but it did provide a point of reference for those types of discussions.
Let’s face it: all developers have issues with naming things. In OpenCafe, we had some…special naming issues. To give ourselves credit, we argued for hours just to get to these names! I’m not sure if that’s a complement though….
Too prescriptive: telling people they needed to keep language bindings and tests in separate projects. Also for advocating for test code to be kept separate from application code.
While we did end up with a working solution, it’s hard to call it a victory. Confusing conventions and tedious code to handle serialization and deserialization of requests and responses
At the beginning of the year, I spent a lot of time reflecting on how I tried to address testing problems through our frameworks. One of the realizations that I had was that maybe creating testing frameworks, had I really created testing monoliths?
I focused so much on making sure that I solved all the problems that everyone had that I didn’t realize that all of those solutions didn’t need to be bundled into one package. Sometimes when you try to build a slick fighter jet, you end up building a giant slapped together castle on chicken feet.
As part of my soul-searching earlier this year, I tried to boil down the foundational components of a testing solution, and this list is what I came up with.
Test runner: Parses command line args, sets any runtime configuration, performs test generation and loading
Test model: Defines the class structure of the actual tests
Assertions: It’s surprising to see how opinionated people can be about how they perform assertions! If you don’t like the assertions that your language or framework provides, there’s a number of custom packages that let you change the format and output of your assertions
Handling of test data: This can be as simple as loading data from a text file or as complex as munging together data from environment variables, files, and
In the, we developed all of the components of OpenCafe ourselves due to libraries that met our needs being deficient or nonexistent at the time. However, in the five years since we developed OpenCafe, many of those issues have been resolved. Test runners with parallelization are reliable now, and there is a rapidly growing number of packages that solve very specific problems.
In the, we developed all of the components of OpenCafe ourselves due to libraries that met our needs being deficient or nonexistent at the time. However, in the five years since we developed OpenCafe, many of those issues have been resolved. Test runners with parallelization are reliable now, and there is a rapidly growing number of packages that solve very specific problems.
In the beginning, we developed all of the components of OpenCafe ourselves due to necessary libraries either being deficient or nonexistent at the time. However, in the five years since we developed OpenCafe, many of those issues have been resolved by other open source libraries. Test runners with parallelization are reliable now, and there is a rapidly growing number of packages that solve very specific problems.
Rather than rely on one centralized framework to solve all our problems, why not pick components that solve specific problems well instead? Doing so opens test projects up to possibly being less consistent in how they address problems, but also gives teams the freedom to optimize for their specific challenges.
Take a modular approach in your designs. The components you picked today may not be the right solutions at some point in the near future. As one of our leaders in QE says, we reserve the right to get smarter. Try to pick components that do well at solving specific problems so that you are able to swap them out for better solutions if needed.
We work in an industry where libraries and even languages of preference can change every three to five years. While languages and libraries may change, good practices live on.
I’m sure you hear this enough, but avoid re-inventing the wheel. Hindsight being 20/20, I wish I had contributed to pytest rather than writing my own runner. It would’ve taken longer for me to get the features I needed initially, but I would have also gained all the feature development from that community. I would much rather spend my time solving interesting new problems than maintaining code that I don’t care about. Anything you write you need to maintain, so keep that in mind before you leap.
Can we really design one solution that is flexible enough to solve everyone’s problems?