Skip to content

Commit

Permalink
Add LambdaTest integration (from #2424) (#2447)
Browse files Browse the repository at this point in the history
* change docs

* chnages revert

* added lambdatest runner

* added LambdaTest Runner

* changes comments

* changes for lambdatest runner

* removed TODO

* added the LT Doc

* added the LT Doc

* added the LT Doc

* Fix newlines and typos

* Rename Lambdatest.mdx to lambdatest.mdx

* Add docs redirects and navigation

* Remove unnecessary redirect

* Fix whitespace

* Fix wording

---------

Co-authored-by: Gauravpandeyr <[email protected]>
  • Loading branch information
mateuszwojtczak and Gauravpandeyr authored Dec 9, 2024
1 parent daefa2c commit 36c9835
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 0 deletions.
4 changes: 4 additions & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,10 @@
{
"title": "Browserstack",
"href": "/documentation/integrations/browserstack"
},
{
"title": "LambdaTest",
"href": "/documentation/integrations/lambdatest"
}
]
},
Expand Down
62 changes: 62 additions & 0 deletions docs/documentation/integrations/lambdatest.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
title: Integrations - LambdaTest
---

# LambdaTest overview

[LambdaTest App Test Automation] is a popular cloud device farm.

<Warning>This integration is currently Android-only.</Warning>

### Change runner

Modify the **app-level build.gradle**:

```groovy title="android/app/build.gradle"
android {
// ...
defaultConfig {
//...
testInstrumentationRunner "pl.leancode.patrol.LambdaTestPatrolJUnitRunner"
}
// ...
}
// ...
```

### Upload to LambdaTest

To run Android UI tests on LambdaTest:

1. Upload the app under test APK to LambdaTest ([see docs][LT_app_docs])
2. Upload the instrumentation app APK to LambdaTest ([see docs][LT_test_docs])
3. Start test execution on LambdaTest ([see docs][LT_execute_docs])

```
$ export LAMBDATEST_PROJECT=AwesomeApp # optional
$ export LAMBDATEST_DEVICES="[\"Pixel 7 Pro-13\"]" # optional
• Building apk with entrypoint test_bundle.dart...
✓ Completed building apk with entrypoint test_bundle.dart (11.0s)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 82.4M 100 255 100 82.4M 7 2897k 0:00:31 0:00:36 0:00:02 2051k
Uploaded app, "app_id": "lt://APP1016047291733313441063634",
Uploaded testsuite, "app_id": "lt://APP1016047291733312896265135",
{
"status": [
"Success"
],
"buildId": [
"5875687"
],
"message": [
""
]
}
```

[LT_app_docs]: https://www.lambdatest.com/support/docs/getting-started-with-flutter-dart-android-automation/#step-2-upload-your-application
[LT_test_docs]: https://www.lambdatest.com/support/docs/getting-started-with-flutter-dart-android-automation/#step-3-uploading-test-suite
[LT_execute_docs]: https://www.lambdatest.com/support/docs/getting-started-with-flutter-dart-android-automation/#step-4-executing-the-test
[LambdaTest App Test Automation]: https://www.lambdatest.com/app-test-automation
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package pl.leancode.patrol;

import android.util.Log;
import pl.leancode.patrol.contracts.PatrolAppServiceClientException;

import java.net.Inet4Address;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.Objects;

public class LambdaTestPatrolJUnitRunner extends PatrolJUnitRunner {
@Override
public PatrolAppServiceClient createAppServiceClient() {
// Create client with a default constructor (localhost:8082) by default.
PatrolAppServiceClient client = new PatrolAppServiceClient();
waitForPatrolAppService();

try {
client.listDartTests();
} catch (PatrolAppServiceClientException ex) {
ex.printStackTrace();
// If the client on localhost:8082 fails, let's apply the wokraround
Logger.INSTANCE.i("PatrolAppServiceClientException in createAppServiceClient " + ex.getMessage());
Logger.INSTANCE.i("LOOPBACK: " + getLoopback());
client = new PatrolAppServiceClient(getLoopback());
}

return client;
}

public String getLoopback() {
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface i = interfaces.nextElement();
Log.d("LOOPBACK", i.getDisplayName());
if (Objects.equals(i.getDisplayName(), "tun0")) {
for (java.net.InterfaceAddress a : i.getInterfaceAddresses()) {
if (a.getAddress() instanceof Inet4Address) {
return a.getAddress().toString().substring(1);
}
}
}

}
} catch (SocketException e) {
}

return null;
}
}

0 comments on commit 36c9835

Please sign in to comment.