As projects get faster and teams get leaner, the need to write high quality automated acceptance criteria quickly and efficiently has never been greater. Engineers in Test simply cannot afford to spend time maintaining brittle tests. And yet, without solid test automation strategies, this is what many teams find themselves doing. In this workshop, you will learn a better way. You will learn how to write clean, clear and maintainable tests using the Screenplay Pattern, an innovative new approach to writing BDD-style automated acceptance tests that are easier to understand, easier to extend and easier to maintain. The workshop will be a practical demonstration of the principles of good automated test design. There will be live coding of real-world BDD automated acceptance tests in abundance, using Java, Serenity BDD and Cucumber. We will go from requirements and BDD-style Acceptance Criteria in Cucumber right through to automated acceptance tests and living documentation.
Every test tells a story, but some tell a better story than others. Every test illustrates a specific path through the system to achieve a specific goal, but some paths are clearer than others. Valuable tests are the ones that tell a compelling story.
Come on a journey of discovery to learn how to write such tests, and witness a demonstration of these principles in action, with live coding of Serenity BDD automated tests.
Writing good acceptance criteria is one of the keys to effective software delivery. But it’s hard. In this workshop, you will learn about Feature Mapping, a new technique and easy that can help teams write higher quality acceptance criteria more easily. Feature Mapping is an excellent way to build a deep shared understanding of a story's requirements and clear a path to a smooth implementation of automated acceptance tests.
Learn how to write robust and articulate tests using the Screenplay Pattern, an innovative approach to writing BDD-style automated acceptance tests that are easier to understand, easier to extend and easier to maintain.
IT teams today are under constant pressure to deliver more value sooner, and Behaviour Driven Development (BDD) is one of the more effective ways to help teams deliver the high quality software that their business needs. When they adopt BDD, many teams look to tools like Cucumber to help them. But BDD isn’t simply about picking up a new tool.
In fact, there is a lot more to BDD than Given/When/Then and tools like Cucumber, and both can be misused. In this talk, we will take a step back and look at the bigger picture, and learn why using Gherkin at the wrong time, or for the wrong purpose, may be holding you back.
4 Nisan 2015 tarihinde Kadir Has Üniversitesi'nde yapılan 9. Yazılım Teknolojileri Seminer etkinliğinde Eralp Erat'ın yaptığı TDD (Test Driven Design) sunumu
Every test tells a story, but some tell a better story than others. Every test illustrates a specific path through the system to achieve a specific goal, but some paths are clearer than others. Valuable tests are the ones that tell a compelling story.
Come on a journey of discovery to learn how to write such tests, and witness a demonstration of these principles in action, with live coding of Serenity BDD automated tests.
Writing good acceptance criteria is one of the keys to effective software delivery. But it’s hard. In this workshop, you will learn about Feature Mapping, a new technique and easy that can help teams write higher quality acceptance criteria more easily. Feature Mapping is an excellent way to build a deep shared understanding of a story's requirements and clear a path to a smooth implementation of automated acceptance tests.
Learn how to write robust and articulate tests using the Screenplay Pattern, an innovative approach to writing BDD-style automated acceptance tests that are easier to understand, easier to extend and easier to maintain.
IT teams today are under constant pressure to deliver more value sooner, and Behaviour Driven Development (BDD) is one of the more effective ways to help teams deliver the high quality software that their business needs. When they adopt BDD, many teams look to tools like Cucumber to help them. But BDD isn’t simply about picking up a new tool.
In fact, there is a lot more to BDD than Given/When/Then and tools like Cucumber, and both can be misused. In this talk, we will take a step back and look at the bigger picture, and learn why using Gherkin at the wrong time, or for the wrong purpose, may be holding you back.
4 Nisan 2015 tarihinde Kadir Has Üniversitesi'nde yapılan 9. Yazılım Teknolojileri Seminer etkinliğinde Eralp Erat'ın yaptığı TDD (Test Driven Design) sunumu
Refactoring page objects The Screenplay Pattern RiverGlide
As seen at BDD Exchange 2016 and Selenium Conf 2016
The Screenplay Pattern, first created by Antony Marcano, is an alternative model to PageObjects. Today, it is growing in popularity with increasing tool support in popular testing frameworks.
PageObjects provide an easy-to-follow, simple structure that avoids early maintenance issues. They were introduced to help test-developers avoid mistaking flaky tests for problems with Selenium. But, PageObjects break some key OO design rules, making maintenance more difficult over time. They are a useful first step, but why do we stop there?
In this session you’ll learn about the SOLID design principles that PageObjects disregard. You’ll see why this leads to problems. You’ll see how and why PageObjects benefit from refactoring to SOLID design principles. Finally, you’ll meet the Screenplay Pattern – an alternative model based on SOLID principles that saves you the trouble.
How BDD with tools like Cucumber can create a stronger team, a better quality product, and ultimately a more useable API. Given at the #apistrat SF conference 10/24/2013
Test and Behaviour Driven Development (TDD/BDD)Lars Thorup
In this introduction to Test Driven Development (TDD) or Behaviour Driven Development (BDD) we give a high level description of what it is and why it is useful for developers. Then we go into some details on stubs and mocks, test data, UI testing, SQL testing, JavaScript testing, web services testing and how to start doing TDD/BDD on an existing code base.
The essentials of Cucumber-JVM and Spock - a handbook written for the BDD/TDD Masterclass (https://johnfergusonsmart.com/programs-courses/bdd-tdd-clean-coding/)
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...Edureka!
This Edureka Selenium tutorial will give you an introduction to software testing. It talks about the drawbacks of manual testing and reasons why automation testing is the way forward. In this Selenium tutorial, you will also get to learn the different suites of Selenium and what are the features and shortcomings of Selenium as an automation testing tool.
To take a structured course on Selenium, you can check our Selenium training page: https://www.edureka.co/testing-with-selenium-webdriver
Software testing is the process of evaluation a software item to detect differences between given input and expected output. Also to assess the feature of A software item. Testing assesses the quality of the product. Software testing is a process that should be done during the development process. In other words software testing is a verification and validation process.
TYPES OF TESTING
There are many types of testing like
Unit Testing
Integration Testing
Functional Testing
System Testing
Stress Testing
Performance Testing
Usability Testing
Acceptance Testing
Regression Testing
Beta Testing
Page-Object pattern is very commonly used when implementing Automation frameworks. However, as the scale of the framework grows, there is a limitation on how much reusability really happens. It inherently becomes very difficult to separate the test intent from the business domain.
I talk about this problem, and the solution I have been using - Business Layer - Page-Object pattern, which has helped me keep my code DRY.
For more details (links to slides, etc.), see my blog: http://goo.gl/biRn4n
Behavior Driven development is the process of exploring, discovering, defining and driving the desired behavior of software system by using conversation, concrete examples and automated tests.
Lets break some code. In this workshop we will be going over some of the fundamental concepts of software testing and take a hands on approach to writing Unit and Integration tests. We will cover topics such as mocking, stubbing, database patching and how this can all fit into a continuous integration environment like Jenkins.
Written specs are easy to read but hard to write. Even with an understanding of the principles and tips for writing good Gherkin, it can be very hard to keep scenarios clean, informative and readable.
These slides are from a workshop given by John Ferguson Smart and Tom Roden, where they take a practical look at some real-world Gherkin scenarios, investigate what makes them smell and practise how to improve them. Discover some powerful refactoring patterns to help make your own specs a joy to read.
It was the time of Da Vinci and Michelangelo. It was also the time of Machiavelli and the Medici. Artists working on timeless masterpieces crossed paths with mercenary captains, contracted to do a very specific job.
In this keynote talk, John Smart will address important questions with deep implications for any IT team, or any organisation trying to make a difference, or simply to get the most value out of their IT projects.
Who is your real customer? Is there a cost to quality? Are you building an artwork that will last, or simply fulfilling a contract?
An inspiring and entertaining talk that will take attendees on journey from the Italian Renaissance to Silicon Valley and the City of London, and see what lessons can be learned about cultures, attitudes and work ethics today.
Refactoring page objects The Screenplay Pattern RiverGlide
As seen at BDD Exchange 2016 and Selenium Conf 2016
The Screenplay Pattern, first created by Antony Marcano, is an alternative model to PageObjects. Today, it is growing in popularity with increasing tool support in popular testing frameworks.
PageObjects provide an easy-to-follow, simple structure that avoids early maintenance issues. They were introduced to help test-developers avoid mistaking flaky tests for problems with Selenium. But, PageObjects break some key OO design rules, making maintenance more difficult over time. They are a useful first step, but why do we stop there?
In this session you’ll learn about the SOLID design principles that PageObjects disregard. You’ll see why this leads to problems. You’ll see how and why PageObjects benefit from refactoring to SOLID design principles. Finally, you’ll meet the Screenplay Pattern – an alternative model based on SOLID principles that saves you the trouble.
How BDD with tools like Cucumber can create a stronger team, a better quality product, and ultimately a more useable API. Given at the #apistrat SF conference 10/24/2013
Test and Behaviour Driven Development (TDD/BDD)Lars Thorup
In this introduction to Test Driven Development (TDD) or Behaviour Driven Development (BDD) we give a high level description of what it is and why it is useful for developers. Then we go into some details on stubs and mocks, test data, UI testing, SQL testing, JavaScript testing, web services testing and how to start doing TDD/BDD on an existing code base.
The essentials of Cucumber-JVM and Spock - a handbook written for the BDD/TDD Masterclass (https://johnfergusonsmart.com/programs-courses/bdd-tdd-clean-coding/)
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...Edureka!
This Edureka Selenium tutorial will give you an introduction to software testing. It talks about the drawbacks of manual testing and reasons why automation testing is the way forward. In this Selenium tutorial, you will also get to learn the different suites of Selenium and what are the features and shortcomings of Selenium as an automation testing tool.
To take a structured course on Selenium, you can check our Selenium training page: https://www.edureka.co/testing-with-selenium-webdriver
Software testing is the process of evaluation a software item to detect differences between given input and expected output. Also to assess the feature of A software item. Testing assesses the quality of the product. Software testing is a process that should be done during the development process. In other words software testing is a verification and validation process.
TYPES OF TESTING
There are many types of testing like
Unit Testing
Integration Testing
Functional Testing
System Testing
Stress Testing
Performance Testing
Usability Testing
Acceptance Testing
Regression Testing
Beta Testing
Page-Object pattern is very commonly used when implementing Automation frameworks. However, as the scale of the framework grows, there is a limitation on how much reusability really happens. It inherently becomes very difficult to separate the test intent from the business domain.
I talk about this problem, and the solution I have been using - Business Layer - Page-Object pattern, which has helped me keep my code DRY.
For more details (links to slides, etc.), see my blog: http://goo.gl/biRn4n
Behavior Driven development is the process of exploring, discovering, defining and driving the desired behavior of software system by using conversation, concrete examples and automated tests.
Lets break some code. In this workshop we will be going over some of the fundamental concepts of software testing and take a hands on approach to writing Unit and Integration tests. We will cover topics such as mocking, stubbing, database patching and how this can all fit into a continuous integration environment like Jenkins.
Written specs are easy to read but hard to write. Even with an understanding of the principles and tips for writing good Gherkin, it can be very hard to keep scenarios clean, informative and readable.
These slides are from a workshop given by John Ferguson Smart and Tom Roden, where they take a practical look at some real-world Gherkin scenarios, investigate what makes them smell and practise how to improve them. Discover some powerful refactoring patterns to help make your own specs a joy to read.
It was the time of Da Vinci and Michelangelo. It was also the time of Machiavelli and the Medici. Artists working on timeless masterpieces crossed paths with mercenary captains, contracted to do a very specific job.
In this keynote talk, John Smart will address important questions with deep implications for any IT team, or any organisation trying to make a difference, or simply to get the most value out of their IT projects.
Who is your real customer? Is there a cost to quality? Are you building an artwork that will last, or simply fulfilling a contract?
An inspiring and entertaining talk that will take attendees on journey from the Italian Renaissance to Silicon Valley and the City of London, and see what lessons can be learned about cultures, attitudes and work ethics today.
Discover how you can multiply your team’s productivity and innovation by engaging the creativity of your whole team from the outset. Drawing from his long experience helping teams deliver better software faster and more effectively, John will discuss the latest practical techniques leveraged from Behaviour Driven Development, Lean Enterprise, DevOps, and Test Automation, combined with research in Psychology and Team Performance, to show you how to get the best out of your teams.
Learn about the new roles of business analysts, developers and testers in the future of software development, where testers can play a vital role in not only detecting defects but preventing them. Discover how you can make test automation happen during, not after, the sprint, and how to engage the creativity of the whole team right from the word "go".
his talk will present the core concepts of Exponential Business Agility, or XBA. XBA is a set of patterns for organising value streams around self-organising, autonomous teams, and is part of the XSCALE approach to scaling agile. XBA combines the Spotify model with practice patterns drawn from the Iroquois Confederacy, the most successful and longest-lived holarchy in history.
Learn how Throughput Accounting optimises the contribution of each business function to top line throughput rather than blindly attempting to minimise operating expense.
And discover how Self-Propagating Transformation avoids pushing change into pre-existing teams, programs or silos, but generates agile capability by grafting the kernel of a new culture onto the trunk of the old.
Be a pod of dolphins, not a dancing elephant. Don’t try to scale agile. De-scale your organisation instead.
International speaker and author of “BDD in Action” John Ferguson Smart shows how you can multiply your team’s productivity and innovation by engaging the creativity of your whole team from the outset. Drawing from his long experience helping teams deliver better software faster and more effectively, John will discuss the latest practical techniques leveraged from Behaviour Driven Development, Lean Enterprise, DevOps, and Test Automation, combined with research in Psychology and Team Performance, to show you how to get the best out of your teams. Learn about the new roles of business analysts, developers and testers in a DevOps world, and how testers can play a vital role in not only detecting defects but preventing them. Discover how you can make test automation happen during, not after, the sprint, and how to engage the creativity of the whole team right from the word "go".
IT teams today are under constant pressure to deliver more value sooner, and Behaviour Driven Development (BDD) is one of the more effective ways to help teams deliver the high quality software that their business needs. When they adopt BDD, many teams look to tools like Cucumber to help them. But BDD isn’t simply about picking up a new tool.
In fact, there is a lot more to BDD than Given/When/Then and tools like Cucumber, and both can be misused. In this talk, we will take a step back and look at the bigger picture, and learn why using Gherkin at the wrong time, or for the wrong purpose, may be holding you back.
The changing role of testing and test automation in the increasingly fast-paced world of continuous delivery and automated acceptance testing. Learn how, in a DevOps environment, testing activities start with requirements discovery and definition, playing a vital role in not only detecting defects, but preventing them, and ensuring not only that the features are built right, but the right features are built. And learn how test automation needs to happen during, not after, the sprint, and how you can achieve this.
Despite rumors to the contrary, the role of the tester is not diminished with the arrival of automated DevOps, with its ultra-rapid deployment cycles and its emphasis on automation. On the contrary, testers play a vital role in ensuring that the code that gets deployed ten times a day is worth deploying.
Every test tells a story, but some tell a better story than others. Every test illustrates a specific path through the system to achieve a specific goal, but some paths are clearer than others. Valuable tests are the ones that both tell a compelling story, and can stand the test of time, providing value not only as acceptance tests but also as living documentation and easily maintainable regression tests.
In this session, John will invite you to come on a journey of discovery to learn how to write clean, clear and maintainable tests using the Journey Pattern, an innovative new approach to writing automated acceptance tests that are easier to understand, easier to extend and easier to maintain. You will also witness a demonstration of these principles in action, with live coding of Serenity BDD automated tests.
Learn how to plan, prioritise and deliver higher value features by thinking of deliverable features not in terms of what they cost, but of what they can deliver.
XScale is a set of practices based on BDD that enables a product team to efficiently define, budget and prioritise a roadmap or backlog.
It’s also a way to answer some questions Agile has traditionally avoided:
- How much will a set of features cost?
- How do we trade off different feature sets?
- How do we know a feature is ready to ship?
In this workshop, we outline several key practices and practice using a few of them. The main practices we cover include:
- Feature Points, a way to reconcile budgets with story points
- Backlog Bingo determines the dollar investment and relative return for a set of products and services
- Royal Cod applies Backlog Bingo to prioritize a Breadth-First Roadmap
- Release Refactoring enables product owners to make rational trade-offs between feature-sets.
Behaviour Driven Development is a powerful collaboration technique that can empower teams to deliver higher value features to the business faster and more effectively. But although Behaviour Driven Development is based on a number of simple principles, it can go dramatically wrong in a myriad of different ways.
In this talk we discuss twelve BDD anti-patterns we frequently encounter in real-world BDD projects, anti-patterns that can dramatically reduce the effectiveness of BDD as a practice, and that can even cause BDD adoption to fail entirely. Looking at everything from insufficient collaboration practices to poor use of test automation tooling, from teams that test too much to teams that forget the most important scenarios, we will look at the many different ways that BDD can go wrong, and how it should be done.
We will use real-world examples to illustrate each of these anti-patterns. You will learn how to spot these issues in your own projects, and more importantly how to avoid them in the first place.
Behaviour-Driven Development (BDD) is a game changer for the whole team! Behaviour Driven Development is a powerful collaboration technique that can empower teams to deliver higher value features to the business faster and more effectively. More than just a testing technique, BDD is both a collaboration and a verification tool, and a vital step on the road to Continuous Delivery.
Think BDD is just for web sites? Think again! In this talk, we rethink traditional software testing strategies in the context of micro-services and Behaviour-Driven Development. We will see how traditional testing approaches are both inadequate and poorly targeted for micro-services development. We will learn how to use BDD techniques to discover, describe and document micro-service requirements, and tools like Cucumber and Serenity to turn these requirements into automated acceptance tests and living documentation. We will see how Consumer-Driven Contract tools help ensure that micro-services play well together, and how you can implement the details with the help of unit-testing tools like Spock and REST-Assured.
Behaviour Driven Development is a powerful collaboration technique that can empower teams to deliver higher value features to the business faster and more effectively. But although Behaviour Driven Development is based on a number of simple principles, it can go dramatically wrong in a myriad of different ways.
In this talk we discuss twelve BDD anti-patterns we frequently encounter in real-world BDD projects, anti-patterns that can dramatically reduce the effectiveness of BDD as a practice, and that can even cause BDD adoption to fail entirely. Looking at everything from insufficient collaboration practices to poor use of test automation tooling, from teams that test too much to teams that forget the most important scenarios, we will look at the many different ways that BDD can go wrong, and how it should be done.
We will use real-world examples to illustrate each of these anti-patterns. You will learn how to spot these issues in your own projects, and more importantly how to avoid them in the first place.
Behaviour Driven Development is an increasingly popular Agile practice that turns testing on its head, and involves a major shift in the role testers play in a project. Although popularly associated with automated acceptance testing and tools like Cucumber, BDD actually has much broader applications. In this talk, we will look at how Behaviour Driven Development radically changes the traditional tester role in Agile projects, and empowers them to tangibly contribute much more to the successful outcomes of the project. We will see how collaboratively discussing and defining acceptance criteria help reduce assumptions and errors in the early phases of the project, and help ensure that the features being built are well understood, testable, and valuable to the business. We will look at ways to write more effective, easier to maintain automated acceptance criteria, that free testers to do more productive testing tasks such as exploratory testing. And we will see how automated and manual acceptance test reporting can be combined to provide valuable progress, product documentation and release preparation reporting.
Slides from the London Agile Testing Meetup of November 25 2014:
John Ferguson Smart is a specialist in BDD, automated testing and software life cycle development optimization. John is a well-known speaker at many international conferences and events and an accomplished author (John's new book BDD in Action was published last month).
John presents a talk discussing how to write solid, reliable and maintainable automated web tests using the best-of-breed open source technologies like Selenium WebDriver, Serenity, JBehave and Cucumber.
Behaviour-Driven Development (BDD) is a game changer for the whole team! More than just a testing technique, BDD is both a collaboration and a verification tool, and a vital step on the road to Continuous Delivery. In this session, you will learn what BDD is about, its benefits, and how it affects development teams and processes. But you will also see BDD techniques applied to a real project using tools like JBehave, Cucumber, Selenium 2, Thucydides and more!
- Learn how BDD helps teams focus on discovering and delivering the features that really matter! - Learn what it takes to write more relevant and more maintainable automated acceptance tests - Discover how a well-designed set of automated acceptance criteria can also be a powerful documentation and reporting tool. - See where BDD fits into a Continuous Delivery pipeline.
- And learn how product owners use BDD and Thucydides to drive, coordinate and document releases.
Learn how much more there is to BDD than just “Given..When..Then”!
A common perception of behavior-driven development (BDD) focuses on test automation with Cucumber-style “Given..When..Then” scenarios. But this is just the tip of the iceberg: in fact BDD ranges from requirements discovery and description through to driving technical design and implementation; helping testers focus their testing efforts more effectively; and even providing reliable, useful, and accurate technical documentation.
This session discusses what BDD is about, its benefits, and how it affects development teams and processes. You will see how JVM teams can effectively implement BDD with tools such as JBehave, Cucumber, Thucydides, and Spock. Come learn how much more there is to BDD than just “Given..When..Then.”
ehaviour-driven development (BDD) started as an improved variation on test-driven development, but has evolved to become a formidable tool that helps teams communicate more effectively about requirements, using conversation and concrete examples to discover what features really matter to the business. BDD helps teams focus not only on building features that work, but on ensuring that the features they deliver are the ones the client actually needs.
• Learn what BDD is, and what it is not
• Understand that the core of BDD is around conversation and requirements discovery, not around tools.
• Understand the difference and similarities between BDD at the requirements level, and BDD at the coding level.
Learn what BDD tools exist for different platforms, and when to use them.
This is a variation on the talk I gave at Agile Australia, that I delivered at the Sydney Agile meetup on July 15 2014.
Behaviour Driven Development is an increasingly popular Agile development practice that turns testing on its head. It turns automated acceptance testing from a verification activity, done once the development work is done, to a specification activity, with tester involvement starting from the word go.
In this talk, we will look at how Behaviour Driven Development radically changes the traditional tester role in Agile projects, and empowers them to contribute much more to the successful outcomes of the project. We will see how collaboratively written acceptance criteria help reduce assumptions and errors in the early phases of the project, and help ensure that the features being built are both well understood and valuable to the business. We will look at ways to write more effective, easier to maintain automated acceptance tests. And we will see how automated and manual acceptance test reporting can be combined to provide valuable progress and release preparation reporting.
Behaviour-driven development (BDD) started as an improved variation on test-driven development, but has evolved to become a formidable tool that helps teams communicate more effectively about requirements, using conversation and concrete examples to discover what features really matter to the business. BDD helps teams focus not only on building features that work, but on ensuring that the features they deliver are the ones the client actually needs.
Learn what BDD is, and what it is not
Understand that the core of BDD is around conversation and requirements discovery, not around tools.
Understand the difference and similarities between BDD at the requirements level, and BDD at the coding level.
Learn what BDD tools exist for different platforms, and when to use them
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
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
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.
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.
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/
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
"Impact of front-end architecture on development cost", Viktor TurskyiFwdays
I have heard many times that architecture is not important for the front-end. Also, many times I have seen how developers implement features on the front-end just following the standard rules for a framework and think that this is enough to successfully launch the project, and then the project fails. How to prevent this and what approach to choose? I have launched dozens of complex projects and during the talk we will analyze which approaches have worked for me and which have not.
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.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
29. serenity-bdd.info#SerenityBDD @Wakaleo
Open the Journey Planner
Choose origin: Waterloo
Choose destination: Canary Wharf
Choose time of departure: 9:00 AM
Click on the “change time” link
Click on the “Leaving” button
30. serenity-bdd.info#SerenityBDD @Wakaleo
Open the Journey Planner
Choose origin: Waterloo
Choose destination: Canary Wharf
Choose time of departure: 9:00 AM
Click on the “change time” link
Click on the “Leaving” button
Select “09:00”
33. serenity-bdd.info#SerenityBDD @Wakaleo
Open the Journey Planner
Choose origin: Waterloo
Choose destination: Canary Wharf
Choose time of departure: 9:00 AM
Confirm selection
Click on the “Plan my journey”
34. serenity-bdd.info#SerenityBDD @Wakaleo
Open the Journey Planner
Choose origin: Waterloo
Choose destination: Canary Wharf
Choose time of departure: 9:00 AM
Confirm selection
Click on the “Plan my journey”
Wait for the results to load
36. serenity-bdd.info#SerenityBDD @Wakaleo
Open the Journey Planner
Choose origin: Waterloo
Choose destination: Canary Wharf
Choose time of departure: 9:00 AM
Confirm selection
See a Jubilee Line train at 08:59
39. serenity-bdd.info#SerenityBDD @Wakaleo
private final By origin = By.id("InputFrom");
private final By originSuggestions = By.cssSelector(".tt-suggestions");
private final By destination = By.id("InputTo");
private final By destinationSuggestions = By.cssSelector(".tt-suggestions");
private final By changeTimeLink = By.partialLinkText("change time");
private final By leavingButton = By.cssSelector("label[for=departing]");
private final By timeSelector = By.id("Time");
private final By planMyJourneyButton = By.cssSelector("#plan-a-journey .plan-journey-button");
private final By journeyResults = By.cssSelector(".summary-results");
private final By fastestJourney = By.cssSelector(".publictransport-box span.time");
49. serenity-bdd.info#SerenityBDD @Wakaleo
private final By origin = By.id("InputFrom");
private final By originSuggestions = By.cssSelector(".tt-suggestions");
private final By destination = By.id("InputTo");
private final By destinationSuggestions = By.cssSelector(".tt-suggestions");
private final By changeTimeLink = By.partialLinkText("change time");
private final By leavingButton = By.cssSelector("label[for=departing]");
private final By timeSelector = By.id("Time");
private final By planMyJourneyButton = By.cssSelector("#plan-a-journey .plan-journey-button");
private final By journeyResults = By.cssSelector(".summary-results");
private final By fastestJourney = By.cssSelector(".publictransport-box span.time");
private WebDriver browser;
@Before
public void openBrowser() {
browser = new FirefoxDriver();
}
@After
public void closeBrowser() {
browser.quit();
}
@Test
public void planning_a_journey() {
browser.get("https://tfl.gov.uk/");
browser.findElement(origin).sendKeys("Waterloo");
WebDriverWait wait = new WebDriverWait(browser, 10);
wait.until(visibilityOfElementLocated(originSuggestions));
browser.findElement(originSuggestions).sendKeys(ARROW_DOWN);
browser.findElement(originSuggestions).sendKeys(ENTER);
browser.findElement(destination).sendKeys("Canary Wharf");
wait.until(visibilityOfElementLocated(destinationSuggestions));
browser.findElement(destinationSuggestions).sendKeys(ARROW_DOWN);
browser.findElement(destinationSuggestions).sendKeys(ENTER);
browser.findElement(changeTimeLink).click();
browser.findElement(leavingButton).click();
new Select(browser.findElement(timeSelector)).selectByVisibleText("09:00");
browser.findElement(planMyJourneyButton).click();
wait.until(visibilityOfElementLocated(journeyResults));
String fastestDepartureTime = startTimeOf(browser.findElement(fastestJourney).getText());
6 tasks ?
50. serenity-bdd.info#SerenityBDD @Wakaleo
6 tasks buried in
36 lines of noise
private final By origin = By.id("InputFrom");
private final By originSuggestions = By.cssSelector(".tt-suggestions");
private final By destination = By.id("InputTo");
private final By destinationSuggestions = By.cssSelector(".tt-suggestions");
private final By changeTimeLink = By.partialLinkText("change time");
private final By leavingButton = By.cssSelector("label[for=departing]");
private final By timeSelector = By.id("Time");
private final By planMyJourneyButton = By.cssSelector("#plan-a-journey .plan-journey-button");
private final By journeyResults = By.cssSelector(".summary-results");
private final By fastestJourney = By.cssSelector(".publictransport-box span.time");
private WebDriver browser;
@Before
public void openBrowser() {
browser = new FirefoxDriver();
}
@After
public void closeBrowser() {
browser.quit();
}
@Test
public void planning_a_journey() {
browser.get("https://tfl.gov.uk/");
browser.findElement(origin).sendKeys("Waterloo");
WebDriverWait wait = new WebDriverWait(browser, 10);
wait.until(visibilityOfElementLocated(originSuggestions));
browser.findElement(originSuggestions).sendKeys(ARROW_DOWN);
browser.findElement(originSuggestions).sendKeys(ENTER);
browser.findElement(destination).sendKeys("Canary Wharf");
wait.until(visibilityOfElementLocated(destinationSuggestions));
browser.findElement(destinationSuggestions).sendKeys(ARROW_DOWN);
browser.findElement(destinationSuggestions).sendKeys(ENTER);
browser.findElement(changeTimeLink).click();
browser.findElement(leavingButton).click();
new Select(browser.findElement(timeSelector)).selectByVisibleText("09:00");
browser.findElement(planMyJourneyButton).click();
wait.until(visibilityOfElementLocated(journeyResults));
String fastestDepartureTime = startTimeOf(browser.findElement(fastestJourney).getText());
82. serenity-bdd.info#SerenityBDD @Wakaleo
Plan my journey
Actor Goals Tasks Interactions
Press “Down”
Type “Waterloo”
Choose Destination
Choose Origin
Choose time of departure
Press “Enter”
Confirm selection
Connor the
commuter
84. serenity-bdd.info#SerenityBDD @Wakaleo
Open the Journey Planner
Choose origin of Waterloo
Choose destination of Canary Wharf
Choose time of departure: 09:00
Confirm selection
See if the fastest train departs at 08:59
91. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN)
);
}
}
92. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
);
}
}
93. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
.forNoMoreThan(10).seconds(),
);
}
}
94. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
.forNoMoreThan(10).seconds(),
PickFirstSuggestion.from(JourneyPlanner.ORIGIN)
);
}
private final String station;
}
95. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
.forNoMoreThan(10).seconds(),
PickFirstSuggestion.from(JourneyPlanner.ORIGIN)
);
}
private final String station;
public ChooseOrigin(String origin) { this.station = origin;}
}
96. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
.forNoMoreThan(10).seconds(),
PickFirstSuggestion.from(JourneyPlanner.ORIGIN)
);
}
private final String station;
public ChooseOrigin(String origin) { this.station = origin;}
public static Performable of(String station) {
return instrumented(ChooseOrigin.class, station);
}
}
97. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Step("{0} selects origin station of #station")
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
.forNoMoreThan(10).seconds(),
PickFirstSuggestion.from(JourneyPlanner.ORIGIN)
);
}
private final String station;
public ChooseOrigin(String origin) { this.station = origin;}
public static Performable of(String station) {
return instrumented(ChooseOrigin.class, station);
}
}
98. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Step("{0} selects origin station of #station")
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
.forNoMoreThan(10).seconds(),
PickFirstSuggestion.from(JourneyPlanner.ORIGIN)
);
}
private final String station;
public ChooseOrigin(String origin) { this.station = origin;}
public static Performable of(String station) {
return instrumented(ChooseOrigin.class, station);
}
}
How the step appears in the reports
99. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Step("{0} selects origin station of #station")
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
.forNoMoreThan(10).seconds(),
PickFirstSuggestion.from(JourneyPlanner.ORIGIN)
);
}
private final String station;
public ChooseOrigin(String origin) { this.station = origin;}
public static Performable of(String station) {
return instrumented(ChooseOrigin.class, station);
}
}
The name of the actor
100. serenity-bdd.info#SerenityBDD @Wakaleo
public class ChooseOrigin implements Task {
@Step("{0} selects origin station of #station")
@Override
public <T extends Actor> void performAs(T actor) {
actor.attemptsTo(
Enter.theValue(station).into(JourneyPlanner.ORIGIN),
WaitUntil.the(JourneyPlanner.ORIGIN_SUGGESTIONS, isVisible())
.forNoMoreThan(10).seconds(),
PickFirstSuggestion.from(JourneyPlanner.ORIGIN)
);
}
private final String station;
public ChooseOrigin(String origin) { this.station = origin;}
public static Performable of(String station) {
return instrumented(ChooseOrigin.class, station);
}
}
A member variable
117. serenity-bdd.info#SerenityBDD @Wakaleo
public class JourneyPlanner {
public static final Target ORIGIN = Target.the("Departure station")
.locatedBy("#InputFrom");
public static final Target ORIGIN_SUGGESTIONS = Target.the("Origin Suggestions")
.locatedBy("//*[input[@id='InputFrom']]/*[contains(@class, 'tt-dropdown-menu')]");
public static final Target DESTINATION = Target.the("Destination station")
.locatedBy("#InputTo");
public static final Target DESTINATION_SUGGESTIONS = Target.the("Destination Suggestions")
.locatedBy("//*[input[@id='InputTo']]/*[contains(@class, 'tt-dropdown-menu')]");
public static final Target CHANGE_TIME = Target.the("Change Time")
.located(By.partialLinkText("change time"));
public static final Target LEAVING_BUTTON = Target.the("Leaving")
.located(By.cssSelector("label[for=departing]"));
public static final Target SELECTED_DEPARTURE_TIME = Target.the("Departure Time")
.located(By.id("Time"));
public static final Target SELECTED_DEPARTURE_DROPDOWN = Target.the("Departure Time")
.located(By.cssSelector(".hours"));
public static final Target PLAN_MY_JOURNEY = Target.the("Plan my journey")
.locatedBy("#plan-a-journey .plan-journey-button");;
}
124. serenity-bdd.info#SerenityBDD @Wakaleo
public class FilterItems implements Task {
private final String filter;
public <T extends Actor> void performAs(T theActor) {
}
public static FilterItems toShow(String filter) {
return instrumented(FilterItems.class, status);
}
public FilterItems(TodoStatusFilter filter) { this.filter = filter; }
}
125. serenity-bdd.info#SerenityBDD @Wakaleo
public class FilterItems implements Task {
private final String filter;
public <T extends Actor> void performAs(T theActor) {
theActor.attemptsTo(
Click.on(TodoList.FILTER
);
}
public static FilterItems toShow(String filter) {
return instrumented(FilterItems.class, status);
}
public FilterItems(TodoStatusFilter filter) { this.filter = filter; }
}
Click on the filter button
126. serenity-bdd.info#SerenityBDD @Wakaleo
public class FilterItems implements Task {
private final String filter;
public <T extends Actor> void performAs(T theActor) {
theActor.attemptsTo(
Click.on(TodoList.FILTER.of(filter)
);
}
public static FilterItems toShow(String filter) {
return instrumented(FilterItems.class, status);
}
public FilterItems(TodoStatusFilter filter) { this.filter = filter; }
}
Pass in the name of the filter
127. serenity-bdd.info#SerenityBDD @Wakaleo
public class FilterItems implements Task {
private final String filter;
public <T extends Actor> void performAs(T theActor) {
theActor.attemptsTo(
Click.on(TodoList.FILTER.of(filter)
.called(“filter by "+ filter))
);
}
public static FilterItems toShow(String filter) {
return instrumented(FilterItems.class, status);
}
public FilterItems(TodoStatusFilter filter) { this.filter = filter; }
How will this interaction appear in the reports?
128. serenity-bdd.info#SerenityBDD @Wakaleo
public class FilterItems implements Task {
private final String filter;
@Step("{0} filters items by #filter")
public <T extends Actor> void performAs(T theActor) {
theActor.attemptsTo(
Click.on(TodoList.FILTER.of(filter)
.called(“filter by "+ filter))
);
}
public static FilterItems toShow(String filter) {
return instrumented(FilterItems.class, status);
}
How will this task appear in the reports
143. serenity-bdd.info#SerenityBDD @Wakaleo
public class TheFastest {
public static Question<String> tubeLine() {
return new FastestTubeLineQuestion();
}
}
public class FastestTubeLineQuestion implements Question<String> {
}
144. serenity-bdd.info#SerenityBDD @Wakaleo
public class TheFastest {
public static Question<String> tubeLine() {
return new FastestTubeLineQuestion();
}
}
public class FastestTubeLineQuestion implements Question<String> {
@Override
public String answeredBy(Actor actor) {
}
}
145. serenity-bdd.info#SerenityBDD @Wakaleo
public class TheFastest {
public static Question<String> tubeLine() {
return new FastestTubeLineQuestion();
}
}
public class FastestTubeLineQuestion implements Question<String> {
@Override
public String answeredBy(Actor actor) {
return Text.of(JourneyResults.ITINERARY)
}
}
146. serenity-bdd.info#SerenityBDD @Wakaleo
public class TheFastest {
public static Question<String> tubeLine() {
return new FastestTubeLineQuestion();
}
}
public class FastestTubeLineQuestion implements Question<String> {
@Override
public String answeredBy(Actor actor) {
return Text.of(JourneyResults.ITINERARY)
.viewedBy(actor)
}
}
147. serenity-bdd.info#SerenityBDD @Wakaleo
public class TheFastest {
public static Question<String> tubeLine() {
return new FastestTubeLineQuestion();
}
}
public class FastestTubeLineQuestion implements Question<String> {
@Override
public String answeredBy(Actor actor) {
return Text.of(JourneyResults.ITINERARY)
.viewedBy(actor)
.asString();
}
}
148. serenity-bdd.info#SerenityBDD @Wakaleo
public class TheFastest {
public static Question<String> tubeLine() {
return new FastestTubeLineQuestion();
}
}
@Subject("the fastest tube line")
public class FastestTubeLineQuestion implements Question<String> {
@Override
public String answeredBy(Actor actor) {
return Text.of(JourneyResults.ITINERARY)
.viewedBy(actor)
.asString();
}
}
166. serenity-bdd.info#SerenityBDD @Wakaleo
Feature: Plan a new journey
Scenario: Plan a new journey
Given that Connie is a London commuter
When she plans a journey from Waterloo to Canary Wharf departing at 09:00
Then she should see that the fastest train departs at 08:59
168. serenity-bdd.info#SerenityBDD @Wakaleo
public class PlanAJourneyStepDefinitions {
@Before
public void set_the_stage() {
OnStage.setTheStage(new OnlineCast());
}
@Given("^that (.*) is a London commuter$")
public void a_london_commuter_named(String commuterName) throws Throwable {
theActorCalled(commuterName);
}
169. serenity-bdd.info#SerenityBDD @Wakaleo
public class PlanAJourneyStepDefinitions {
@Before
public void set_the_stage() {
OnStage.setTheStage(new OnlineCast());
}
@Given("^that (.*) is a London commuter$")
public void a_london_commuter_named(String commuterName) throws Throwable {
theActorCalled(commuterName);
}
170. serenity-bdd.info#SerenityBDD @Wakaleo
Feature: Plan a new journey
Scenario: Plan a new journey
Given that Connie is a London commuter
When she plans a journey from Waterloo to Canary Wharf departing at 09:00
Then she should see that the fastest train departs at 08:59
171. serenity-bdd.info#SerenityBDD @Wakaleo
public class PlanAJourneyStepDefinitions {
@Before
public void set_the_stage() {
OnStage.setTheStage(new OnlineCast());
}
@Given("^that (.*) is a London commuter$")
public void a_london_commuter_named(String commuterName) throws Throwable {
theActorCalled(commuterName);
}
@When("^(.*) plans a journey from (.*) to (.*) departing at (.*)$")
public void plan_a_journeys(String name, String departure, String destination,
String departureTime) throws Throwable {
theActorCalled(name).attemptsTo(
PlanAJourney.from(departure).to(destination).departingAt(departureTime)
);
}
172. serenity-bdd.info#SerenityBDD @Wakaleo
Feature: Plan a new journey
Scenario: Plan a new journey
Given that Connie is a London commuter
When she plans a journey from Waterloo to Canary Wharf departing at 09:00
Then she should see that the fastest train departs at 08:59
173. serenity-bdd.info#SerenityBDD @Wakaleo
public class PlanAJourneyStepDefinitions {
@Before
public void set_the_stage() {
OnStage.setTheStage(new OnlineCast());
}
@Given("^that (.*) is a London commuter$")
public void a_london_commuter_named(String commuterName) throws Throwable {…}
@When("^(.*) plans a journey from (.*) to (.*) departing at (.*)$")
public void plan_a_journeys(String name, String departure, String destination,
String departureTime) throws Throwable {…}
@Then("^(.*) should see that the fastest train departs at (.*)$")
public void should_see_departure_time(String name,
String expectedDepartureTime) throws Throwable {
theActorCalled(name).should(
seeThat("the departure time", TheFastest.departureTime(),
is(expectedDepartureTime))
);
175. serenity-bdd.info#SerenityBDD @Wakaleo
Feature: Plan a new journey
Scenario Outline: Plan many a journey
Given that Connie is a London commuter
When she plans a journey from <departure> to <destination> departing at <plannedDepartureTime>
Then she should see a trip on the <line> line departing at <departureTime>
Examples:
| departure | destination | line | plannedDepartureTime | departureTime |
| Waterloo | Canary Wharf | Jubilee line to Canary Wharf | 09:00 | 08:59 |
| London Bridge | Moorgate | Northern line to Moorgate | 10:00 | 09:59 |
176. serenity-bdd.info#SerenityBDD @Wakaleo
Feature: Plan a new journey
Scenario Outline: Plan many a journey
Given that Connie is a London commuter
When she plans a journey from <departure> to <destination> departing at <plannedDepartureTime>
Then she should see a trip on the <line> line departing at <departureTime>
Examples:
| departure | destination | line | plannedDepartureTime | departureTime |
| Waterloo | Canary Wharf | Jubilee line to Canary Wharf | 09:00 | 08:59 |
| London Bridge | Moorgate | Northern line to Moorgate | 10:00 | 09:59 |
177. serenity-bdd.info#SerenityBDD @Wakaleo
@Then("^(.*) should see a trip on the (.*) line departing at (.*)")
public void should_see_trip(String name, String line, String departureTime) {
theActorCalled(name).should(
seeThat("the fastest tube line”, TheFastest.tubeLine(),
is(line)),
seeThat("the departure time", TheFastest.departureTime(),
is(departureTime))
);
}
178. serenity-bdd.info#SerenityBDD @Wakaleo
Scenario: Coordinating journeys
Given that Connie is a London commuter
And that Charles is a London commuter
When Connie plans a journey from Waterloo to Canary Wharf departing at 09:00
And Charles plans a journey from London Bridge to Moorgate departing at 10:00
Then Connie should see a trip on the Jubilee line to Canary Wharf line departing at 08:59
And Charles should see a trip on the Northern line to Moorgate line departing at 09:59
188. serenity-bdd.info#SerenityBDD @Wakaleo
Questions to ask:
- How much time do I spend maintaining the tests?
- Am I modelling user’s interactions with the system,
or how the system is built?
- Can I share elements of my testing framework with others?
- How much duplication and dead code is there in my tests?
- How long would it take me to find the issue if a test fails?
- How long to change the tests when the system changes?
- Can I use my tests to drive the design of the system?
192. serenity-bdd.info#SerenityBDD @Wakaleo
Thank you!
Learn more at serenity-bdd.info
Source code:
How we can help:
Get in touch:
Learn Serenity BDD online
bit.ly/serentiy-planner
johnfergusonsmart.com
reachme@johnfergusonsmart.com
http://serenity-dojo.com