<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Moataz Nabil</title>
    <description>The latest articles on DEV Community by Moataz Nabil (@moataznabil).</description>
    <link>https://dev.to/moataznabil</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F86422%2Ffbed7f2d-aacb-453d-8216-24bde263e7b2.JPG</url>
      <title>DEV Community: Moataz Nabil</title>
      <link>https://dev.to/moataznabil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moataznabil"/>
    <language>en</language>
    <item>
      <title>Platform Engineering with AWS: What You Need to Know</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Thu, 27 Mar 2025 20:19:36 +0000</pubDate>
      <link>https://dev.to/aws-builders/platform-engineering-with-aws-what-you-need-to-know-23b8</link>
      <guid>https://dev.to/aws-builders/platform-engineering-with-aws-what-you-need-to-know-23b8</guid>
      <description>&lt;p&gt;Imagine you're working at a fast-growing tech company with multiple development teams. At first, everything runs smoothly—developers write code, deploy it manually, and handle infrastructure as needed. But as the company scales, things get complicated.&lt;/p&gt;

&lt;p&gt;Developers struggle to manage different environments. One team runs its services on EC2; another uses Kubernetes, and a third experiments with Lambda. Setting up a new service becomes a hassle, requiring multiple Slack messages, Jira tickets, and DevOps support. &lt;/p&gt;

&lt;p&gt;Security updates often take a backseat to feature development—until something breaks. &lt;/p&gt;

&lt;p&gt;Instead of focusing on building features, developers spend too much time fixing pipelines and troubleshooting infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;This chaos slows innovation and creates bottlenecks.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A dedicated Platform Team can solve these issues by building a self-service Internal Developer Platform (IDP). This platform streamlines infrastructure, automates deployments, and enforces best practices, allowing developers to focus on what they do best—writing code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;By 2026, 80% of large software engineering organizations will establish platform engineering teams as internal providers of reusable services, components, and tools for application delivery — up from 45% in 2022. &lt;a href="https://www.gartner.com/en/infrastructure-and-it-operations-leaders/topics/platform-engineering" rel="noopener noreferrer"&gt;Gartner&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqvn5jdjquonrrp0jm3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqvn5jdjquonrrp0jm3d.png" alt="2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Platform Engineering?
&lt;/h3&gt;

&lt;p&gt;Platform engineering is creating an &lt;a href="https://internaldeveloperplatform.org/" rel="noopener noreferrer"&gt;Internal Developer Platform (IDP)&lt;/a&gt; to facilitate software development and deployment. &lt;/p&gt;

&lt;p&gt;Instead of each team handling infrastructure independently, a dedicated platform team builds and manages standard tools, automation, and best practices.&lt;/p&gt;

&lt;p&gt;Without a dedicated Platform Team, organizations often encounter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lack of Standardization&lt;/strong&gt; – Development teams may utilize inconsistent tools, CI/CD pipelines, and infrastructure, resulting in inefficiencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Increased Cognitive Load on Developers&lt;/strong&gt; – Engineers have to manage infrastructure, deployments, and security configurations rather than focusing on feature development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Slow Developer Onboarding&lt;/strong&gt; – Without an Internal Developer Platform (IDP), new engineers are slower to become productive due to fragmented tools and unclear workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Operational Bottlenecks&lt;/strong&gt; – SREs and DevOps teams become overwhelmed as developers depend on them for environment provisioning, debugging, and scaling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security and Compliance Risks&lt;/strong&gt; – Without a centralized approach, enforcing security policies, access controls, and compliance becomes more challenging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inefficient Incident Management&lt;/strong&gt; – Debugging production issues takes longer when a unified observability and monitoring framework is absent.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Principles of Platform Engineering
&lt;/h3&gt;

&lt;p&gt;Platform engineering is a vital discipline that focuses on designing, creating, and maintaining the underlying systems and infrastructure that support a range of software applications and services. This field encompasses several key principles that guide platform engineers in their work, ensuring scalability, reliability, and efficient resource management:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Platform as a Product&lt;/strong&gt; – Consider the platform as a dynamic product, gather developer insights, and enhance it continuously.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Developer Experience (DevEx)&lt;/strong&gt; – Provide self-service tools to minimize friction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Developer Happiness&lt;/strong&gt; – Lower cognitive load, eliminate obstacles, and allow engineers to concentrate on innovation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Faster Feedback Loops&lt;/strong&gt; – Facilitate rapid iterations and seamless delivery.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Golden Pathways&lt;/strong&gt; – Establish best software building and deployment practices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automation &amp;amp; Observability&lt;/strong&gt; – Implement Infrastructure-as-Code (IaC), monitoring, and auto-scaling to ensure operational efficiency.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These principles help teams overcome challenges and set long-term goals for a better development workflow.&lt;/p&gt;

&lt;p&gt;Now, let’s dive into Platform Engineering with AWS and how it improves the developer experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Services for Platform Engineering
&lt;/h3&gt;

&lt;p&gt;AWS offers vast services to create a highly scalable and automated developer platform. This platform enables developers to streamline workflows, enhance productivity, and accelerate application development through various tools and resources. &lt;/p&gt;

&lt;p&gt;The key areas include: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure as Code (IaC) &amp;amp; Automation:&lt;/strong&gt; - Use CloudFormation, CDK, or Terraform for infrastructure provisioning. Automate CI/CD workflows with CodePipeline and GitHub Actions. Or use Terraform, an Open-source IaC tool for resource management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enable Developer Self-Service:&lt;/strong&gt; -  Provide standardized templates and blueprints. Use the AWS Service Catalog to let teams easily spin up environments. This integration allows for the efficient building, testing, and deployment of applications directly from a GitHub repository to various AWS services, ensuring that code changes are reflected in production with speed and accuracy&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI/CD &amp;amp; DevOps Automation&lt;/strong&gt; - Integrate GitHub Actions with AWS for seamless deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Containerization &amp;amp; Orchestration&lt;/strong&gt; - Amazon ECS (Elastic Container Service) provides managed container orchestration, enabling users to easily run and scale containerized applications. Amazon EKS (Elastic Kubernetes Service) offers Kubernetes management on AWS, simplifying the deployment and management of Kubernetes clusters. Additionally, AWS Fargate allows for serverless computing for containers, removing the need for infrastructure management and letting users focus on their applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability &amp;amp; Monitoring:&lt;/strong&gt; - Building strong observability from the start is essential, which can be achieved using CloudWatch, X-Ray, and OpenTelemetry for monitoring purposes. Implementing structured logging with centralized storage helps in maintaining comprehensive oversight. Amazon CloudWatch provides a place for logs, metrics, and alarms in one location. AWS X-Ray offers distributed tracing designed explicitly for microservices, while the AWS OpenSearch Service facilitates log analytics and search functionality. Additionally, Prometheus and Grafana on AWS are powerful open-source monitoring tools that can be utilized for enhanced observability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security &amp;amp; Governance:&lt;/strong&gt; - Enforce security from day one by applying IAM least privilege policies and automating security compliance with AWS Config and Security Hub. AWS IAM (Identity and Access Management) is crucial for controlling access and permissions, while AWS Organizations and Control Tower help manage multi-account governance. Additionally, AWS Security Hub provides centralized security insights, and AWS Secrets Manager and Parameter Store ensure secure credential storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimize for Cost &amp;amp; Performance:&lt;/strong&gt; - Use AWS Compute Savings Plans &amp;amp; Spot Instances for cost efficiency. Implement auto-scaling to match demand dynamically.&lt;/p&gt;

&lt;p&gt;For example, here is how to build Developer Portals with &lt;a href="https://backstage.io/" rel="noopener noreferrer"&gt;Backstage&lt;/a&gt; and Amazon EKS Blueprints - Source &lt;a href="https://aws.amazon.com/blogs/opensource/building-developer-portals-with-backstage-and-amazon-eks-blueprints/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01uqdwdgzevu2a6738a3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01uqdwdgzevu2a6738a3.png" alt="1" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The AWS architecture diagram above illustrates the deployment of Backstage, an open-source developer portal, within an Amazon EKS (Elastic Kubernetes Service) cluster. &lt;/p&gt;

&lt;p&gt;Users access &lt;strong&gt;Backstage&lt;/strong&gt; through a domain managed by &lt;strong&gt;Amazon Route 53&lt;/strong&gt;, with traffic routed via an &lt;strong&gt;Elastic Load Balancer&lt;/strong&gt; that secures connections using SSL certificates from &lt;strong&gt;AWS Certificate Manager&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Backstage&lt;/strong&gt; application runs inside the &lt;strong&gt;EKS cluster&lt;/strong&gt; and relies on &lt;strong&gt;Amazon RDS&lt;/strong&gt; for &lt;strong&gt;PostgreSQL&lt;/strong&gt; as its database. &lt;/p&gt;

&lt;p&gt;Sensitive credentials, such as database credentials, are securely stored in &lt;strong&gt;AWS Secrets Manager&lt;/strong&gt; and accessed by the application through an External Secrets mechanism, which syncs them into &lt;strong&gt;Kubernetes Secrets&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Backstage retrieves these credentials to connect to the database. &lt;/p&gt;

&lt;p&gt;Additionally, container images for Backstage are stored in &lt;strong&gt;Amazon ECR&lt;/strong&gt;, ensuring efficient deployment and scalability. &lt;/p&gt;

&lt;p&gt;Overall, this architecture leverages AWS-managed services to provide security, scalability, and ease of management for hosting Backstage in a Kubernetes environment.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It’s crucial to understand how to measure Platform Engineering's success so we can improve it and ensure we're on the right path.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Measuring the Success of Platform Engineering
&lt;/h3&gt;

&lt;p&gt;To measure the effectiveness of Platform Engineering and IDP, organizations should track several key metrics. &lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;developer productivity&lt;/strong&gt;, they should consider the lead time for changes (DORA metric), deployment frequency, time to onboard new developers, and the time spent on non-coding tasks, such as setting up environments. &lt;/p&gt;

&lt;p&gt;Regarding &lt;strong&gt;operational efficiency&lt;/strong&gt;, organizations should monitor the Mean Time to Recovery (MTTR), the number of support tickets related to CI/CD or environments, and the time spent on infrastructure maintenance. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer satisfaction and adoption&lt;/strong&gt; can be assessed through Developer NPS (Net Promoter Score), self-service adoption rates for deployments, provisioning, and debugging, and feedback from internal surveys. &lt;/p&gt;

&lt;p&gt;Additionally, &lt;strong&gt;quality and stability metrics&lt;/strong&gt; include the number of failed deployments, incident resolution time, and improvements in test coverage. &lt;/p&gt;

&lt;p&gt;Finally, for &lt;strong&gt;security and compliance&lt;/strong&gt;, organizations should track the number of security vulnerabilities identified and remediated, along with compliance adherence rates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Platform Engineering with AWS empowers teams to construct scalable, self-service, and developer-friendly environments tailored to their unique needs. &lt;/p&gt;

&lt;p&gt;By effectively leveraging a suite of AWS services—including Amazon Elastic Kubernetes Service (EKS), Amazon Elastic Container Service (ECS), AWS Lambda, Terraform for infrastructure as code, AWS CodePipeline for continuous integration and delivery, Amazon CloudWatch for monitoring, and AWS Identity and Access Management (IAM) for security management—teams can significantly enhance their operational efficiency. &lt;/p&gt;

&lt;p&gt;This strategic use of AWS tools increases developer productivity by streamlining workflows and automating processes, ultimately allowing developers to focus on innovation rather than maintenance. &lt;/p&gt;

&lt;p&gt;Additionally, these capabilities reduce operational headaches, facilitating smoother project execution and faster time-to-market for applications. &lt;/p&gt;

&lt;p&gt;In essence, Platform Engineering with AWS fosters a modern development environment and creates a robust foundation for future growth and scalability within organizations.&lt;/p&gt;

&lt;p&gt;Helpful Resources: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/awstv/watch/884e1e5fb57/" rel="noopener noreferrer"&gt;Transforming Developer Portals: Deep Dive into Backstage Deployment on AWS - Insights from AWS and Spotify Experts&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/blogs/opensource/building-developer-portals-with-backstage-and-amazon-eks-blueprints/" rel="noopener noreferrer"&gt;Building Developer Portals with Backstage and Amazon EKS Blueprints&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=eLxBnGoBltc" rel="noopener noreferrer"&gt;AWS re:Invent 2023 - Platform engineering with Amazon EKS (CON311)&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://platformengineering.org/" rel="noopener noreferrer"&gt;Platform Engineering Community&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for reading&lt;/p&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>The key responsibilities of a Software Quality Manager: ensuring high-quality software development</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Sun, 06 Aug 2023 16:37:40 +0000</pubDate>
      <link>https://dev.to/moataznabil/the-key-responsibilities-of-a-software-quality-manager-ensuring-high-quality-software-development-3a9f</link>
      <guid>https://dev.to/moataznabil/the-key-responsibilities-of-a-software-quality-manager-ensuring-high-quality-software-development-3a9f</guid>
      <description>&lt;p&gt;The key responsibilities of a Software Quality Manager: ensuring high-quality software development&lt;/p&gt;

&lt;p&gt;In the ever-changing landscape of software development, delivering efficient and top-notch products is vital for achieving success. The Software Quality Manager (SQM) plays a central role in upholding quality throughout the development journey. &lt;/p&gt;

&lt;p&gt;In this blog post I will uncover the essential duties of a Software Quality Manager and explore the significant impact they have on the software development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test planning and management
&lt;/h2&gt;

&lt;p&gt;Comprehensive test planning is essential for ensuring a well-structured testing process. SQMs collaborate with stakeholders to define testing objectives, scope, and priorities. They create detailed test plans, including test cases, data, and environments. &lt;br&gt;
Through meticulous test management, SQMs ensure that testing progresses smoothly and is aligned with project timelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing effective testing strategies
&lt;/h2&gt;

&lt;p&gt;Testing lies at the heart of software quality assurance, and a Software Quality Manager leads the charge in implementing effective testing strategies. This includes designing comprehensive test plans, defining test cases, and overseeing the execution of various testing phases, such as unit testing, integration testing, and user acceptance testing. &lt;/p&gt;

&lt;p&gt;A well-executed testing strategy helps identify and rectify defects early in development, saving time and resources in the long run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software Quality Assurance (SQA)
&lt;/h2&gt;

&lt;p&gt;Software Quality Assurance is a proactive approach to ensure quality processes are in place throughout the software development lifecycle. SQMs establish SQA methodologies, conduct process audits, and monitor adherence to best practices. &lt;br&gt;
By focusing on prevention rather than detection, SQA minimizes defects and ensures that quality is ingrained in every stage of development.&lt;/p&gt;

&lt;p&gt;Quality assurance tools and automation play a significant role in enhancing the efficiency and effectiveness of software testing. SQMs are responsible for evaluating, selecting, and implementing the right quality assurance tools that align with the project's requirements. &lt;/p&gt;

&lt;p&gt;These tools help streamline testing processes, increase test coverage, and ultimately lead to a more reliable and high-quality software product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality management
&lt;/h2&gt;

&lt;p&gt;As the keepers of quality, SQMs are responsible for defining and measuring quality metrics. They analyze these metrics to gain insights into the development process and continuously make data-driven decisions to improve overall software quality. &lt;br&gt;
Effective quality management helps the development team stay on track and identify areas for improvement.&lt;/p&gt;

&lt;p&gt;Setting and Enforcing Quality Standards by establishing clear and measurable quality standards for the development team to follow. These standards encompass various aspects, such as coding practices, testing methodologies, documentation requirements, and performance metrics. By enforcing these standards consistently, SQMs ensure that the entire development team adheres to best practices, resulting in a more robust and reliable software product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do Software Quality Managers measure and analyze quality metrics?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Software Quality Managers use a variety of metrics to measure and analyze the quality of software products throughout the development lifecycle. These metrics help them understand the health of the project, identify areas for improvement, and make informed decisions to ensure a high-quality end product. &lt;/p&gt;

&lt;p&gt;Here are some common steps they take to measure and analyze quality metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Define Quality Goals:&lt;/strong&gt; Quality Managers work with stakeholders to define clear and measurable quality goals for the project. These goals should be aligned with the overall business objectives and customer expectations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identify Key Performance Indicators (KPIs):&lt;/strong&gt; Quality Managers select specific KPIs that align with the defined quality goals. KPIs may vary depending on the project and technology, but some common examples include defect density, test coverage, code churn, customer satisfaction, and response time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Baseline Metrics:&lt;/strong&gt; Before the development process begins, a baseline set of metrics is established to provide a starting point for comparison. Baseline metrics help in evaluating the progress and improvements made over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collect Data:&lt;/strong&gt; Throughout the development lifecycle, relevant data is collected from various sources such as testing tools, version control systems, issue tracking systems, performance monitoring tools, and customer feedback channels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze Trends:&lt;/strong&gt; Quality Managers analyze trends in the collected data to identify patterns or changes that could affect product quality. They look for trends that might reveal potential risks or opportunities for optimization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conduct Root Cause Analysis:&lt;/strong&gt; When issues or defects arise, Quality Managers perform root cause analysis to understand the underlying reasons for the problems. This helps in implementing corrective actions and preventing similar issues in the future.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Test Automation:&lt;/strong&gt; Automation tools play a significant role in measuring quality metrics. Automated tests provide continuous feedback on the quality of the code and help maintain consistency in the testing process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Test Management Tools:&lt;/strong&gt; Test management tools, such as TestRail help Quality Managers organize test cases, track test execution, and gather test results. These tools assist in collecting valuable data for quality analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaborate with Development Teams:&lt;/strong&gt; Quality Managers work closely with development teams to understand the challenges they face and identify potential improvements in the development process that could enhance quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report and Communicate:&lt;/strong&gt; Quality Managers compile their findings into comprehensive reports and communicate the results to stakeholders, project managers, and development teams. These reports help in decision-making and driving improvements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuously Improve:&lt;/strong&gt; Quality Managers use the insights gained from quality metrics to continuously improve processes, tools, and workflows, aiming for incremental enhancements in product quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Testing domains and types
&lt;/h2&gt;

&lt;p&gt;Software projects often encompass various testing domains and types, such as functional testing, performance testing, security testing, and more. SQMs possess an in-depth understanding of these testing areas and allocate resources accordingly. They ensure the appropriate testing types are executed to mitigate risks and deliver a robust, reliable product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Automation and tooling
&lt;/h2&gt;

&lt;p&gt;Test automation has become a cornerstone of efficient and effective software testing. SQMs are responsible for identifying suitable automation tools and frameworks, creating automated test scripts, and integrating them seamlessly into the development process. Automated testing increases test coverage and allows faster and more frequent testing, enabling rapid feedback on code changes and reducing time-to-market.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are some common coding practices, testing methodologies, documentation requirements, and performance metrics that SQMs enforce?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The following are a few common coding practices, testing methodologies, documentation requirements, and performance metrics SQMs enforce in their test automation frameworks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coding Practices:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Reviews:&lt;/strong&gt; encourage regular code reviews to ensure that the code follows coding standards, is maintainable, and doesn't introduce critical defects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding Standards:&lt;/strong&gt; enforcing consistent coding standards helps improve code readability, maintainability, and reduces the risk of introducing errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Refactoring:&lt;/strong&gt; encouraging code refactoring helps in keeping the codebase clean, organized, and easier to maintain over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing Methodologies:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test-Driven Development (TDD):&lt;/strong&gt; advocate for TDD, where tests are written before the actual code. This helps in designing code that meets the specified requirements and prevents defects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous Integration (CI):&lt;/strong&gt; CI involves frequent integration of code changes into a shared repository and automated builds and tests. SQMs ensure that CI pipelines are in place to maintain code quality and detect issues early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unit Testing:&lt;/strong&gt; enforce the practice of writing unit tests to verify the correctness of individual code components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regression Testing:&lt;/strong&gt; enforce the practice of running regression tests whenever changes are made to the code to ensure that existing functionality remains intact.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration Testing:&lt;/strong&gt; Integration testing is essential to verify the interactions between different components of the software. SQMs ensure that integration tests are part of the testing process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Testing:&lt;/strong&gt; emphasize performance testing to assess how well the software performs under different load conditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Documentation Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Requirements Documentation:&lt;/strong&gt; ensure that clear and comprehensive requirements are documented, providing a basis for testing and development efforts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Plans and Test Cases:&lt;/strong&gt; enforce the creation of detailed test plans and test cases to ensure complete test coverage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Documentation:&lt;/strong&gt; promote documenting code to explain its purpose, logic, and usage for better understanding and maintenance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance Metrics:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Defect Density:&lt;/strong&gt; the number of defects found per lines of code or functional points is a measure of code quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Coverage:&lt;/strong&gt; test coverage measures the percentage of code or requirements covered by tests, helping to assess the completeness of testing efforts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mean Time to Detect (MTTD) and Mean Time to Resolve (MTTR):&lt;/strong&gt; these metrics track how quickly defects are detected and resolved, respectively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response Time:&lt;/strong&gt; for applications and systems, response time measures how quickly the software responds to user actions or requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What specific automation tools and frameworks do Software Quality Managers typically use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Software Quality Managers typically use a variety of automation tools and frameworks to streamline and enhance the software testing and quality assurance processes. &lt;/p&gt;

&lt;p&gt;The specific tools and frameworks used may vary depending on the organization's needs, technology stack, and preferences. Here are some commonly used automation tools and frameworks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selenium WebDriver&lt;/li&gt;
&lt;li&gt;Cypress&lt;/li&gt;
&lt;li&gt;Playwright&lt;/li&gt;
&lt;li&gt;WebDriverIO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mobile Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Appium&lt;/li&gt;
&lt;li&gt;Espresso (Android)&lt;/li&gt;
&lt;li&gt;XCUITest (iOS)&lt;/li&gt;
&lt;li&gt;Maestro&lt;/li&gt;
&lt;li&gt;Detox (React Native)&lt;/li&gt;
&lt;li&gt;Flutter Integration Test&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Unit Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JUnit (Java)&lt;/li&gt;
&lt;li&gt;TestNG (Java)&lt;/li&gt;
&lt;li&gt;NUnit (.NET)&lt;/li&gt;
&lt;li&gt;Pytest (Python)&lt;/li&gt;
&lt;li&gt;Mocha (JavaScript)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Behavior-Driven Development (BDD):&lt;/strong&gt; Cucumber (with Gherkin language)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Postman&lt;/li&gt;
&lt;li&gt;SoapUI&lt;/li&gt;
&lt;li&gt;REST Assured (Java)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Load Testing and Performance Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JMeter&lt;/li&gt;
&lt;li&gt;LoadRunner&lt;/li&gt;
&lt;li&gt;Gatling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Continuous Integration and Continuous Deployment (CI/CD):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Azure Pipelines&lt;/li&gt;
&lt;li&gt;GitLab CI/CD&lt;/li&gt;
&lt;li&gt;CircleCI&lt;/li&gt;
&lt;li&gt;Codemagic&lt;/li&gt;
&lt;li&gt;AWS CodePipeline&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Test Management and Issue Tracking:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JIRA&lt;/li&gt;
&lt;li&gt;TestRail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cross-Browser Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BrowserStack&lt;/li&gt;
&lt;li&gt;Sauce Labs&lt;/li&gt;
&lt;li&gt;LambdaTest&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Quality and Static Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SonarQube&lt;/li&gt;
&lt;li&gt;ESLint (JavaScript)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desktop Application Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WinAppDriver (Windows)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Security Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OWASP ZAP (Zed Attack Proxy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Test Data Management:&lt;/strong&gt; Faker (for generating test data programmatically)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It is possible that new tools have emerged in the landscape of software testing tools. The tools used by Software Quality Managers may also vary depending on the requirements and technology stack of the projects they manage.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Leadership and communication
&lt;/h2&gt;

&lt;p&gt;Leadership skills are critical for SQMs, as they collaborate with diverse cross-functional teams and provide guidance throughout development. They inspire their teams to achieve excellence, foster a culture of continuous improvement, and resolve conflicts when they arise. Effective communication ensures that quality objectives, progress, and challenges are transparently communicated to stakeholders, fostering alignment and trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Collaborating with cross-functional teams
&lt;/h2&gt;

&lt;p&gt;Software development is a collaborative effort involving multiple cross-functional teams, including developers, testers, designers, product managers, and more. The SQM is pivotal in fostering effective communication and collaboration among these teams. &lt;/p&gt;

&lt;p&gt;By maintaining a clear line of communication and facilitating regular meetings, SQMs ensure that all stakeholders are aligned on quality objectives and are working cohesively towards achieving them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous process improvement
&lt;/h2&gt;

&lt;p&gt;SQMs are not just concerned with immediate quality goals; they also focus on continuous process improvement. By analyzing software development metrics and gathering feedback from team members, they identify areas for enhancement and optimize the development process iteratively. Continuous process improvement fosters a culture of learning and innovation, leading to more efficient and streamlined development cycles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Risk management and mitigation
&lt;/h2&gt;

&lt;p&gt;In any software project, inherent risks impact quality and project timelines. A Software Quality Manager works proactively to identify these risks, assess their potential impact, and develop risk mitigation strategies. By taking a proactive approach to risk management, SQMs help prevent quality issues before they arise and ensure that the software development process stays on track.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Day in the Life of a Manager in Quality Engineering
&lt;/h2&gt;

&lt;p&gt;As a Manager in Quality Engineering, your day will be a dynamic mix of overseeing team members, coordinating with other departments, strategizing, and ensuring the quality of the software development process. Here's a glimpse of what a typical day might look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Check Emails and Reports:&lt;/strong&gt; start your day by reviewing emails and automated test reports from the previous day. Address any urgent issues and assign tasks to team members accordingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily Stand-Up:&lt;/strong&gt; hold a daily stand-up meeting with your quality engineering team. Each team member provides a brief update on their ongoing tasks, challenges, and any required assistance. Use this opportunity to reinforce project goals and clarify expectations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project Planning:&lt;/strong&gt; meet with the development team leads and project managers to discuss upcoming software releases or new features. Understand the requirements and plan the test strategy, including identifying areas suitable for automation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review Test Scripts:&lt;/strong&gt; review the automated test scripts created by your team members. Ensure they adhere to coding standards, are maintainable, and provide adequate test coverage for the application under test.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Support:&lt;/strong&gt; provide support and guidance to team members, whether addressing technical issues, offering testing advice, or helping with scripting challenges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Process Improvement:&lt;/strong&gt; identify opportunities to improve the efficiency and effectiveness of the quality engineering process. Collaborate with your team to discuss ideas and implement improvements to streamline testing efforts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Functional Meetings:&lt;/strong&gt; meet stakeholders from other departments, such as Development, Product Management, and Operations. Discuss ongoing projects and potential bottlenecks, and align everyone on quality goals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation Framework Enhancements:&lt;/strong&gt; work with your team to enhance the existing automation framework, integrating new tools or libraries that can improve testing capabilities and efficiency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation and Reporting:&lt;/strong&gt; ensure that test documentation, including test cases, test results, and automation scripts, is current. Prepare comprehensive reports on the testing progress and test coverage for management and other stakeholders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skill Development:&lt;/strong&gt; encourage your team members' professional growth by identifying relevant training or certifications, discussing career goals, and providing mentorship.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review Project Status:&lt;/strong&gt; before the end of the day, check in with the team members to get updates on their progress. Address any critical issues or blockers that may affect project timelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for Tomorrow:&lt;/strong&gt; take some time to plan the priorities for the next day, assign tasks, and ensure that your team has the necessary resources to carry out their responsibilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal Development:&lt;/strong&gt; dedicate some time to your professional development, whether reading articles on the latest trends in quality engineering, attending webinars, or networking with industry peers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wrap up the day ensuring that your team feels supported and informed and that the overall quality engineering efforts are on track. Leave the office with a sense of accomplishment, knowing you've contributed to the success of the software development process through adequate quality assurance and automation management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The role of a Software Quality Manager is multi-faceted and essential in maintaining and enhancing software quality throughout the development lifecycle. By overseeing test automation and tooling, test planning and management, SQA, quality management, testing domains, testing types, leadership, and communication, SQMs play a critical role in delivering high-quality software products. &lt;/p&gt;

&lt;p&gt;Their expertise impacts efficiency, early defect detection, product quality, adaptability, and continuous improvement, ensuring organizations thrive in a competitive software development landscape. &lt;/p&gt;

&lt;p&gt;Embracing the expert touch of a Software Quality Manager is a strategic move toward successful software delivery and customer satisfaction, essential for organizations seeking to excel in the competitive software development landscape.&lt;/p&gt;

&lt;p&gt;Thanks for reading and happy testing!&lt;/p&gt;

</description>
      <category>testing</category>
      <category>automation</category>
      <category>codequality</category>
      <category>management</category>
    </item>
    <item>
      <title>Cloud Test Automation on AWS: The Role of QA Engineers</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Sun, 25 Jun 2023 09:30:04 +0000</pubDate>
      <link>https://dev.to/aws-builders/cloud-test-automation-on-aws-the-role-of-qa-engineers-4j23</link>
      <guid>https://dev.to/aws-builders/cloud-test-automation-on-aws-the-role-of-qa-engineers-4j23</guid>
      <description>&lt;p&gt;In today's rapidly evolving technological landscape, cloud computing has become an integral part of businesses across various industries. With the growing reliance on cloud services, ensuring their quality and performance has become paramount. This is where Quality Assurance (QA) Engineers with expertise in test automation on the AWS platform come into play. &lt;/p&gt;

&lt;p&gt;In this blog post, we will explore the key skills and experiences required for a QA Engineer focusing on test automation in a cloud environment, specifically AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test planning and execution
&lt;/h2&gt;

&lt;p&gt;The ability to create comprehensive test plans and perform manual testing is vital. Additionally, the creation and execution of automated tests are essential skills in ensuring efficiency and accuracy in the QA process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Programming or scripting language proficiency
&lt;/h2&gt;

&lt;p&gt;A QA Engineer should be proficient in at least one programming or scripting language such as Java, GoLang, Bash, or Python. This proficiency enables them to write and maintain test automation scripts, making the QA process more efficient and scalable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experience with Cloud technologies
&lt;/h2&gt;

&lt;p&gt;To excel in the role of a QA Engineer in the cloud domain, it is crucial to possess relevant experience with cloud technology. This experience provides a solid foundation and understanding of the unique challenges and intricacies associated with cloud-based systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment and troubleshooting of SaaS in AWS
&lt;/h2&gt;

&lt;p&gt;A QA Engineer should be well-versed in the deployment and troubleshooting processes of Software as a Service (SaaS) applications on AWS. This involves understanding the AWS infrastructure, managing resources, and effectively resolving issues that may arise during the deployment and operation of SaaS solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  DevOps tools in a cloud environment
&lt;/h2&gt;

&lt;p&gt;QA Engineers should be comfortable working with various DevOps tools commonly used in a cloud environment. This includes tools such as &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;, &lt;a href="https://helm.sh/" rel="noopener noreferrer"&gt;Helm Charts&lt;/a&gt;, &lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;, and &lt;a href="https://www.sonarsource.com/products/sonarqube/" rel="noopener noreferrer"&gt;SonarQube&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;These tools facilitate efficient development, testing, and deployment processes, enabling seamless collaboration between development and operations teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD pipelines and IaC
&lt;/h2&gt;

&lt;p&gt;Familiarity with CI/CD pipelines such as &lt;a href="https://aws.amazon.com/codepipeline/" rel="noopener noreferrer"&gt;AWS CodePipeline&lt;/a&gt; and IaC (Infrastructure as a Service) such as AWS &lt;a href="https://aws.amazon.com/cloudformation/" rel="noopener noreferrer"&gt;CloudFormation&lt;/a&gt; or &lt;a href="https://www.terraform.io/" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; is crucial for streamlining the software development and deployment processes. &lt;/p&gt;

&lt;p&gt;CI/CD pipelines allow for continuous integration and delivery, ensuring that changes are thoroughly tested before being deployed. IaC, on the other hand, simplifies infrastructure management, making it easier to provision and configure resources in a cloud environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building and maintaining systems on Kubernetes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; has emerged as a leading container orchestration platform. QA Engineers with experience in building and maintaining systems on Kubernetes possess the necessary skills to ensure the smooth operation and scalability of applications in a cloud environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding microservices architectures
&lt;/h2&gt;

&lt;p&gt;Having knowledge about &lt;a href="https://aws.amazon.com/microservices/" rel="noopener noreferrer"&gt;microservices&lt;/a&gt; architectures, &lt;a href="https://aws.amazon.com/serverless/" rel="noopener noreferrer"&gt;serverless&lt;/a&gt;, and related concepts is highly beneficial. This includes understanding &lt;a href="https://aws.amazon.com/solutions/resilience/chaos-engineering/" rel="noopener noreferrer"&gt;chaos testing&lt;/a&gt; techniques with &lt;a href="https://aws.amazon.com/fis/" rel="noopener noreferrer"&gt;AWS Fault Injection Simulator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Microservices play a crucial role in modern cloud-based applications, and being well-versed in their architectures and associated practices allows QA Engineers to test and validate the system effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional useful skills
&lt;/h2&gt;

&lt;p&gt;The following skills and experiences would be considered advantageous:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AWS certification&lt;/strong&gt; - Possessing an &lt;a href="https://aws.amazon.com/certification/" rel="noopener noreferrer"&gt;AWS certification&lt;/a&gt; demonstrates a deep understanding of the AWS platform and its services, further validating the QA Engineer's expertise in cloud testing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agile development methodology&lt;/strong&gt; - Familiarity with agile development methodologies, such as Scrum or Kanban, enhances collaboration, adaptability, and iterative development practices within a QA team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security and secrets management&lt;/strong&gt; - Experience with tools like &lt;a href="https://aws.amazon.com/secrets-manager/" rel="noopener noreferrer"&gt;AWS Secrets Manager&lt;/a&gt;, &lt;a href="https://aws.amazon.com/kms/" rel="noopener noreferrer"&gt;AWS Key Management Service (KMS)&lt;/a&gt;, &lt;a href="https://aws.amazon.com/waf/" rel="noopener noreferrer"&gt;AWS Web Application Firewall (WAF)&lt;/a&gt; for secure secrets management and overall system security adds an extra layer of expertise to the QA Engineer's skill set.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generative AI services&lt;/strong&gt; - Knowledge of Artificial Intelligence (AI) services such as &lt;a href="https://aws.amazon.com/codewhisperer/" rel="noopener noreferrer"&gt;Amazon CodeWhisperer&lt;/a&gt; generates Code in Python, Java, JavaScript, TypeScript, SQL, and 10 More Language which increase the testing and QA productivity and reduce the development hours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud SQL and NoSQL databases&lt;/strong&gt; - Experience with cloud SQL databases, such as &lt;a href="https://aws.amazon.com/rds/" rel="noopener noreferrer"&gt;Amazon RDS&lt;/a&gt; and &lt;a href="https://aws.amazon.com/dynamodb" rel="noopener noreferrer"&gt;Amazon DynamoDB&lt;/a&gt; enable QA Engineers to thoroughly test and validate the data storage and retrieval processes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitoring solutions&lt;/strong&gt; - Familiarity with monitoring solutions like &lt;a href="https://aws.amazon.com/cloudwatch/" rel="noopener noreferrer"&gt;Amazon CloudWatch&lt;/a&gt; and &lt;a href="https://aws.amazon.com/cloudtrail/" rel="noopener noreferrer"&gt;AWS CloudTrail&lt;/a&gt; allows QA Engineers to proactively identify and address performance issues, ensuring optimal system functionality.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Being a QA Engineer focused on test automation in a cloud environment, particularly on AWS, requires a diverse skill set encompassing cloud technology, test planning and execution, proficiency in DevOps tools, knowledge of microservices architectures, and programming/scripting language expertise.&lt;/p&gt;

&lt;p&gt;By continuously adapting to the evolving landscape of cloud computing, QA Engineers play a crucial role in ensuring the quality, performance, and reliability of cloud-based systems, contributing to the success of organizations embracing the cloud revolution.&lt;/p&gt;

&lt;p&gt;Happy testing!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>qa</category>
      <category>testing</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Unveiling my first book "Mobile DevOps Playbook": Your Handbook for Faster, High-Quality Mobile App 📱🚀</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Thu, 27 Apr 2023 08:41:21 +0000</pubDate>
      <link>https://dev.to/moataznabil/unveiling-my-first-book-mobile-devops-playbook-your-handbook-for-faster-high-quality-mobile-app-28m3</link>
      <guid>https://dev.to/moataznabil/unveiling-my-first-book-mobile-devops-playbook-your-handbook-for-faster-high-quality-mobile-app-28m3</guid>
      <description>&lt;p&gt;Mobile app developers know that staying ahead in the game means delivering high-quality applications quickly and efficiently. As someone who has experienced the challenges of mobile app development firsthand, I am excited to share that my first book, titled , "&lt;a href="https://www.amazon.com/Mobile-DevOps-Playbook-accelerating-high-quality/dp/1803242558/ref=sr_1_1?keywords=9781803242552&amp;amp;qid=1680253844&amp;amp;sr=8-1" rel="noopener noreferrer"&gt;Mobile DevOps Playbook: A practical guide for accelerating the delivery of high-quality mobile applications.&lt;/a&gt;, has been published by &lt;a href="https://www.packtpub.com/" rel="noopener noreferrer"&gt;Packt&lt;/a&gt;! The book is now open for pre-orders globally on Amazon. 🎉&lt;/p&gt;

&lt;p&gt;In this post, I'll provide a brief overview of the book, discuss some key topics covered, and explain how "Mobile DevOps Playbook" can help you and your team elevate your mobile app development process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1citijoe5uakg2sfewx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1citijoe5uakg2sfewx.png" alt="1" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Book Overview:
&lt;/h3&gt;

&lt;p&gt;"Mobile DevOps Playbook" is a comprehensive guide that dives into the world of Mobile DevOps, offering practical strategies, tools, and techniques to speed up the delivery of top-notch mobile applications. Published by &lt;a href="https://www.packtpub.com/" rel="noopener noreferrer"&gt;PACKT Publishing&lt;/a&gt;, this book is tailored for mobile app developers, DevOps practitioners, and teams aiming to optimize their app development and deployment processes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Topics:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Grasping Mobile DevOps: Understand the fundamentals of Mobile DevOps, the advantages of embracing this approach, and how it diverges from traditional DevOps.&lt;/li&gt;
&lt;li&gt;CI/CD for Mobile Apps: Learn to implement Continuous Integration and Continuous Deployment pipelines in your mobile app development process to boost efficiency and minimize errors.&lt;/li&gt;
&lt;li&gt;Mobile Test Automation: Uncover best practices for designing and managing automated tests to guarantee your mobile apps are dependable, secure, and fulfill user expectations.&lt;/li&gt;
&lt;li&gt;App Performance Monitoring &amp;amp; Optimization: Recognize the significance of monitoring your mobile apps' performance, pinpoint bottlenecks, and explore tools available for optimizing app performance.&lt;/li&gt;
&lt;li&gt;Effective Team Collaboration: Delve into strategies for nurturing collaboration within your team, such as clear communication, shared code repositories, and code review practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits of "Mobile DevOps Playbook":
&lt;/h3&gt;

&lt;p&gt;Whether you're a DevOps Engineer wanting to learn more about Mobile DevOps to build effective processes for releasing mobile apps quickly and frequently, this book is perfect for you. Furthermore, the book is an excellent resource for Mobile Developers, Mobile Release Managers, Mobile Architects, Mobile Platform Engineers, and QA Engineers who are involved in mobile app development, "Mobile DevOps Playbook" offers valuable insights and practical advice to help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Boost your team's efficiency and productivity&lt;/li&gt;
&lt;li&gt;Cut down the time needed to deliver exceptional mobile applications&lt;/li&gt;
&lt;li&gt;Identify and tackle common challenges in mobile app development&lt;/li&gt;
&lt;li&gt;Streamline your app development and deployment processes using industry-standard tools and techniques&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion:
&lt;/h3&gt;

&lt;p&gt;I'm excited to share my expertise and experience in mobile app development and DevOps through "Mobile DevOps Playbook." I hope this book will be a useful resource for developers and teams looking to supercharge their mobile app delivery process.&lt;/p&gt;

&lt;p&gt;Grab your copy of "Mobile DevOps Playbook: A practical guide for accelerating the delivery of high-quality mobile applications" on &lt;a href="https://www.amazon.com/Mobile-DevOps-Playbook-accelerating-high-quality/dp/1803242558/ref=sr_1_1?keywords=9781803242552&amp;amp;qid=1680253844&amp;amp;sr=8-1" rel="noopener noreferrer"&gt;Amazon&lt;/a&gt; now and embark on a journey towards a more effective and efficient mobile app development process!&lt;/p&gt;

&lt;p&gt;Happy coding and reading! 📚💻&lt;/p&gt;

&lt;p&gt;Moataz Nabil&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>devops</category>
      <category>cicd</category>
      <category>books</category>
    </item>
    <item>
      <title>The Most Beneficial AWS Services for QA Engineers</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Tue, 27 Dec 2022 17:11:09 +0000</pubDate>
      <link>https://dev.to/aws-builders/the-most-beneficial-aws-services-for-qa-engineers-40f7</link>
      <guid>https://dev.to/aws-builders/the-most-beneficial-aws-services-for-qa-engineers-40f7</guid>
      <description>&lt;p&gt;QA engineers can use AWS services to automate and streamline their testing processes and ensure that their applications are ready for deployment.&lt;/p&gt;

&lt;p&gt;The purpose of this article is to highlight the most beneficial AWS services for QA and Test engineers and why they are beneficial. &lt;/p&gt;

&lt;p&gt;Sounds interesting! Let's get started&lt;/p&gt;

&lt;h2&gt;
  
  
  Compute Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1- Amazon EC2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon EC2 (Elastic Compute Cloud) is a web service that provides resizable computing capacity in the cloud. It allows QA engineers to test applications and systems in a variety of environments, including different operating systems, hardware configurations, and network configurations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7wh03q5kf7ag9w2sdgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7wh03q5kf7ag9w2sdgp.png" alt="1" width="800" height="305"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A benefit of using Amazon EC2 for QA is the ability to quickly spin up and down testing environments. In this way, QA engineers can efficiently test new features, fix bugs, and perform regression testing.&lt;/p&gt;

&lt;p&gt;Furthermore, Amazon EC2 offers a wide range of instance types and sizes. This allows QA engineers to choose the right amount of computing power and memory for their testing needs. A variety of storage options are also available, including Amazon EBS (Elastic Block Store) for persistent data storage and Amazon S3 (Simple Storage Service) for object storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2- Amazon Lightsail&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Amazon Lightsail cloud computing platform lets developers and businesses manage virtual private servers (VPSs). The service offers a simple, scalable solution for hosting websites, applications, and data at a lower cost than Amazon Web Services (AWS).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxju3w6osolwkoyhxto4c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxju3w6osolwkoyhxto4c.png" alt="2" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the main benefits of using Amazon Lightsail for QA is the ability to set up and tear down environments quickly and easily. This means that QA engineers can test different configurations and environments without the need for physical hardware or lengthy setup processes.&lt;/p&gt;

&lt;p&gt;You can use Amazon Lightsail to create an e-commerce website for test automation practices, more details can be found here &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/aws-builders/create-your-ecommerce-website-for-test-automation-using-amazon-lightsail-and-prestashop-17pg"&gt;Create your e-commerce website for test automation using Amazon Lightsail and PrestaShop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3- AWS Lambda&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Lambda is a serverless computing platform that lets you run code in response to specific events. Lambda allows QA engineers to test their code and applications without having to setup and maintain their own infrastructure in a serverless environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtt9h3qmik3fqhgoa0qj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtt9h3qmik3fqhgoa0qj.jpg" alt="3" width="720" height="405"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source &lt;a href="https://aws.amazon.com/blogs/devops/serverless-ui-testing-using-selenium-aws-lambda-aws-fargate-and-aws-developer-tools/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lambda requires some knowledge of programming and cloud computing. Besides setting up an AWS account, you will also need to install the necessary AWS CLI. After setting up your environment, you can create a Lambda function and specify the events or triggers that will invoke it. As soon as the specified events or triggers occur, your Lambda function will execute the code you wrote.&lt;/p&gt;

&lt;p&gt;AWS Lambda can be used to run the automated test scripts with Selenium WebDriver, Playwright or Cypress on scale on the cloud quickly and efficiently. &lt;/p&gt;

&lt;h2&gt;
  
  
  Containers Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;4- Amazon Elastic Container Service (ECS)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Elastic Container Service (ECS) is a fully managed container orchestration service that allows QA engineers to run and manage Docker containers on AWS. With ECS, QA engineers can easily test the containerized applications with minimal effort.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl86lyv9o9hamryg4uiw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl86lyv9o9hamryg4uiw.png" alt="4" width="800" height="371"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5- Amazon EKS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;EKS or Elastic Container Service for Kubernetes is a managed service that makes it easy to deploy, manage, and scale containerized applications using Kubernetes. EKS is fully compatible with the open-source Kubernetes API, so you can use the same tools and plugins that you use with any other Kubernetes deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzs5go4542hq1k4fgwkew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzs5go4542hq1k4fgwkew.png" alt="5" width="800" height="345"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a QA engineer, you can use EKS to test your applications in a Kubernetes environment without having to set up and maintain your own Kubernetes cluster. EKS takes care of the underlying infrastructure, so you can focus on testing your applications.&lt;/p&gt;

&lt;p&gt;EKS offers a number of features that can be useful for QA engineers, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automatic scaling: EKS automatically scales your clusters up or down based on demand, so you can test your applications under a range of load conditions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High availability: EKS automatically replicates your applications across multiple availability zones to ensure high availability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integration with other AWS services: EKS integrates with other AWS services, such as Amazon RDS and Amazon EBS, allowing you to easily deploy and manage your applications in the cloud.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Application Integration Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;6- Amazon SQS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Simple Queue Service (SQS) is a fully managed message queueing service that enables you to decouple and scale microservices, distributed systems, and serverless applications. It makes it easy to build and maintain asynchronous workflows, allowing you to send, store, and receive messages between services, without having to worry about the underlying infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fca7ltcnfm02g07scrvm4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fca7ltcnfm02g07scrvm4.png" alt="6" width="800" height="265"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a QA engineer, you can use Amazon SQS to test various aspects of your application's performance and reliability. Here are a few examples of how you can use Amazon SQS in your QA testing:&lt;/p&gt;

&lt;p&gt;Load testing: You can use Amazon SQS to send a large number of messages to your application, to test how it handles high levels of traffic and concurrent requests. This can help you identify bottlenecks and performance issues, and optimize your application for scalability.&lt;/p&gt;

&lt;p&gt;Integration testing: You can use Amazon SQS to simulate different service dependencies, and test how your application interacts with other components of your system. This can help you ensure that your application integrates seamlessly with other services and that it can handle failures and other errors gracefully.&lt;/p&gt;

&lt;p&gt;Automated testing: You can use Amazon SQS to automate your testing processes, by setting up triggers and rules to run tests based on certain conditions. For example, you can use Amazon SQS to trigger a test whenever a new message is added to the queue, or whenever a message is processed by your application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7- Amazon SNS&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Amazon Simple Notification Service (SNS) is a cloud-based messaging service that enables QA engineers to send and receive messages and notifications between distributed systems, servers, and clients. With SNS, QA engineers can quickly test and debug the communication and messaging capabilities of their applications and systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuks0dzrqxdnu57vfgt0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuks0dzrqxdnu57vfgt0o.png" alt="7" width="800" height="273"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some potential use cases includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sending notifications to a QA team when a new build or release is ready for testing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Receiving alerts when there are issues or failures in the application during testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sending messages to trigger automated testing scripts or processes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Receiving notifications when certain events or thresholds are reached in the application (e.g. high traffic, error rate, etc.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SNS offers a range of delivery options, including SMS, email, mobile push notifications, and more, making it easy for QA engineers to test and validate the messaging capabilities of their applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;8- Amazon RDS&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;RDS or Relational Database Service is a fully managed database service provided by Amazon Web Services (AWS) that makes it easier to set up, operate, and scale a relational database in the cloud. It supports a variety of popular database engines, including MySQL, PostgreSQL, and Microsoft SQL Server, and allows you to choose the configuration and resource capacity that best fits your needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiblg86fidhbvgxwmrbvi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiblg86fidhbvgxwmrbvi.png" alt="8" width="800" height="314"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can use Amazon RDS to set up test environments for your applications, run database performance tests, and perform data integrity checks. Some of the tasks you might perform when testing an application with Amazon RDS include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Setting up multiple test environments with different database engines and configurations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Populate test databases with sample data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Running database queries and analyzing the results to verify the accuracy and performance of the application&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performing database backups and restores to test the reliability and recoverability of the application&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensuring data integrity by running tests to verify the correctness of database transactions and constraints&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Storage Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;09- Amazon S3 (Simple Storage Service)&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Amazon S3 (Simple Storage Service) is a cloud storage service provided by AWS. It is designed to store and retrieve large amounts of data quickly and efficiently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2y5jfotsicxpp5bvvhpg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2y5jfotsicxpp5bvvhpg.png" alt="9" width="800" height="301"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Amazon S3 can be used to store test data and test results. This allows QA engineers to easily access and analyze data from different test environments and iterations. For instance you can send use generate test reports using Allure report on the CI server and send the files to S3 bucket to use it as a static website to displaying the test results. &lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Tools
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;10- AWS CodeCommit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS CodeCommit is a fully managed version control service that makes it easy for QA engineers to store, track, and collaborate on code. With CodeCommit, QA engineers can easily create and manage Git repositories, view and compare code changes, and review and merge code changes with others. CodeCommit also integrates seamlessly with other AWS services, such as AWS CodeBuild and AWS CodePipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flng7v6iubqzvvxueuztd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flng7v6iubqzvvxueuztd.png" alt="10" width="800" height="373"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11- AWS CodeBuild&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CodeBuild is a fully managed build service that compiles source code, runs tests, and produces artifacts that are ready for deployment. QA engineers can use CodeBuild to automate the build and test process for their applications. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgocvcg9biw808fwuycsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgocvcg9biw808fwuycsl.png" alt="22" width="800" height="235"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This service allows you to build, test, and deploy your applications quickly and efficiently. You can use it to automate the build process, run tests, and deploy your applications to various environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12- AWS CodePipeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CodePipeline is a continuous delivery service from AWS that helps automate the build, test, and release process. QA engineers can use CodePipeline to set up automated testing as part of the release process, ensuring that code changes are thoroughly tested before they are deployed to production. It allows for automated testing and deployment of code changes, ensuring the quality and reliability of applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fov6xu5sji5und6olhhod.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fov6xu5sji5und6olhhod.jpg" alt="44" width="800" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Front-end Web &amp;amp; Mobile Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;13- AWS Device Farm&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;AWS Device Farm is a cloud-based testing service that allows you to test your mobile and web applications on a wide range of devices. It provides access to a variety of physical devices for testing applications on real hardware.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F513vqnujmofjv5l9pie1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F513vqnujmofjv5l9pie1.png" alt="66" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can use Device Farm to test your applications on real devices, including smartphones, tablets, and desktop computers, running different versions of operating systems and browsers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtak4yvyo6oaq7s6tov8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtak4yvyo6oaq7s6tov8.png" alt="55" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image Source - AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Device Farm offers a number of features that can be useful for QA engineers, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Wide range of devices: Device Farm has a large pool of devices that you can choose from, including popular smartphones and tablets running Android, iOS, and other operating systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remote access: Device Farm allows you to remotely access the devices and interact with them as if you were physically using them, making it easier to debug and troubleshoot issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Supports different test automation framework such as XCTest&lt;br&gt;
XCTest UI for iOS, Instrumentation for Android, or cross-platform such as Appium. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also there are built-in testing types such as UI Automator, explorer (Android) and fuzz (Android and iOS).&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/aws-builders/create-your-ecommerce-website-for-test-automation-using-amazon-lightsail-and-prestashop-17pg"&gt;Create your e-commerce website for test automation using Amazon Lightsail and PrestaShop&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/aws-builders/run-your-security-static-analysis-tests-for-android-apps-on-the-cloud-with-mobsf-and-aws-4cam"&gt;Run your security static analysis tests for Android apps on the cloud with MobSF and AWS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/aws-builders/getting-started-with-aws-device-farm-and-selenium-webdriver-2nmb"&gt;Getting started with AWS Device Farm and Selenium WebDriver&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/aws-builders/why-software-test-engineers-should-know-about-cloud-computing-1d0n"&gt;Why Software Test Engineers should know about Cloud Computing?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for reading and happy testing!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>qa</category>
      <category>testing</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Getting started with Appium 2.0: Your beginner’s guide</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Tue, 20 Dec 2022 14:59:25 +0000</pubDate>
      <link>https://dev.to/moataznabil/getting-started-with-appium-20-your-beginners-guide-3m32</link>
      <guid>https://dev.to/moataznabil/getting-started-with-appium-20-your-beginners-guide-3m32</guid>
      <description>&lt;p&gt;&lt;em&gt;A hands-on guide to help you to get started with Appium 2.0, the new features, and how to install and use it locally or on Bitrise.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Appium?
&lt;/h2&gt;

&lt;p&gt;Appium is an open-source project and ecosystem of related software, designed to facilitate UI automation of many app platforms, especially for mobile apps such as iOS, Android, and Flutter.&lt;/p&gt;

&lt;p&gt;Using Appium, you can automate your UI testing across any number of platforms in a standard way. Many tools allow UI automation on platforms, but these are typically platform-specific native tools such as Espresso for Android and XCUITest for iOS and require specific programming language knowledge and toolchains. &lt;/p&gt;

&lt;p&gt;The Appium framework aims to integrate all these automation technologies into a stable interface accessible through the most popular programming languages including Java, Python, Ruby, C#, and Javascript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of Appium 2.0
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://appium.github.io/appium/docs/en/2.0/intro/" rel="noopener noreferrer"&gt;Appium 2.0&lt;/a&gt; (still beta) reenvisions Appium as a platform where “drivers” and “plugins” can be easily created and shared independently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyaetjp5ijhycf8hshmt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyaetjp5ijhycf8hshmt.png" alt="1" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Drivers:&lt;/strong&gt; gives you the ability to install and work with de-coupled drivers based on your application platform (iOS, Android, Windows OS, Flutter, such as Espresso driver  “appium driver install espresso”.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugins:&lt;/strong&gt; gives you the ability to modify the Appium framework by adding new features via plugins and through integrations with other technologies such as the images plugin: “appium plugin install images”, then activate the plugin with your server by “appium --use-plugins=images”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appium Desktop:&lt;/strong&gt; is still available, but now comes in two &lt;strong&gt;packages:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Appium Desktop (Server) &lt;/li&gt;
&lt;li&gt;Appium Inspector&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6blzs20z7166kf0v14bm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6blzs20z7166kf0v14bm.png" alt="2" width="744" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With Appium 2.0, you should also ensure you’re sending W3C standard capabilities within your test code such as the following capabilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "platformName": "Android",
  "appium:platformVersion": "9",
  "appium:deviceName": "emulator-5554",
  "appium:automationName": "Espresso",
  "appium:app": "app-debug.apk"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting started with Appium 2.0
&lt;/h2&gt;

&lt;p&gt;Before getting started with Appium v2 you need to know the &lt;a href="https://appium.github.io/appium/docs/en/2.0/intro/requirements/" rel="noopener noreferrer"&gt;requirements&lt;/a&gt;, then with Appium 2.0 you need to follow the following steps:&lt;/p&gt;

&lt;p&gt;Step 1: Install Appium v2&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -g appium@next&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Currently, you must use appium@next instead of just appium. Once Appium 2.0 has been officially published, you can simply use appium.&lt;/p&gt;

&lt;p&gt;To make sure which appium version is installed, run the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;appium -v&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The output should be &lt;code&gt;2.0.0-beta.46&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After installing Appium v2 you will have the ability to extend the CLI with plugin and driver commands. &lt;/p&gt;

&lt;p&gt;Step 2: Install an Appium driver and its dependencies&lt;br&gt;
To install the Appium driver and its dependencies, we'll be using the &lt;a href="https://github.com/appium/appium-espresso-driver" rel="noopener noreferrer"&gt;Espresso&lt;/a&gt;, &lt;a href="https://github.com/appium/appium-xcuitest-driver" rel="noopener noreferrer"&gt;XCUITest&lt;/a&gt;, and &lt;a href="https://github.com/appium-userland/appium-flutter-driver#installation" rel="noopener noreferrer"&gt;Flutter&lt;/a&gt; drivers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;appium driver install espresso
appium driver install xcuitest
appium driver install flutter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To make sure that all the drivers are installed successfully, run the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;appium driver list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cp53bu60fkbcaa795ea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cp53bu60fkbcaa795ea.png" alt="3" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: Install the plugins&lt;br&gt;
To install the plugins, run the following command to get a list of the available plugins and then install any of them: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;appium plugin list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe46431mhbdhr52eug80o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe46431mhbdhr52eug80o.png" alt="4" width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To install any plugin, such as images, use the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;appium plugin install images&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaomku3k4hjzy4fmblnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaomku3k4hjzy4fmblnv.png" alt="5" width="800" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And to use it with the Appium server, use the following command: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;appium --use-plugins=images &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To run the Appium Server, use the Server GUI or the command line, for example: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;appium server -ka 800&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or the GUI application:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9lzcg8ofhm21glyhaap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9lzcg8ofhm21glyhaap.png" alt="6" width="800" height="735"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you want to inspect the elements, you need to open the Inspector application:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhr5wurvmn3ajg56h011s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhr5wurvmn3ajg56h011s.png" alt="7" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 4: Install the Appium client library&lt;br&gt;
Install an Appium client library in your language or choice (we’ll be using the Java client with Maven).&lt;/p&gt;

&lt;p&gt;Step 5: Run an Appium automation script&lt;br&gt;
Write and run a simple Appium automation script using a sample application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class AppiumAndroidTest {
    public static AppiumDriver driver;

    @BeforeClass
    public void Android_setUp() throws MalformedURLException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("appium:automationName", "espresso");
        capabilities.setCapability("appium:platformVersion", "9");
        capabilities.setCapability("appium:deviceName", "Android Emulator");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("appium:app", System.getProperty("user.dir") + "/apps/app-debug.apk");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723"), capabilities);
    }

    @Test
    public void calcDemo(){
        driver.findElement(By.id("buttonFive")).click();
        driver.findElement(By.id("buttonAdd")).click();
        driver.findElement(By.id("buttonFour")).click();
        driver.findElement(By.id("buttonEqual")).click();
    }

    @AfterClass

    public static void tearDown() {
        if (null != driver) {
            driver.quit();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find the full project in this &lt;a href="https://github.com/moatazeldebsy/bitrise-appium/tree/demo" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Now, you can run your project locally, but as you know it’s required to have an Android Emulator and iOS Simulator installed. &lt;/p&gt;

&lt;p&gt;The Appium Troubleshooting Guide&lt;br&gt;
Using appium-doctor, you can verify your installation and manually install anything that is missing if necessary.&lt;/p&gt;

&lt;p&gt;You will notice that &lt;a href="https://www.npmjs.com/package/appium-doctor" rel="noopener noreferrer"&gt;appium-doctor&lt;/a&gt; is deprecated &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ka9c81775zz9jy1vki7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ka9c81775zz9jy1vki7.png" alt="8" width="800" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you can install it using the following command as mentioned here:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install @appium/doctor -g&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can check the iOS and Android setup by running the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;appium-doctor &lt;br&gt;
&lt;/code&gt;&lt;br&gt;
If something is wrong, you can fix it manually and run the command again.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54exdybb0gd6j7u65gro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54exdybb0gd6j7u65gro.png" alt="9" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F790ir3reywk2g8ymcot7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F790ir3reywk2g8ymcot7.png" alt="10" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are facing issues with Appium with iOS apps — or can’t run your tests on iOS real devices — check out how to set up iOS real devices and also Enable the Developer Mode on the device.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md" rel="noopener noreferrer"&gt;Setting up iOS Real Devices Tests with XCUITest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device" rel="noopener noreferrer"&gt;Enabling Developer Mode on a device&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are facing a problem with the WebDriverAgent — or can’t be installed on the device — you can also try to locate the Xcode project. Add your team account in the code signing setting and try to build the app for an iOS device to make sure that there is no problem. &lt;/p&gt;

&lt;p&gt;You can use the following command to find the project directory:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;echo "$(dirname "$(find "$HOME/.appium" -name WebDriverAgent.xcodeproj)")"&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;And the output will give you the path of the project&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmouifcdf7jk9p3mlgdh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmouifcdf7jk9p3mlgdh.png" alt="11" width="800" height="19"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the project in Xcode, add a team or your developer account and build the project to make sure that there is no issue with the WebDirverAgent. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2q0up8slwymgeo2exzsg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2q0up8slwymgeo2exzsg.png" alt="12" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Migration from Appium 1.x to Appium 2.x
&lt;/h2&gt;

&lt;p&gt;Here is a &lt;a href="https://appium.github.io/appium/docs/en/2.0/guides/migrating-1-to-2/" rel="noopener noreferrer"&gt;guide&lt;/a&gt; that walks you through some potential breaking changes and other useful tips for migrating your test code from Appium 1.x to Appium 2.x.&lt;/p&gt;

&lt;h2&gt;
  
  
  Utilize Bitrise's CI/CD Workflow to run Appium tests
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.bitrise.io/" rel="noopener noreferrer"&gt;Bitrise&lt;/a&gt; and &lt;a href="https://blog.bitrise.io/post/getting-started-with-appium-bitrise-for-android-apps" rel="noopener noreferrer"&gt;Appium&lt;/a&gt; integrate seamlessly. You can run your test automation with Appium on virtual devices in the cloud without needing to use a 3rd party cloud service. &lt;/p&gt;

&lt;p&gt;For testing mobile applications on Bitrise and Appium, you’ll be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrate test automation into your CI/CD pipelines.&lt;/li&gt;
&lt;li&gt;Multiple platforms can be used to scale your existing Appium testing.&lt;/li&gt;
&lt;li&gt;Using the &lt;a href="https://devcenter.bitrise.io/en/testing/test-reports.html" rel="noopener noreferrer"&gt;Test Report add-on&lt;/a&gt; to find and fix bugs faster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The integration is simple and straightforward, I created a Bitrise integration step to simplify the installation of the Appium Server, Drivers (XCUITest, Espresso, and Flutter) and run the server as a background task. &lt;/p&gt;

&lt;p&gt;You need only to add the &lt;a href="https://www.bitrise.io/integrations/steps/appium-server" rel="noopener noreferrer"&gt;Step&lt;/a&gt; in your Bitrise Workflow and in case you need to run UI tests on Android you need to spin up the emulator first but with iOS, the execution will initialize the Simulator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxbdq0635yvltpooqnt0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxbdq0635yvltpooqnt0.png" alt="13" width="652" height="1398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3nn423i0mosof6ipag0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3nn423i0mosof6ipag0.png" alt="14" width="800" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the UI tests via the Maven command&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1sdnb0lfpy8y1ow4bn2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1sdnb0lfpy8y1ow4bn2.png" alt="15" width="800" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the Appium Log to the Deploy directory to view it via the Artifacts section&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdn7d3aewkqkguqeq3e05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdn7d3aewkqkguqeq3e05.png" alt="16" width="800" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, export the test results to the Test Report add-on. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fzurbjdh3kjjcij9sks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fzurbjdh3kjjcij9sks.png" alt="17" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the Build and the results should be like the following images.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qbz0any8k6033mj5lm2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qbz0any8k6033mj5lm2.png" alt="18" width="800" height="769"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fociylw89w3z6ljgmrxwp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fociylw89w3z6ljgmrxwp.png" alt="19" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjctb33xipo93iqvgsjlr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjctb33xipo93iqvgsjlr.png" alt="20" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faliiudamdq3h6vsgd66h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faliiudamdq3h6vsgd66h.png" alt="21" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr92knu6u1l694yozu6e3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr92knu6u1l694yozu6e3.png" alt="22" width="800" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkog8jaa18ppkhn3z4cu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkog8jaa18ppkhn3z4cu.png" alt="23" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations 🎉, you have successfully run your Android and iOS test cases with Appium v2 on Bitrise. &lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;In this section, you'll find links to additional Appium resources around the web, including my Appium course with Test Automation University.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://appium.github.io/appium/docs/en/2.0/resources/" rel="noopener noreferrer"&gt;Appium Resources&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>mobile</category>
      <category>qa</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Getting started with Maestro: The new mobile UI testing framework from Mobile.dev</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Fri, 09 Dec 2022 15:55:58 +0000</pubDate>
      <link>https://dev.to/moataznabil/getting-started-with-maestro-the-new-mobile-ui-testing-framework-from-mobiledev-2n0k</link>
      <guid>https://dev.to/moataznabil/getting-started-with-maestro-the-new-mobile-ui-testing-framework-from-mobiledev-2n0k</guid>
      <description>&lt;p&gt;This article shows you how to use the Maestro UI testing framework to write the tests and run them locally or on the cloud.&lt;/p&gt;

&lt;p&gt;Today, test automation is not a nice feature, especially when it comes to mobile apps since there is a lot of competition on the market and we are increasingly relying on mobile apps, which adds more pressure to release quality mobile apps quickly.&lt;/p&gt;

&lt;p&gt;And also if you are planning to implement CI/CD pipelines in your team, you need to know that Test Automation now is a vital part of this process and without it, you can’t release your products frequently.&lt;/p&gt;

&lt;p&gt;There are many tools and frameworks available, from native to cross-platform, and you should choose one that suits your team and application.&lt;/p&gt;

&lt;p&gt;Because of that, in this article, I’d like to share my thoughts about the new mobile UI testing framework from &lt;a href="https://mobile.dev/" rel="noopener noreferrer"&gt;Mobile.dev&lt;/a&gt;, it’s &lt;a href="https://maestro.mobile.dev/" rel="noopener noreferrer"&gt;Maestro&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Sounds good! Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Maestro?
&lt;/h2&gt;

&lt;p&gt;Maestro is the simplest and most effective &lt;a href="https://github.com/mobile-dev-inc/maestro" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; mobile UI testing framework developed by &lt;a href="//Mobile.dev"&gt;Mobile.dev&lt;/a&gt;. It’s built on learnings from its predecessors (Appium, Espresso, UIAutomator, XCTest) and allows you to easily define and test your Flows (the user journey in the app or you can say the E2E scenarios). &lt;/p&gt;

&lt;p&gt;Maestro is yaml based which means you are defining the test flows inside a flow.yml file and can run it on the devices. &lt;/p&gt;

&lt;p&gt;Maestro has different features such as&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flakiness is tolerated by design. In Maestro, the unstable nature of mobile apps and devices is accommodated and UI elements are deconstructed to counter the instability.&lt;/li&gt;
&lt;li&gt;No need to call sleep() repeatedly in your tests. The Maestro knows that loading the content may take some time (for example: over the network) and waits for it automatically (but not too long).&lt;/li&gt;
&lt;li&gt;There is no need to compile anything because tests are interpreted. As your test files change, Maestro automatically reruns them.&lt;/li&gt;
&lt;li&gt;Maestro supports native (Android and iOS) and cross-platform mobile platforms (Flutter and React Native).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting started with Maestro
&lt;/h2&gt;

&lt;p&gt;You can install Maestro on macOS and Linux with the default install instructions but on Windows, you need to follow these steps. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Pre-requests:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For iOS, install the Facebook IDB tool:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew tap facebook/fb
brew install facebook/fb/idb-companion 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Booted Android Emulator.&lt;/li&gt;
&lt;li&gt;Booted iOS Simulator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then you can install the &lt;a href="https://maestro.mobile.dev/getting-started/installing-maestro#cli" rel="noopener noreferrer"&gt;Maestro CLI&lt;/a&gt; using the following command: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -Ls "https://get.maestro.Mobile.dev" | bash&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After that run the following command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export PATH="$PATH":"$HOME/.maestro/bin"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To make sure it’s installed successfully you can check the version with the following command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;maestro -v &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;With Maestro CLI you will have different options such as &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;test&lt;/strong&gt;: run the flow on your local machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cloud&lt;/strong&gt;: run the flow on Maestro Cloud.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;upload&lt;/strong&gt;: upload the app and the flow file to Maestro Cloud.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;query&lt;/strong&gt;: find an element that matches a condition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;hierarchy&lt;/strong&gt;: prints out the whole view hierarchy that is currently being shown in the app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;download-samples&lt;/strong&gt;: download sample projects for demonstration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;login&lt;/strong&gt;: login to your Maestro Cloud account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;logout&lt;/strong&gt;: logout from your Maestro Cloud account.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Writing your first Flow
&lt;/h2&gt;

&lt;p&gt;In my demo, I will use a simple login Android application but the same concepts can be applied to the other platforms because it’s the same logic. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4fiqnwttljjg7w0ieho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4fiqnwttljjg7w0ieho.png" alt="1" width="686" height="1546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1- Goto the application folder and create a new folder &lt;/p&gt;

&lt;p&gt;&lt;code&gt;mkdir .maestro &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2- Create a flow yaml file for example flow.yaml&lt;/p&gt;

&lt;p&gt;If you are using sublime&lt;/p&gt;

&lt;p&gt;&lt;code&gt;subl flow.yml &lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Or you can use touch command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;touch flow.yml &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnw2ftb5pyw03l3hqloa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnw2ftb5pyw03l3hqloa.png" alt="2" width="444" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The scenario that I need to cover is: &lt;/p&gt;

&lt;p&gt;1- Open the application, clear the state and stop the app if it’s running. &lt;br&gt;
2- Enter the Email in the textbox.&lt;br&gt;
3- Enter the Password in the textbox. &lt;br&gt;
4- Assert that the Login button is visible.&lt;br&gt;
5- Take a screenshot of the main screen.&lt;br&gt;
6- Click on the Login button.&lt;br&gt;
7- Take a screenshot after login in successfully. &lt;br&gt;
8- Stop the app.&lt;/p&gt;

&lt;p&gt;3- Open the flow yaml file to add the following steps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;appId: de.moataz.maestro.demo
---
- launchApp:
    appId: "de.moataz.maestro.demo"
    stopApp: true
    clearState: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above section, we launch the app using the appId and also stop it if it’s already running and clear the State to avoid flakiness as much as we can. &lt;/p&gt;

&lt;p&gt;To enter the Email and the Password we need to use InputText and TapOn commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- inputText: "moataz@gmail.com"
- tapOn: "password"
- inputText: "123456"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡TIP: You can use random Emails or Texts instead of entering them so the above code will look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- inputRandomEmail
- tapOn: "password"
- inputRandomText
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s complete the example with the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- assertVisible: "SIGN IN OR REGISTER"
- takeScreenshot: MainScreen
- tapOn: "SIGN IN OR REGISTER"
- takeScreenshot: LoggedInScreen
- stopApp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we are verifying that the Login button is visible or displayed and take a screenshot before clicking on the button then take another screenshot after this action and finally close or stop the application. &lt;/p&gt;

&lt;p&gt;So the full example will be like the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;appId: de.moataz.maestro.demo
---

- launchApp:
    appId: "de.moataz.maestro.demo"
    stopApp: true
    clearState: true

- inputRandomEmail
- tapOn: "password"
- inputRandomText
- assertVisible: "SIGN IN OR REGISTER"
- takeScreenshot: MainScreen
- tapOn: "SIGN IN OR REGISTER"
- takeScreenshot: LoggedInScreen
- stopApp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftor3myuoj54fja0m0icm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftor3myuoj54fja0m0icm.png" alt="3" width="800" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the Flow
&lt;/h2&gt;

&lt;p&gt;Before running the Flow you need to build and install the app on the Emulator/device by the following commands: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;./gradlew clean assembleDebug&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;code&gt;adb install app/build/outputs/apk/debug/app-debug.apk&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
If the app is successfully installed on the device you can run the Flow, from the command line using the following command: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;maestro test .maestro &lt;br&gt;
&lt;/code&gt;&lt;br&gt;
It will run the Flow, along with any other yaml files you have.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkroumfffhvhoutwqmna.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkroumfffhvhoutwqmna.gif" alt="4" width="606" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you will notice that the screenshots added to the project directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r3v3f0fxbtdysitwvu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r3v3f0fxbtdysitwvu0.png" alt="5" width="800" height="69"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the tests with a test report
&lt;/h2&gt;

&lt;p&gt;If you need a JUnit report for your tests you can do it easily by running the following command: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;maestro test --format junit .maestro &lt;br&gt;
&lt;/code&gt;&lt;br&gt;
And you will find a &lt;strong&gt;report.xml&lt;/strong&gt; file in the project directory. and if you need to override the file name you can use the following command: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;maestro test --format junit --output results.xml .maestro &lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Open the &lt;strong&gt;results.xml&lt;/strong&gt; file and you will find the results like the following screenshots &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F540t46myco5nrr0hyp0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F540t46myco5nrr0hyp0b.png" alt="6" width="800" height="114"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The report helps you to troubleshoot the Flow for example if you didn’t install the app you will find this failure. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc15s20c63yn0640bha16.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc15s20c63yn0640bha16.png" alt="7" width="800" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Furthermore, if you did not boot the emulator, you will see a list of the devices that are available on our machine and you can write the number to boot the device, as shown in the screenshot below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sfm4wkkmfgz0bbfgkfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sfm4wkkmfgz0bbfgkfd.png" alt="9" width="800" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8jgtj2uxpbi0h4602co.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8jgtj2uxpbi0h4602co.png" alt="8" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the Flow on Maestro Cloud
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloud.mobile.dev/" rel="noopener noreferrer"&gt;Maestro Cloud&lt;/a&gt; is another great feature from Mobile.dev for Maestro, which runs your Flows in the cloud without the need to configure any simulators or emulators. You can easily integrate Maestro Cloud into your existing CI workflows this way.&lt;/p&gt;

&lt;p&gt;Among the features of Maestro Cloud are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parallel Test Execution.&lt;/li&gt;
&lt;li&gt;Managed iOS simulators and Android emulators.&lt;/li&gt;
&lt;li&gt;Screen Recordings.&lt;/li&gt;
&lt;li&gt;Maestro Command Output.&lt;/li&gt;
&lt;li&gt;Application Logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You must first create an account here in order to run the Flows on Maestro Cloud because you need an API Key from the Console, click on your email and copy the API Key. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnzqc6lxltdtpshekehl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnzqc6lxltdtpshekehl.png" alt="10" width="466" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or you can log in from the command line using the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;maestro login &lt;br&gt;
&lt;/code&gt;&lt;br&gt;
And then run the test using the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;maestro cloud --apiKey   .maestro/ &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In my case, it will be like&lt;/p&gt;

&lt;p&gt;&lt;code&gt;maestro cloud app/build/outputs/apk/debug/app-debug.apk .maestro/ &lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Using this command, you will upload the binary file, startup Android Emulator, and run the Flow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l9xox1lm9r0k3fnbtei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2l9xox1lm9r0k3fnbtei.png" alt="11" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to the Maestro Cloud Console to check the run results as displayed in the following screenshots&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmscx7timew7zinhf5l24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmscx7timew7zinhf5l24.png" alt="12" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmw4wk2sdlftizbihhznh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmw4wk2sdlftizbihhznh.png" alt="13" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fir59pieobvdr51e0bat1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fir59pieobvdr51e0bat1.png" alt="14" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfj2hyc9hekono1wxyst.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfj2hyc9hekono1wxyst.png" alt="15" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition, you can check the app startup performance, app size, memory leak, or Flow performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftut2a2eugxexe00bjkmv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftut2a2eugxexe00bjkmv.png" alt="16" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjrg02nrz9ymdx2pso32q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjrg02nrz9ymdx2pso32q.png" alt="17" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F355z17vr9pjgy3bd337m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F355z17vr9pjgy3bd337m.png" alt="18" width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bitrise 💜 Maestro
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.bitrise.io/" rel="noopener noreferrer"&gt;Bitrise&lt;/a&gt; is a Mobile DevOps platform that helps mobile developers deliver secure mobile apps faster with good quality. Hence, we are happy to announce that the Maestro UI framework can now be run with Bitrise &lt;a href="https://www.bitrise.io/integrations/steps/maestro-cloud-upload" rel="noopener noreferrer"&gt;Integration&lt;/a&gt; from &lt;a href="https://www.mobile.dev/" rel="noopener noreferrer"&gt;Mobile.dev&lt;/a&gt; which allows you to run the Flows on &lt;a href="https://cloud.mobile.dev/" rel="noopener noreferrer"&gt;Maestro Cloud&lt;/a&gt; quickly and easily. &lt;/p&gt;

&lt;p&gt;It's time to get started!&lt;/p&gt;

&lt;p&gt;I’m assuming that you have your Android application configured on Bitrise, if you don’t have one you can follow the instructions &lt;a href="https://devcenter.bitrise.io/en/getting-started/getting-started-with-android-apps.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First, you need to add your Maestro Cloud API Key as a Secret on Bitrise.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Few73ehpxwbcyiu1vuk4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Few73ehpxwbcyiu1vuk4n.png" alt="19" width="466" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsb26kwm2qjolyi7adjvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsb26kwm2qjolyi7adjvx.png" alt="20" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the &lt;a href="https://www.bitrise.io/integrations/steps/maestro-cloud-upload" rel="noopener noreferrer"&gt;Maestro Integration Step&lt;/a&gt; and configure the input configuration. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mvcjmbpfvw726gzsfte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mvcjmbpfvw726gzsfte.png" alt="21" width="766" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F963dijx2yqamaj4026fs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F963dijx2yqamaj4026fs.png" alt="22" width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7j12czx41wwsh4l4d52v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7j12czx41wwsh4l4d52v.png" alt="23" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flwzz9ld6puy91ipfrkqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flwzz9ld6puy91ipfrkqu.png" alt="24" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the whole workflow will be like the following screenshot&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx6vvf14eqmhuyom7cqn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx6vvf14eqmhuyom7cqn6.png" alt="25" width="726" height="1476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr00vpkvugan5x8h7mfqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr00vpkvugan5x8h7mfqh.png" alt="26" width="800" height="784"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0xwvj3iautzln7giuvpl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0xwvj3iautzln7giuvpl.png" alt="27" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vqdfl1vf4ozukwzo2p2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vqdfl1vf4ozukwzo2p2.png" alt="28" width="754" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the build has been successfully completed, you can review the Maestro integration step and you will notice that the app and the Flow uploaded to the Maestro Cloud and you can check the results on the &lt;a href="https://console.mobile.dev/" rel="noopener noreferrer"&gt;Maestro Console&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgtefvv075mw197nle3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvgtefvv075mw197nle3o.png" alt="29" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations 🎉 you learn how to use the Maestro UI testing framework and run it as a part of your CI workflow with Bitrise. &lt;/p&gt;

&lt;p&gt;In this &lt;a href="https://github.com/moatazeldebsy/maestro-ui-test-demo" rel="noopener noreferrer"&gt;repository&lt;/a&gt;, you'll find both the demo app and the entire bitrise.yml file.&lt;/p&gt;

&lt;p&gt;This was the first part and in the next article, we will cover the following topics: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up Pull Request integration with GitHub.&lt;/li&gt;
&lt;li&gt;Use multiple Flows at once.&lt;/li&gt;
&lt;li&gt;Add the Memory Leak Analysis. &lt;/li&gt;
&lt;li&gt;Maestro Record.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://maestro.mobile.dev/" rel="noopener noreferrer"&gt;Maestro by Mobile.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.mobile.dev/getting-started/integrate-into-ci/bitrise" rel="noopener noreferrer"&gt;Integrate Maestro into Bitrise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mobile-dev-inc/maestro" rel="noopener noreferrer"&gt;GitHub - mobile-dev-inc/maestro: Painless Mobile UI Automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.mobile.dev/" rel="noopener noreferrer"&gt;Maestro Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mobile.dev/introducing-maestro-painless-mobile-ui-automation-bee4992d13c1" rel="noopener noreferrer"&gt;Introducing: Maestro — Painless Mobile UI Automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mobile-dev-inc.slack.com/join/shared_invite/zt-1g5nn4yx1-59gW6Wt0gP5JgXoxtiRq0w#/shared-invite/email" rel="noopener noreferrer"&gt;Public Slack Channel&lt;/a&gt;, then join the &lt;strong&gt;#maestro&lt;/strong&gt; channel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for reading and happy testing!&lt;/p&gt;

&lt;p&gt;Moataz&lt;/p&gt;

</description>
      <category>testing</category>
      <category>automation</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Create your e-commerce website for test automation using Amazon Lightsail and PrestaShop</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Tue, 06 Sep 2022 15:22:20 +0000</pubDate>
      <link>https://dev.to/aws-builders/create-your-ecommerce-website-for-test-automation-using-amazon-lightsail-and-prestashop-17pg</link>
      <guid>https://dev.to/aws-builders/create-your-ecommerce-website-for-test-automation-using-amazon-lightsail-and-prestashop-17pg</guid>
      <description>&lt;p&gt;For most test automation engineers, it is necessary to have a demo website in order to simulate a real website including different functions and elements. &lt;/p&gt;

&lt;p&gt;The majority of these websites are e-commerce websites because they have different features and you can automate the whole process and placing an order and create E2E scenarios from logging in to checking out. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is the problem?
&lt;/h2&gt;

&lt;p&gt;If you start practicing with a demo website, you may find the website is down the following day or week, and you cannot continue. &lt;/p&gt;

&lt;p&gt;Because of that, I will show you how to create your own e-commerce website using &lt;a href="https://aws.amazon.com/free/compute/lightsail/" rel="noopener noreferrer"&gt;Amazon Lightstail&lt;/a&gt; hosted on AWS and &lt;a href="https://www.prestashop.com/" rel="noopener noreferrer"&gt;PrestaShop&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sounds interesting! &lt;/p&gt;

&lt;p&gt;Let's get started 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Amazon Lightsail?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/free/compute/lightsail/" rel="noopener noreferrer"&gt;Amazon Lightsail&lt;/a&gt; is the easiest way to get started with AWS for developers, small businesses, students, and other users who need a solution to build and host their websites and web applications in the cloud. &lt;/p&gt;

&lt;p&gt;Lightsail provides developers compute, storage, and networking capacity. Lightsail includes everything you need to launch your project quickly – virtual machines, containers, databases, CDN, load balancers, DNS management etc. – for a low, predictable monthly price. - Source: &lt;a href="https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-frequently-asked-questions-faq#amazon-lightsail-frequently-asked-questions-faq-general_" rel="noopener noreferrer"&gt;Amazon Lightsail FAQs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r52kxh2s7x5llk9ocwc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r52kxh2s7x5llk9ocwc.png" alt="1" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To start using Lightsail, choose &lt;a href="https://portal.aws.amazon.com/gp/aws/developer/registration/index.html?client=lightsail" rel="noopener noreferrer"&gt;Get Started&lt;/a&gt; and log in. You use your Amazon Web Services account to access Lightsail; if you don't already have one, you'll be prompted to create one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create your e-commerce website
&lt;/h2&gt;

&lt;p&gt;1- Login with your AWS account and from the dashboard, select Amazon Lightsail service&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbznsgb94ec83gei7m1o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbznsgb94ec83gei7m1o.png" alt="21" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2- Click on Create an instance&lt;/p&gt;

&lt;p&gt;3- You can change the AWS Region and Availability Zone based on your preferences&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc9oj7cr6cx0dszyvseiz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc9oj7cr6cx0dszyvseiz.png" alt="2" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4- Pick your instance image in our case we will select Linux VM &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgf9rpthw3jooaslrbvan.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgf9rpthw3jooaslrbvan.png" alt="3" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5- Select the blueprint and in our case we will choose Prestashop from the Apps + OS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0stnfzfx5pk1mjwqwyw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0stnfzfx5pk1mjwqwyw9.png" alt="4" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6- You will connect to your instance using the default SSH key or you can create a new one &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr35291z3e4ugpvcka7n6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr35291z3e4ugpvcka7n6.png" alt="5" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7- There is an option for the automatic snapshot but we can leave it for now and you can enable it afterwards. &lt;/p&gt;

&lt;p&gt;8- Select the price tier but I will leave the default one. For a limited time, new Lightsail customers can try the selected plan for free for three months andn after that you can pay only 3.5 USD. Read more about the Lightsail pricing from &lt;a href="https://aws.amazon.com/lightsail/pricing/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funieu0v2htiymffkbm18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funieu0v2htiymffkbm18.png" alt="6" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7- Rename the instance name to be for example MyShop and click on Create instance button&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptc07wtsjdb5scwwboac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptc07wtsjdb5scwwboac.png" alt="7" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8- Wait till the VM status to be running &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51lk3mf0a0y8wofwntwp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51lk3mf0a0y8wofwntwp.png" alt="8" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9- Now you can access the the VM using SSH &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc356xmbzu5gzaiqujnr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc356xmbzu5gzaiqujnr.png" alt="9" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft22pedsd98vixtdc0ntr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft22pedsd98vixtdc0ntr.png" alt="9" width="800" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10- After you're connected, enter the following command to get the default application password:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cat $HOME/bitnami_application_password&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Save the password because you will use it to login as an administrator&lt;/p&gt;

&lt;p&gt;For more information you can check the &lt;a href="https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-quick-start-guide-prestashop" rel="noopener noreferrer"&gt;start guide for PrestaShop on Amazon Lightsail&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11- Now you can open the instance with the public IP &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftkmasxs3cymxexfawnkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftkmasxs3cymxexfawnkr.png" alt="10" width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsla6vbvkp57ln8009mrp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsla6vbvkp57ln8009mrp.png" alt="11" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feveglqk8gdudtzgw79o6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feveglqk8gdudtzgw79o6.png" alt="12" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgl3giu2qemor8jgqpe9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgl3giu2qemor8jgqpe9j.png" alt="13" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12- If you want to login as an administrator you can use the following details: &lt;/p&gt;

&lt;p&gt;URL: http://[YOUR_PUBLIC_IP]/administration&lt;br&gt;
Username: &lt;a href="mailto:user@example.com"&gt;user@example.com&lt;/a&gt;&lt;br&gt;
password: YOUR_PASSWORD&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9e4o8zl6yz1x4cwk3tp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9e4o8zl6yz1x4cwk3tp5.png" alt="14" width="800" height="1043"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yi07cjb7czeqii53mrj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yi07cjb7czeqii53mrj.png" alt="15" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations 🥳 , you now have your own e-commerce website where you can run your test automation scripts. &lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;Amazon Lightsail give you the ability to create and attach a Static IP, add additional storage, create a snapshot, check the Metrics and more. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F928vlibvcbv64ojccwe9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F928vlibvcbv64ojccwe9.png" alt="16" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kv7dozto2f5p4yulzih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2kv7dozto2f5p4yulzih.png" alt="17" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkf24wokj3v7np29g8kl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkf24wokj3v7np29g8kl.png" alt="18" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjk86d1f8qh2xrxqftqyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjk86d1f8qh2xrxqftqyy.png" alt="19" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you don't need the VM anymore you can delete it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1wazznqprzxao3tw6yb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1wazznqprzxao3tw6yb.png" alt="20" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-frequently-asked-questions-faq#amazon-lightsail-frequently-asked-questions-faq-general" rel="noopener noreferrer"&gt;Frequently Asked Questions in Amazon Lightsail&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading and happy testing! 🚀&lt;/p&gt;

</description>
      <category>testing</category>
      <category>tutorial</category>
      <category>aws</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Run your security static analysis tests for Android apps on the cloud with MobSF and AWS</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Mon, 29 Aug 2022 22:41:00 +0000</pubDate>
      <link>https://dev.to/aws-builders/run-your-security-static-analysis-tests-for-android-apps-on-the-cloud-with-mobsf-and-aws-4cam</link>
      <guid>https://dev.to/aws-builders/run-your-security-static-analysis-tests-for-android-apps-on-the-cloud-with-mobsf-and-aws-4cam</guid>
      <description>&lt;p&gt;This article walks you through the steps of setting up the MobSF Scan tool on an &lt;a href="https://aws.amazon.com/ec2/" rel="noopener noreferrer"&gt;AWS EC2&lt;/a&gt; machine with Docker to be able to run your static analysis tests for Android apps easily.&lt;/p&gt;

&lt;p&gt;As part of Droidcon Berlin this year, I spoke about &lt;a href="https://www.droidcon.com/2022/08/01/devsecops-injecting-security-into-android-ci-cd-pipelines/" rel="noopener noreferrer"&gt;DevSecOps for Android&lt;/a&gt; and how security testing can be injected into the CI/CD pipeline and Mobile DevOps. &lt;/p&gt;

&lt;p&gt;In the presentation, I mentioned different automated security testing tools that we can use with Android.One of these tools is &lt;a href="https://github.com/MobSF/mobsfscan" rel="noopener noreferrer"&gt;MobSF&lt;/a&gt; — it’s an open-source static analysis tool that can find insecure code patterns in your Android and iOS source code supports Java, Kotlin, Swift, and Objective C. &lt;/p&gt;

&lt;p&gt;There is a &lt;a href="https://mobsf.live/" rel="noopener noreferrer"&gt;live&lt;/a&gt; version of the tool and you can upload your APK and scan it — but what if you need to have your own version installed on your own server or machine?&lt;/p&gt;

&lt;p&gt;Because of that, in this article, I will demonstrate how to run the MobSF Docker container on an AWS EC2 machine and use the &lt;a href="https://mobsf.live/api_docs" rel="noopener noreferrer"&gt;API&lt;/a&gt; to upload the Android APK to the server to start the scanning process. &lt;/p&gt;

&lt;p&gt;Sounds interesting? Let’s get started. &lt;/p&gt;

&lt;p&gt;The prerequisites&lt;br&gt;
This demo is required the following prerequisites: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[A free AWS account (&lt;a href="https://portal.aws.amazon.com/billing/signup" rel="noopener noreferrer"&gt;https://portal.aws.amazon.com/billing/signup&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/join" rel="noopener noreferrer"&gt;free GitHub account&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;An Android application, you can fork the &lt;a href="https://github.com/hax0rgb/InsecureShop" rel="noopener noreferrer"&gt;Insecure Shop&lt;/a&gt; app from GitHub and use it as a demo if you don’t have an Android app. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let’s build our solution.&lt;/p&gt;

&lt;p&gt;1- Login to the &lt;a href="https://us-east-1.console.aws.amazon.com/console/home?region=us-east-1#" rel="noopener noreferrer"&gt;AWS management console&lt;/a&gt; and select the EC2 service. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnifqgrohhq5tf3hbrq38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnifqgrohhq5tf3hbrq38.png" alt="1" width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2- Click on Instance to launch a new Amazon Linux instance and make sure that’s under the free tier category.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3549yo8d6ddk3y70qwr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3549yo8d6ddk3y70qwr.png" alt="2" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3- Then select the instance type, key pair, and security group and make sure that you allow the HTTP or HTTPS to be able to access the machine from the browser beside the SSH. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67omophd1vw0fqqhgxht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67omophd1vw0fqqhgxht.png" alt="3" width="800" height="250"&gt;&lt;/a&gt;&lt;br&gt;
4- Click Launch the instance and wait to tell it becomes ready to access. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6sgyad4ej562pdmwy7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6sgyad4ej562pdmwy7p.png" alt="4" width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr84o3bah4etsgoddnhgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr84o3bah4etsgoddnhgs.png" alt="5" width="236" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5- You have a machine with public IP and also you can assign a domain name to it if you want. &lt;/p&gt;

&lt;p&gt;6- Now the VM is ready and you can access it by clicking on the connect button. You can choose between different clients but I’m using the default one in this demo which is the EC2 Instance Connect. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0p0yqxjr6ioankz3w5zv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0p0yqxjr6ioankz3w5zv.png" alt="6" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7- We are inside the machine now and we can start using the shell to run the commands for instance: sudo yum update to install the updates&lt;/p&gt;

&lt;p&gt;8- Now we need to install the Docker to be able to download and run the MobSF Docker container by the following command: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo yum install docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;9- Add group membership for the default ec2-user so you can run all Docker commands without using the sudo command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo usermod -a -G docker ec2-user

id ec2-user

newgrp docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;10- Enable Docker service at AMI boot time:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl start docker.service&lt;/code&gt;&lt;br&gt;
11- Get the Docker service status on your AMI instance, run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl status docker.service&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;12- See the Docker version:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker version&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fy1mxe29qw1el8rpvq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fy1mxe29qw1el8rpvq1.png" alt="7" width="800" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;13- In the MobSF documentation, you can find how to install the Prebuilt Docker image by the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker pull opensecurity/mobile-security-framework-mobsf

docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now Docker will start to pull the image and build the container and it will be linked to port &lt;strong&gt;8000&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because of that, we need to update our security group for this instance to add this port to be able to access it by editing the Inbound rules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26assd1t8eeypmltm0y1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26assd1t8eeypmltm0y1.png" alt="8" width="800" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14- Now you can try to access the VM via the browser and the result should be like the following image: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61g3c6grd1qqyo6duus5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61g3c6grd1qqyo6duus5.png" alt="9" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you have successfully installed the MobSF tool on your machine. &lt;/p&gt;

&lt;p&gt;Now you can upload the APK manually if you want to scan them or you can use the MobSF API from Mobile CI/CD platform such as &lt;a href="https://www.bitrise.io/" rel="noopener noreferrer"&gt;Bitrise&lt;/a&gt; to upload the APK after you build the application then send it to the MobSF server that hosted on AWS machine. &lt;/p&gt;

&lt;p&gt;Happy testing! &lt;/p&gt;

</description>
      <category>security</category>
      <category>aws</category>
      <category>testing</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Mobile DevOps Summit on November 10th. Call For Speakers is now open!</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Wed, 10 Aug 2022 13:52:00 +0000</pubDate>
      <link>https://dev.to/moataznabil/mobile-devops-summit-on-november-10th-call-for-speakers-is-now-open-2ged</link>
      <guid>https://dev.to/moataznabil/mobile-devops-summit-on-november-10th-call-for-speakers-is-now-open-2ged</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.mobiledevops.io/summit" rel="noopener noreferrer"&gt;Mobile DevOps Summit 2022&lt;/a&gt;&lt;/strong&gt; is a one-day, free and virtual conference powered by &lt;a href="https://www.bitrise.io/" rel="noopener noreferrer"&gt;Bitrise&lt;/a&gt; that brings together over 2500 mobile practitioners and global business leaders to discuss unique challenges faced by mobile teams.&lt;br&gt;
Submit your talk and become a speaker to drive the conversation on how to build, test, release, monitor, and collaborate on mobile apps successfully.&lt;/p&gt;

&lt;p&gt;Mobile DevOps Summit will cover topics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to approach mobile testing, debugging, and quality assurance&lt;/li&gt;
&lt;li&gt;What mobile-specific performance metrics should be tracked?&lt;/li&gt;
&lt;li&gt;How to perfect the app store release process for iOS and Android apps&lt;/li&gt;
&lt;li&gt;How to engage more users and maximize the impact of your mobile app&lt;/li&gt;
&lt;li&gt;What are the processes and best practices for mobile apps?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The complete program provides a holistic understanding of how to implement Mobile DevOps best practices in an organization.&lt;/p&gt;

&lt;p&gt;Submit your talk here: &lt;a href="https://sessionize.com/mobile-devops-summit-2022/" rel="noopener noreferrer"&gt;https://sessionize.com/mobile-devops-summit-2022/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More information on the event is available here &lt;a href="https://www.mobiledevops.io/summit" rel="noopener noreferrer"&gt;https://www.mobiledevops.io/summit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnx61m7n0odeh59by4je.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnx61m7n0odeh59by4je.png" alt="FZt42k8XkAAtqnV" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>devops</category>
      <category>summit</category>
      <category>conference</category>
    </item>
    <item>
      <title>Alexa for CI/CD: Add Alexa Skill to Alexa for Business - Part 4</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Tue, 03 May 2022 16:33:06 +0000</pubDate>
      <link>https://dev.to/aws-builders/alexa-for-cicd-add-alexa-skill-to-alexa-for-business-part-4-472i</link>
      <guid>https://dev.to/aws-builders/alexa-for-cicd-add-alexa-skill-to-alexa-for-business-part-4-472i</guid>
      <description>&lt;p&gt;In the last part of our Alexa for Bitrise tutorial series, you will learn how to publish Alexa Skills to Alexa for Business and use it with AWS Organizations. Let's dive in!&lt;/p&gt;

&lt;p&gt;After you create, build, test, and integrate your skill with the &lt;a href="https://dev.to/aws-builders/alexa-for-cicd-putting-it-all-together-part-3-do6"&gt;AWS Lambda function &lt;/a&gt;you're ready to certify and publish your skill. In this tutorial, you will learn how to publish Skills to Alexa for Business. &lt;/p&gt;

&lt;p&gt;Let’s get started! &lt;/p&gt;

&lt;h2&gt;
  
  
  Publish the skills
&lt;/h2&gt;

&lt;p&gt;There are two different options to publish your skills with Alexa: &lt;strong&gt;public&lt;/strong&gt; and &lt;strong&gt;private&lt;/strong&gt;. Public means it will appear in the &lt;a href="https://www.amazon.com/alexa-skills/b?ie=UTF8&amp;amp;node=13727921011" rel="noopener noreferrer"&gt;Amazon Alexa Skills Store&lt;/a&gt;. In this case, your skill must meet requirements for policy, security, functionality, voice interface, and user experience to receive a certificate. After your skill passes certification testing, you can publish your skill in the &lt;a href="https://www.amazon.com/alexa-skills/b?ie=UTF8&amp;amp;node=13727921011" rel="noopener noreferrer"&gt;Amazon Alexa Skills Store&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But in our case, since our Skill is for development purposes and may not require to be published to the Skills Store, we will publish it as a Private Skill for our AWS Organization. &lt;/p&gt;

&lt;h2&gt;
  
  
  Publish the skill with private availability
&lt;/h2&gt;

&lt;p&gt;To use the &lt;a href="https://developer.amazon.com/alexa/console/ask" rel="noopener noreferrer"&gt;Amazon developer console&lt;/a&gt; to publish a private skill, you must have the following:&lt;/p&gt;

&lt;p&gt;A skill Id for a skill that is under development (You have already one from &lt;a href="https://dev.to/aws-builders/alexa-for-cicd-putting-it-all-together-part-3-do6"&gt;Part 3&lt;/a&gt;)&lt;br&gt;
The &lt;strong&gt;ARN&lt;/strong&gt; for AWS &lt;a href="https://us-east-1.console.aws.amazon.com/a4b/home?region=us-east-1#/home" rel="noopener noreferrer"&gt;Alexa for Business&lt;/a&gt; accounts to which you want to grant access to the private skill&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Alexa for Business?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.amazon.com/en-US/docs/alexa/alexa-for-business/understand-alexa-for-business.html" rel="noopener noreferrer"&gt;Alexa for Business&lt;/a&gt; makes it easy for you to use Alexa in your organization. Alexa for Business provides tools to manage Alexa devices, enroll users, and configure skills across those devices. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5g34el9rrhlmwj2rft1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5g34el9rrhlmwj2rft1.png" alt="1" width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image Source - Alexa for Business&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note: Alexa for Business is available in the US only.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To be able to publish your Skills to Alexa for Business you should have &lt;a href="https://us-east-1.console.aws.amazon.com/organizations/v2/home/" rel="noopener noreferrer"&gt;AWS Organization&lt;/a&gt; to be able to assign the Skills to it. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Organization&lt;/strong&gt; helps you centrally manage and govern your environment as you grow and scale your AWS resources. Using &lt;a href="https://dev.tourl"&gt;AWS Organizations&lt;/a&gt;, you can create accounts and allocate resources, group accounts to organize your workflows, apply policies for governance, and simplify billing by using a single payment method for all of your accounts - &lt;a href="https://aws.amazon.com/organizations/" rel="noopener noreferrer"&gt;AWS Organizations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu7y1v058jezu7mxylmo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu7y1v058jezu7mxylmo.png" alt="2" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image Source AWS Organizations - Amazon Web Services&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let’s now publish the Skill with the following steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the &lt;a href="https://developer.amazon.com/en-US/docs/alexa/devconsole/launch-your-skill.html" rel="noopener noreferrer"&gt;Distribution page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Make sure you have completed all fields in the Skill Preview section for language (&lt;strong&gt;English US&lt;/strong&gt;). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94o4ohxq93a7ooxl1hlw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94o4ohxq93a7ooxl1hlw.png" alt="3" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgrt58hymmk8qu4rqk5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgrt58hymmk8qu4rqk5q.png" alt="4" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can select your favorite icons (I just used any simple icons for the demo)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Save&lt;/strong&gt; and &lt;strong&gt;Continue&lt;/strong&gt; button&lt;/li&gt;
&lt;li&gt;Answer questions in the &lt;strong&gt;Privacy and Compliance&lt;/strong&gt; section then click &lt;strong&gt;Save and continue&lt;/strong&gt; button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrjxnyb4wtxk9enrmtcw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrjxnyb4wtxk9enrmtcw.png" alt="5" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For the &lt;strong&gt;Availability&lt;/strong&gt; option, select &lt;strong&gt;Alexa for Business Organizations&lt;/strong&gt;, then click &lt;strong&gt;Save&lt;/strong&gt; and &lt;strong&gt;continue&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5742vy551g7s338vxad6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5742vy551g7s338vxad6.png" alt="6" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will navigate to the &lt;strong&gt;&lt;a href="https://developer.amazon.com/en-US/docs/alexa/devconsole/test-and-submit-your-skill.html" rel="noopener noreferrer"&gt;Certification&lt;/a&gt;&lt;/strong&gt; page. Review and correct any validation errors. All validations must pass before you can submit the skill.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0mdtupb203tbys9sg7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0mdtupb203tbys9sg7d.png" alt="7" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click the &lt;strong&gt;Submission&lt;/strong&gt; button, then click &lt;strong&gt;Submit for review&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7pxv48ru1xhod8dtc0m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7pxv48ru1xhod8dtc0m.png" alt="8" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once your skill has been published (&lt;strong&gt;privately&lt;/strong&gt;) to the live stage, you can add the skill to a specific Alexa for Business organization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxsv5xu8m1q9rrqaa75bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxsv5xu8m1q9rrqaa75bv.png" alt="9" width="800" height="83"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can manage the Alexa for Business organizations with access to your private skill from the &lt;strong&gt;Distribution &amp;gt; Availability&lt;/strong&gt; section of the developer console. The Manage access to your skill section contains controls to add and remove organizations. The list of organizations that currently have access is displayed as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmyrv549363kgmbk821q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmyrv549363kgmbk821q.png" alt="10" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well done!, you just published your first Alexa Skills to Alexa for Business, now it’s time to manage the access to the Skill from the Alexa for Business Console.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manage skill access from the Alexa for Business console
&lt;/h2&gt;

&lt;p&gt;Once you have set up the private skill for distribution, the customer whose account has been granted access can follow these steps to access the private skill:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to the &lt;a href="https://console.aws.amazon.com/a4b" rel="noopener noreferrer"&gt;Alexa For Business console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Skills &amp;gt; Private Skills&lt;/strong&gt; tab. Select &lt;strong&gt;Review&lt;/strong&gt; and then &lt;strong&gt;Enable the private skill&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzzqs14wujvw0kb3qn8y6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzzqs14wujvw0kb3qn8y6.png" alt="11" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the &lt;strong&gt;Enabled Skills&lt;/strong&gt; tab. Add the private skill to a skill group to enable the skill on devices in rooms containing that skill group. See the &lt;a href="http://docs.aws.amazon.com/a4b/latest/ag/what-is.html" rel="noopener noreferrer"&gt;Alexa for Business administrators guide&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;My goal with this series was to learn the basics of AWS Lambda, design and build a Serverless function to trigger CI build for example Bitrise builds with Bitrise API via the custom Lambda function, design and build a custom Alexa skill, and finally publish the Alexa skills to the Alexa for Business service so we can use them with AWS Organizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.amazon.com/en-US/docs/alexa/certify/certify-your-skill.html" rel="noopener noreferrer"&gt;Certify and Publish Your Skill | Alexa Skills Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.amazon.com/en-US/docs/alexa/devconsole/launch-your-skill.html#skill-metadata" rel="noopener noreferrer"&gt;Define Skill Store Details and Availability | Alexa Skills Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com/alexa-skills/b?ie=UTF8&amp;amp;node=13727921011" rel="noopener noreferrer"&gt;Alexa Skills and Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.amazon.com/en-US/docs/alexa/custom-skills/certification-requirements-for-custom-skills.html" rel="noopener noreferrer"&gt;Certification Requirements | Alexa Skills Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.amazon.com/en-US/docs/alexa/alexa-for-business/create-and-publish-private-skills.html" rel="noopener noreferrer"&gt;Create and Publish Private Skills (ASK CLI)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/organizations/" rel="noopener noreferrer"&gt;AWS Organizations - Amazon Web Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.amazon.com/en-US/docs/alexa/alexa-for-business/understand-alexa-for-business.html" rel="noopener noreferrer"&gt;Understand Alexa for Business&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/organizations/" rel="noopener noreferrer"&gt;AWS Organizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.aws.amazon.com/a4b/latest/ag/what-is.html" rel="noopener noreferrer"&gt;What is Alexa for Business? - Alexa for Business&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for reading these articles!&lt;/p&gt;

&lt;p&gt;Happy building!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>cloud</category>
      <category>alexa</category>
    </item>
    <item>
      <title>Alexa for CI/CD: Putting it all together - Part 3</title>
      <dc:creator>Moataz Nabil</dc:creator>
      <pubDate>Tue, 26 Apr 2022 10:49:36 +0000</pubDate>
      <link>https://dev.to/aws-builders/alexa-for-cicd-putting-it-all-together-part-3-do6</link>
      <guid>https://dev.to/aws-builders/alexa-for-cicd-putting-it-all-together-part-3-do6</guid>
      <description>&lt;p&gt;In the previous two parts in this series, we created our &lt;a href="https://dev.to/aws-builders/alexa-for-cicd-introduction-to-serverless-with-aws-lambda-and-bitrise-api-part-1-11ol"&gt;Lambda function&lt;/a&gt; and the &lt;a href="https://dev.to/aws-builders/alexa-for-bitrise-cicd-introduction-to-amazon-alexa-and-alexa-skills-part-2-3ob0"&gt;Alexa Skill&lt;/a&gt;. In this tutorial, we’ll learn how to connect Amazon Alexa Skill to the AWS Lambda function to trigger Bitrise builds via a voice user interface.&lt;/p&gt;

&lt;p&gt;Sounds good? Let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;As we know AWS Lambda function needs to be triggered by any supported triggers. Because of this, we will use Alexa and Alexa Skill Kit (ASK) to trigger the function. Inside the function, we will add our logic to receive the voice command from Alexa and pass it to Bitrise API using the POST endpoint to trigger a new build in our Bitrise app. Then, we will get the response from Lambda to the Alexa as a JSON output. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyy73swtlhjnkcgos5kk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyy73swtlhjnkcgos5kk.png" alt="1" width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Previously our Lambda function was using the following code to trigger the build via the POST endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var request = require('request');

let app_slug = process.env.APP_SLUG
let api_key = process.env.API_KEY

var options = {
  'method': 'POST',
  'url': 'https://api.bitrise.io/v0.1/apps/'+app_slug+'/builds',
  'headers': {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': api_key
  },
  body: JSON.stringify({
   'build_params': {
      'branch': 'chapter-3',
      'workflow_id': 'primary'
    },
    'hook_info': {
      'type': 'bitrise'
    }
  })

};

exports.handler =  async function(event, response) {
  console.log(response.body);
  return "done..."
}

request(options, function (error,response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But with the Alexa Skill Kit, we need to change this handler and the code logic  with something to work with the voice command and the Skill Kit by the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var request = require('request');

exports.handler = (event, context, callback) =&amp;gt; {

    try {
        if (event.request.type === 'LaunchRequest') {
            callback(null, buildResponse('Hello from Bitrise'));
        } else if (event.request.type === 'IntentRequest') {
            const intentName = event.request.intent.name;

            if (intentName === 'triggerBuild') {

                buildBitriseApp(function (err, result) {
                    if(!err) callback(null, buildResponse('The build was launched! make sure you take a look.'));
                    else callback(null, buildResponse("Please check your build logs. Something went wrong."));
                });
            } else {
                callback(null, buildResponse("Sorry, i don't understand"));
            }
        } else if (event.request.type === 'SessionEndedRequest') {
            callback(null, buildResponse('Session Ended'));
        }
    } catch (e) {
        context.fail(`Exception: ${e}`);
    }
};

function buildResponse(response) {
    return {
        version: '1.0',
        response: {
            outputSpeech: {
                type: 'PlainText',
                text: response,
            },
            shouldEndSession: true,
        },
        sessionAttributes: {},
    };
}

let api_key = process.env.API_PERSONAL_KEY;
let app_slug = process.env.APP_SLUG;

function buildBitriseApp(callback) {
var options = {
  'method': 'POST',
  'url': 'https://api.bitrise.io/v0.1/apps/'+app_slug+'/builds',
  'headers': {
    'Authorization': api_key
  },
  body: JSON.stringify({
    "User-Agent": "alexa-skill",
    "hook_info": {
      "type": "bitrise"
    },
    "build_params": {
      "branch": 'main',
      "workflow_id": 'primary'
    }
  })
};
    request.post(options, function(error, response, body){
        if(error){
            callback("ERROR");

        } else {
            callback(null,"SUCCESS");
        }
    });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we are specifying that when we launch the skill we’ll receive a message “Hello from Bitrise” and check if the intentName is “triggerBuild”.&lt;/p&gt;

&lt;p&gt;We can call the function “buildResponse”, which calls the POST endpoint from Bitrise API with the payload that we added, specifying the following parameters: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Key&lt;/li&gt;
&lt;li&gt;App Slug&lt;/li&gt;
&lt;li&gt;Branch Name&lt;/li&gt;
&lt;li&gt;Workflow ID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And we already added the &lt;strong&gt;API Key&lt;/strong&gt; and the &lt;strong&gt;App Slug&lt;/strong&gt; as Lambda Environment Variables. &lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Deploy&lt;/strong&gt; button to save the changes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfaaw1tjp7vb0lswvwmp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfaaw1tjp7vb0lswvwmp.gif" alt="2" width="720" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it’s time to add the Alexa Skill Kit as a trigger for our Lambda function. &lt;/p&gt;

&lt;p&gt;Click on the &lt;strong&gt;+ Add trigger&lt;/strong&gt; button in the &lt;strong&gt;Function Overview&lt;/strong&gt; and the trigger configuration and select the &lt;strong&gt;Alexa Skills kit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4uzptbo6lh2e7qbjrjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4uzptbo6lh2e7qbjrjf.png" alt="3" width="800" height="767"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then you can add your &lt;strong&gt;Skill ID&lt;/strong&gt; and click the add button. You can get the Skill ID from the Endpoint menu in the Skill Kit build section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitdop4s8seyr0azuixw3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitdop4s8seyr0azuixw3.png" alt="4" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0scknu6x3qf8siv9r6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0scknu6x3qf8siv9r6d.png" alt="5" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And now the trigger should be displayed like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ubspr4lukuoxek1fxez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ubspr4lukuoxek1fxez.png" alt="6" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the other side, you need to add the Lambda ARN from the Lambda function page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr8l4bqwtf26hb4y6walw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr8l4bqwtf26hb4y6walw.png" alt="7" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And go to the Alexa Skill kit by opening the &lt;strong&gt;Endpoint&lt;/strong&gt; option in the &lt;strong&gt;build&lt;/strong&gt; section and pasting the &lt;strong&gt;ARN&lt;/strong&gt; there, then clicking &lt;strong&gt;Save Endpoint&lt;/strong&gt; and choosing &lt;strong&gt;yes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After that, click on the &lt;strong&gt;Code&lt;/strong&gt; button and you will see a notification that the default endpoint has changed and is no longer hosted by Alexa because it’s now on AWS and Lambda. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f2ycilwkuy3x58lnown.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f2ycilwkuy3x58lnown.png" alt="8" width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the integration between Lambda and Alexa
&lt;/h2&gt;

&lt;p&gt;Now click on the &lt;strong&gt;Test&lt;/strong&gt; button to go to the &lt;strong&gt;Alexa Simulator&lt;/strong&gt; page.  And in the development write the following phrase: &lt;/p&gt;

&lt;p&gt;“&lt;strong&gt;Alexa, open bitrise ci&lt;/strong&gt;” and click the &lt;strong&gt;Enter&lt;/strong&gt; button &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02hvetkzc8px0ipj16al.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02hvetkzc8px0ipj16al.png" alt="9" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To trigger a new build you can write: “Alexa, ask bitrise ci trigger a new bitrise build” and click the Enter button&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qon2xtkouhykdpnaihl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qon2xtkouhykdpnaihl.png" alt="10" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open your Bitrise &lt;a href="https://app.bitrise.io/dashboard" rel="noopener noreferrer"&gt;Dashboard&lt;/a&gt; and, if the command ran successfully, you will notice that the build was triggered successfully and you can abort it after that to save your credits. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnmusvkdj2z5xki4ylf0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnmusvkdj2z5xki4ylf0.png" alt="11" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We did it! Congratulations you have successfully triggered your first build using Bitrise API, Lambda via Alexa Skill kit. &lt;/p&gt;

&lt;p&gt;Amazing! &lt;/p&gt;

&lt;h2&gt;
  
  
  Specifying the git branch name and the workflow name using Slots
&lt;/h2&gt;

&lt;p&gt;You may notice that in our Lambda function we are using hardcoded values like the branch name and the workflow name as build parameters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"build_params": {
      "branch": 'main',
      "workflow_id": 'primary'
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But what if I need to use different values... Can I do that? &lt;/p&gt;

&lt;p&gt;Of course, you can!&lt;/p&gt;

&lt;p&gt;In the first part, we mentioned that Alexa Skill has a key feature which is Slots and you can use them as variables that you provide with a name and a slot type for each slot in your interaction model. &lt;/p&gt;

&lt;p&gt;Let’s do it then! &lt;/p&gt;

&lt;p&gt;In your Alexa Skills Console, click on &lt;strong&gt;Build&lt;/strong&gt; then click on &lt;strong&gt;Slot Types&lt;/strong&gt;, and click &lt;strong&gt;Add Slot Type&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdt9zfvgwztlp9eouflbe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdt9zfvgwztlp9eouflbe.png" alt="12" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;BranchName&lt;/strong&gt; and click the &lt;strong&gt;Next&lt;/strong&gt; button &lt;/li&gt;
&lt;li&gt;Enter default values such as &lt;strong&gt;main&lt;/strong&gt; and &lt;strong&gt;master&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdo6cztgukat489rz7ofl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdo6cztgukat489rz7ofl.png" alt="13" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add another &lt;strong&gt;Slot&lt;/strong&gt; &lt;strong&gt;WorkflowName&lt;/strong&gt; click the &lt;strong&gt;Next&lt;/strong&gt; button&lt;/li&gt;
&lt;li&gt;Enter default values such as &lt;strong&gt;deploy&lt;/strong&gt; and &lt;strong&gt;primary&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffx78lsotg0wzu347e54d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffx78lsotg0wzu347e54d.png" alt="14" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Intents&lt;/strong&gt; then &lt;strong&gt;triggerBuild&lt;/strong&gt; intent &lt;br&gt;
Change the &lt;strong&gt;Sample Utterance&lt;/strong&gt; to be like the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgywa53kmcgqwiky0wx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgywa53kmcgqwiky0wx9.png" alt="15" width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Slots will be added under Intent Slots and make sure that the Slot Type is what we created previously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89enwquszwab94na83zp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89enwquszwab94na83zp.png" alt="16" width="800" height="263"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var request = require('request');

var workflowSlot;
var branchSlot;

exports.handler = (event, context, callback) =&amp;gt; {

    try {
        if (event.request.type === 'LaunchRequest') {
            callback(null, buildResponse('Hello from Bitrise'));
        } else if (event.request.type === 'IntentRequest') {
            const intentName = event.request.intent.name;
            workflowSlot = event.request.intent.slots.WorkflowName.value;
            branchSlot = event.request.intent.slots.BranchName.value;

            if (intentName === 'triggerBuild') {

                buildBitriseApp(function (err, result) {
                    if(!err) callback(null, buildResponse('The build was launched with '+ workflowSlot +' workflow for '+ branchSlot + ' branch. make sure you take a look.'));
                    else callback(null, buildResponse("Please check your build logs. Something went wrong."));
                });
            } else {
                callback(null, buildResponse("Sorry, i don't understand"));
            }
        } else if (event.request.type === 'SessionEndedRequest') {
            callback(null, buildResponse('Session Ended'));
        }
    } catch (e) {
        context.fail(`Exception: ${e}`);
    }
};

function buildResponse(response) {
    return {
        version: '1.0',
        response: {
            outputSpeech: {
                type: 'PlainText',
                text: response,
            },
            shouldEndSession: true,
        },
        sessionAttributes: {},
    };
}

let api_key = process.env.API_PERSONAL_KEY;
let app_slug = process.env.APP_SLUG;

function buildBitriseApp(callback) {
var options = {
  'method': 'POST',
  'url': 'https://api.bitrise.io/v0.1/apps/'+app_slug+'/builds',
  'headers': {
    'Authorization': api_key
  },
  body: JSON.stringify({
    "User-Agent": "alexa-skill",
    "hook_info": {
      "type": "bitrise"
    },
    "build_params": {
      "branch": branchSlot,
      "workflow_id": workflowSlot
    }
  })
};
    request.post(options, function(error, response, body){
        if(error){
            callback("ERROR");

        } else {
            callback(null,"SUCCESS");
        }
    });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code we added these values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var workflowSlot;
var branchSlot;

workflowSlot = event.request.intent.slots.WorkflowName.value;
branchSlot = event.request.intent.slots.BranchName.value;

And in the build parameters we replace the hardcoded values: 
"build_params": {
      "branch": branchSlot,
      "workflow_id": workflowSlot
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click &lt;strong&gt;Deploy&lt;/strong&gt; to save the changes and now you can test your Alexa Skills Kit.&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;Alexa Simulator&lt;/strong&gt; write the following phrase:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Alexa, ask bitrise ci trigger build for primary workflow for main branch”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You should have a workflow and branch name with the same values otherwise the build will not be triggered&lt;/p&gt;

&lt;p&gt;I will try to use different apps and specify the workflow name and the branch name as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19s4m4y6wx3m8yxaurlm.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19s4m4y6wx3m8yxaurlm.gif" alt="16" width="600" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitor AWS Lambda with CloudWatch
&lt;/h2&gt;

&lt;p&gt;You can also check the runtime metrics for your functions on Amazon CloudWatch. The metrics shown are an aggregate view of all function runtime activity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ai36fdn3h58l7v61jzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ai36fdn3h58l7v61jzk.png" alt="17" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;In the next article, we will &lt;strong&gt;distribute&lt;/strong&gt; our Alexa Skills Kit to be able to use in our &lt;strong&gt;AWS organization&lt;/strong&gt;. &lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>cloud</category>
      <category>alexa</category>
    </item>
  </channel>
</rss>
