Succulent is a Swift library to provide API recording and replay for automated testing on iOS.
Succulent creates a local web server that you point your app to, instead of the live API. In recording mode, Succulent receives the API request from the app and then makes the same request to the live API, then records the request and response for replay.
Succulent can also handle mutating requests, like POST, PUT and DELETE, as after a mutating request it will store a new version of subsequent responses, so that during playback it can correctly simulate the change.
Succulent solves the problem of getting repeatable API results to support stable automated testing.
Setup Succulent in your XCTest's setUp
method:
override func setUp() {
super.setUp()
if let traceUrl = self.traceUrl {
// Replay using an existing trace file
succulent = Succulent(traceUrl: traceUrl)
} else {
// Record to a new trace file
succulent = Succulent(recordUrl: self.recordUrl, baseUrl: liveApiBaseUrl)
}
succulent.start()
launchEnvironment["succulentBaseURL"] = "http://localhost:\(succulent.actualPort)/"
}
/// The name of the trace file for the current test
private var traceName: String {
return self.description.trimmingCharacters(in: CharacterSet(charactersIn: "-[] ")).replacingOccurrences(of: " ", with: "_")
}
/// The URL to the trace file for the current test when running tests
private var traceUrl: URL? {
let bundle = Bundle(for: type(of: self))
return bundle.url(forResource: self.traceName, withExtension: "trace", subdirectory: "Succulent")
}
/// The URL to the trace file for the current test when recording
private var recordUrl: URL {
let bundle = Bundle(for: type(of: self))
let recordPath = bundle.infoDictionary!["TraceRecordPath"] as! String
return URL(fileURLWithPath: "\(recordPath)/\(self.traceName).trace")
}
Note that recordUrl
uses a string that must be setup in your Info.plist
file:
<key>TraceRecordPath</key>
<string>$(PROJECT_DIR)/Succulent/</string>
With this setting, Succulent records trace files into your project source tree. Therefore your Succulent traces are committed to source control with your test files, and when you build and run your tests the traces are copied into the test application.
Finally, in your app, look for the "succulentBaseURL"
environment variable, and use that URL in place
of your live API URL:
let apiBaseUrl = ProcessInfo.processInfo.environment["succulentBaseURL"]
There is an example project in the Example
directory. To run the example project, run pod install
from within the Example directory, then open the Xcode workspace and run the tests. The example project demonstrates some of the use of Succulent in a stand-alone setting rather than as it is intended, which is for UI automation testing of another app.
Succulent is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "Succulent"
Succulent is available under the MIT license. See the LICENSE file for more info.
succulent's People
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.