Skip to main content

pytest-stf PyPI version

pytest plugin for OpenSTF

Plugin for simplify OpenSTF usage with pytest framework by providing simple fixture that do all primitive tasks for appium based tests.

Target is to easily scale up tests in CI environment where external stf service is used to provide android phones.

Plugin based on stf-appium-python-client

pytest arguments

openstf:
  --stf_host=STF_HOST   Openstf host
  --stf_token=STF_TOKEN
                        Openstf access token
  --phone_requirements=PHONE_REQUIREMENTS
                        Phone requirements
  --stf_allocation_timeout=STF_ALLOCATION_TIMEOUT
                        Maximum time in seconds after which STF releases allocated devices
  --appium_server=APPIUM_SERVER
                        Appium server API URL
  --appium_capabilities=APPIUM_CAPABILITIES
                        Appium capabilities
  --appium_logs=APPIUM_LOGS
                        Appium server log file path

Fixtures

allocated_phone

  • Session scoped
  • Find and allocate a phone based on --phone_requirements cli argument from STF or using pytest-lockable

NOTE: only one phone is handled by this fixture.

phone_with_adb

  • Session scoped
  • Depends on allocated_phone
  • Create ADB tunnel to phone if using STF

NOTE: Android SDK (commandline tools, platform tools and build tools) need to be installed separately!

appium_server

  • Session scoped
  • Depends on phone_with_adb
  • Start Appium server or alternatively use remote one passed via --appium_server cli argument or appium_server lockable resource property

NOTE: appium need to be installed separately! (npm i appium) .

appium_client

  • Session scoped
  • Depends on appium_server
  • Start Appium webdriver client

capabilities

  • Session scoped
  • Returns arguments passed to Appium webdriver
  • Tests can override this fixture in order to pass custom arguments

appium_args

  • Session scoped
  • Returns arguments passed to Appium server
  • Tests can override this fixture in order to pass custom arguments

Usage example

sample.py:

from appium.webdriver.webdriver import WebDriver


def test_create(appium_client):
    client, appium, adb, phone = appium_client
    # device is dictionary of device metadata
    # adb: AdbServer instance, that is already connected
    # appium: AppiumServer instance that provide server address for appium client
    print(phone)
    print(f'wd_hub: {appium.get_api_path()}')
    
    client: WebDriver
    client, *_ = appium_client
    URL = 'https://google.com'
    client.get(URL)
    url = client.current_url
    assert url == URL, 'Wrong URL'

Execution:

> pytest sample/test_samples.py --stf_host localhost --stf_token $TOKEN --phone_requirements platform=Android

See more examples from sample/test_samples.py.

Custom capabilities:

> pytest --appium_capabilities cab=val1&cab=val2

Usage with local devices

Testing with a local device you can omit --stf_host and --stf_token cli arguments and use lockable resources file (defaults to resources.json).

resources.json example:

[
  {
    "id": "1",
    "type": "Phone",
    "platform": "Android",
    "online": true,
    "hostname": <HOSTNAME>,
    "version": "12",
    "appium_server": "http://localhost:4723"
  }
]

Execution:

> pytest sample/test_samples.py --phone_requirements platform=Android

NOTE: Appium server need to be run separately! (appium -a 127.0.0.1)

Release files for pytest-stf 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-stf 0.8.0
File Size Uploaded
pytest-stf-0.8.0.tar.gz 7.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-stf 0.8.0
File Interpreter ABI Platform
pytest_stf-0.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 13.1 kB

Release files / pytest-stf-0.8.0.tar.gz

Download URL pytest-stf-0.8.0.tar.gz
Size 7.8 kB
Tags Source
SHA-256 checksum
How to use checksums
f479933cd39e9aa02de0e249e1f92bf56ea7bda8fd55166e55a3cc2e52e891fb
BLAKE2b-256 checksum
How to use checksums
f7b8db8c8238a423708a20f6f780859caf053d857642805ba0d5fe859d99c162
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.18

Release files / pytest_stf-0.8.0-py3-none-any.whl

Download URL pytest_stf-0.8.0-py3-none-any.whl
Size 5.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
233d405e670a247843b5eefa0c92d63798a44eec668cbf04e70419ed5ae59a38
BLAKE2b-256 checksum
How to use checksums
e4f0e1affcee94bf58f9b47321367a5b1ef613cef965b47315bfb56bc671f1e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.18

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page