Mockingbird was designed to simplify software testing, by easily mocking any system using HTTP/HTTPS

Overview

logo

license swift version Platform Carthage Compatible

Mockingbird

screenshot

Mockingbird was designed to simplify software testing, by easily mocking any system using HTTP/HTTPS, allowing a team to test and develop against a service that is not complete or is unstable or just to reproduce planned/edge cases.

Features

  • Minimalist and easy to use UI, focused on data manipulation
  • Definition of test scenarios with their respective data mocks
  • Easily create new data mocks using JSON file
  • On the fly data manipulation
  • HTTP/HTTPS traffic inspection and analysis
  • Easily spot mocked data while analyzing
  • One-tap button for snapshot generation
  • Snapshot replay (including ‘replay & pop’)

Installation

Binary downloads

Oficial binaries can be found on Release Page

Compiling

Follow these steps to compile:

  1. Clone this repo to your Mac.

    git clone https://github.com/Farfetch/mockingbird.git
    
    cd mockingbird/src
    
  2. Install Cocoapods if you don't already have it.

    sudo gem install cocoapods
    
  3. Retrieve and build dependencies.

    pod install
    
  4. Open the workspace file in Xcode then build and run.

    open Mockingbird.xcworkspace
    

Usage

Documentation and tutorials can be found on Wiki Page

Contributing

Read the Contributing guidelines

Maintainers

License

MIT

Comments
  • Setting up Github actions to update the app automatically

    Setting up Github actions to update the app automatically

    PR Details

    This PR sets up the Github Actions and automatic release when a PR is merged into the master branch

    Description

    • Added Fastlane to the project
    • Create the Github workflow file
    • Added the Gemfile to manage the dependencies
    • Custom Fastlane Actions created

    Motivation and Context

    This is required in order for the project to have automatic releases

    opened by engtom 0
  • Release 1.5.0

    Release 1.5.0

    PR Details

    • Bumping release version 1.5.0
    • Fixing unzip of new mitmproxy version when user already has the app installed

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by erickjung 0
  • Release 1.5.0

    Release 1.5.0

    PR Details

    • Bumping release version 1.5.0
    • Fixing unzip of new mitmproxy version when user already has the app installed

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by erickjung 0
  • Fix for new mitmdump version and server and proxy not deactivating when exiting the app

    Fix for new mitmdump version and server and proxy not deactivating when exiting the app

    PR Details

    • Fixed the usage of new mitmdump v2 location, the app was looking for the older version yet
    • Fixed the execution of scripts when exiting the app, now they will be executed in sync mode to guarantee the expected result. This fixes a problem when you quit the app with proxy or server turned on and still keeps activated while not using mockingbird anymore.

    Types of changes

    • [ ] Docs change / refactoring / dependency upgrade
    • [x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have read the CONTRIBUTING document.
    • [ ] I have added tests to cover my changes.
    • [x] All new and existing tests passed.

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by erickjung 0
  • Adding the auto updater feature using sparkle

    Adding the auto updater feature using sparkle

    PR Details

    This adds a new feature to mockingbird where it will be able to update itself.

    Description

    • This adds the Sparkle framework to the project. This framework enables the app to auto update, which will improve the project user experience overall.

    • Also, makes all the binding necessary to integrate the project with the Sparkle framework

    • And finally, it adds the new AppCast file, which will be used in order to make the updates to the next versions possible.

    Types of changes

    • [ ] Docs change / refactoring / dependency upgrade
    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [X] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    • [X] My code follows the code style of this project.
    • [X] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [X] I have read the CONTRIBUTING document.
    • [ ] I have added tests to cover my changes.
    • [X] All new and existing tests passed.

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by Mattcbr 0
  • Release 1.4.0

    Release 1.4.0

    PR Details

    Bumping release version 1.4.0

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by erickjung 0
  • Updating logo file

    Updating logo file

    PR Details

    • Updating the logo

    Types of changes

    • [x] Docs change / refactoring / dependency upgrade
    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    • [x] My code follows the code style of this project.
    • [x] My change requires a change to the documentation.
    • [x] I have updated the documentation accordingly.
    • [x] I have read the CONTRIBUTING document.
    • [ ] I have added tests to cover my changes.
    • [ ] All new and existing tests passed.

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by erickjung 0
  • Changing the port to work on the MacOS Monterey

    Changing the port to work on the MacOS Monterey

    PR Details

    Changes the port from 5000 to 5999, to correct a bug that was preventing the server to start on the macOS Monterey

    Description

    When we were trying to connect to the server, this error was being shown: The operation couldn’t be completed. (SwiftSocket.SocketError error 2.). On the macOS Monterey, the port 5000 is used by Control Center, to operate the Airplay Receiver, so this was preventing the Mockingbird server to connect. Changing it to 5999 fixed the problem.

    Also, we had to change the mitmproxy folder, due to the change we had to do on the mitmdump_mb file. The code we have today checks if the mitmproxy folder is empty and then we copy the file to it. This was preventing the file to be updated. So, we have found a temporary solution to overcome that, that is to change to name of the folder to mitmproxy-v2.

    Also, the Swifter lib was updated to the 1.5.0 version.

    Motivation and Context

    This change is required to fix the function problem on the macOS Monterey

    How Has This Been Tested

    After fixing the problem, I ran the app several times and tested the intended behavior. Everything worked just fine

    Types of changes

    • [ ] Docs change / refactoring / dependency upgrade
    • [ X] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    • X[ ] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ X] I have read the CONTRIBUTING document.
    • [ ] I have added tests to cover my changes.
    • [ ] All new and existing tests passed.

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by engtom 0
  • Release update 1.3.0

    Release update 1.3.0

    PR Details

    • Bumping release version 1.3.0

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by erickjung 0
  • Intercept requests based on context paths

    Intercept requests based on context paths

    PR Details

    Up until now the mitmproxy was intercepting all network traffic which caused issues when trying to perform other network activities with Mockingbird activated.

    With these changes, we'll leverage the --allow-hosts option to solely intercept requests with the path for the context selected. This will allow any user to use internet freely on their device when filtering requests according to their request

    Description

    • Adds mitm-on.sh script to start the mitmdump_mb executable with the --allow-hosts option depending on the selected context status
    • Removes filtering performed on ContextManager (no longer needed since this is being done at the mitmproxy level
    • Adds label to alert the user to disable the Server before changing the context
    • Removes ProcessObject and runAsync since we're no longer launching executables directly from the source code

    Motivation and Context

    In our teams, a painpoint that we felt a lot was the loss of all network connection when we simply wanted to intercept requests based on a determined context.

    How Has This Been Tested

    After applying these changes, I ran the Mockingbird app several times with no context applied or with context applied (with single or multiple paths). While in the first scenario all traffic is targeted and any activity using internet traffic is halted, in the second scenario only the traffic that is targeted by the context is intercepted and the user can work with the remaining activities.

    Types of changes

    • [ ] Docs change / refactoring / dependency upgrade
    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [x] I have updated the documentation accordingly.
    • [x] I have read the CONTRIBUTING document.
    • [x] All new and existing tests passed.

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by guilherme-fh 0
  • Correct

    Correct "Open Data Folder" behaviour

    PR Details

    Correct behaviour for the "Open Data Folder" button on the settings screen after the changes made to the working directory

    Description

    When pressing the "Open Data Folder", Mockingbird now opens the working directory instead of its main directory as it was previously

    Motivation and Context

    Correct behaviour that was incorrect after the changes in 1.2.0

    How Has This Been Tested

    Ran the Mockingbird app and tested the behaviour before and after the changes

    Types of changes

    • [ ] Docs change / refactoring / dependency upgrade
    • [x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have read the CONTRIBUTING document.
    • [ ] I have added tests to cover my changes.
    • [ ] All new and existing tests passed.

    Disclaimer

    By sending us your contributions, you are agreeing that your contribution is made subject to the terms of our Contributor Ownership Statement

    opened by guilherme-fh 0
Releases(1.5.0)
Owner
FARFETCH
Do what's never been done!
FARFETCH
Switchboard - easy and super light weight A/B testing for your mobile iPhone or android app. This mobile A/B testing framework allows you with minimal servers to run large amounts of mobile users.

Switchboard - easy A/B testing for your mobile app What it does Switchboard is a simple way to remote control your mobile application even after you'v

Keepsafe 287 Nov 19, 2022
Testing the UI without UI Testing, a Swift experiment.

UI tests without UI Testing experiment This repo is a small experiment to see if there's an "in-between" for testing iOS applications. More feature-le

Joe Masilotti 20 Sep 26, 2022
Boilerplate-free mocking framework for Swift!

Cuckoo Mock your Swift objects! Introduction Cuckoo was created due to lack of a proper Swift mocking framework. We built the DSL to be very similar t

Brightify 1.5k Dec 27, 2022
Mockit is a Tasty mocking framework for unit tests in Swift 5.0

Mockit Introduction Mockit is a Tasty mocking framework for unit tests in Swift 5.0. It's at an early stage of development, but its current features a

Syed Sabir Salman-Al-Musawi 118 Oct 17, 2022
A convenient mocking framework for Swift

// Mocking let bird = mock(Bird.self) // Stubbing given(bird.getName()).willReturn("Ryan") // Verification verify(bird.fly()).wasCalled() What is Mo

Bird Rides, Inc 545 Jan 5, 2023
A mocking framework for Swift

SwiftMock SwiftMock is a mocking framework for Swift 5.2. Notes on the history of this repo September 2015: first version of this framework November 2

Matthew Flint 257 Dec 14, 2022
Library for unifying the approach to network mocking in iOS unit- & UI-tests.

TinkoffMockStrapping Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements Installati

Online financial ecosystem 22 Jan 3, 2023
Freezer is a library that allows your Swift tests to travel through time by mocking NSDate class.

Freezer Freezer is a library that allows your Swift tests to travel through time by mocking NSDate class. Usage Once Freezer.start() has been invoked,

Sergey Petrov 8 Sep 24, 2022
Efs - Easy function mocking/stubbing in Swift

Efs Efs, as the pronounced plural of letter F (for function), is a simple mockin

Jérémy Touzy 0 Feb 12, 2022
AutoMocker is a Swift framework that leverages the type system to let you easily create mocked instances of your data types.

AutoMocker Context AutoMocker is a Swift framework that leverages the type system to let you easily create mocked instances of your data types. Here's

Vincent Pradeilles 39 May 19, 2022
Automatic testing of your Pull Requests on GitHub and BitBucket using Xcode Server. Keep your team productive and safe. Get up and running in minutes. @buildasaur

Buildasaur Automatic testing of your Pull Requests on GitHub and BitBucket using Xcode Server. Keep your team productive and safe. Get up and running

Buildasaurs 774 Dec 11, 2022
Bluepill is a reliable iOS testing tool that runs UI tests using multiple simulators on a single machine

Bluepill is a tool to run iOS tests in parallel using multiple simulators. Motivation LinkedIn created Bluepill to run its large iOS test suite in a r

Mobile Native Foundation 3.1k Jan 3, 2023
T - A simple testing framework using closures and errors

t Quickly test expectations What is t? t is a simple testing framework using clo

OpenBytes 6 Nov 7, 2022
A collection of useful test helpers designed to ease the burden of writing tests for iOS applications.

MetovaTestKit is a collection of useful test helpers designed to ease the burden of writing tests for iOS applications. Requirements Installation Usag

null 23 Aug 29, 2021
Network testing for Swift

DVR DVR is a simple Swift framework for making fake NSURLSession requests for iOS, watchOS, and OS X based on VCR. Easy dependency injection is the ma

Venmo 650 Nov 3, 2022
The Swift (and Objective-C) testing framework.

Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by RSpec, Specta, and Ginkgo. // Swift import Quick import Nimbl

Quick 9.6k Dec 31, 2022
Snapshot testing tool for iOS and tvOS

SnapshotTest is a simple view testing tool written completely in Swift to aid with development for Apple platforms. It's like unit testing for views.

Pär Strindevall 44 Sep 29, 2022
UI Testing Cheat Sheet and Examples.

UI Testing Cheat Sheet This repository is complementary code for my post, UI Testing Cheat Sheet and Examples. The post goes into more detail with exa

Joe Masilotti 2.1k Dec 25, 2022
Fastbot is a model-based testing tool for modeling GUI transitions to discover app stability problems

Fastbot is a model-based testing tool for modeling GUI transitions to discover app stability problems. It combines machine learning and reinforcement learning techniques to assist discovery in a more intelligent way.

Bytedance Inc. 446 Dec 29, 2022