Skip to main content

Lean Testing Python SDK

Python client for `Lean Testing API <https://leantesting.com/en/api-docs>`__

You can sign up for a Lean Testing account at https://leantesting.com.

Requirements

  • Python 3.0 or greater

Installation

You don’t need this source code unless you want to modify the package. If you just want to use the Lean Testing Python SDK, you should run:

pip install --upgrade leantesting

or

easy_install --upgrade leantesting

See http://www.pip-installer.org/en/latest/index.html for instructions on installing pip. If you are on a system with easy_install but not pip, you can use easy_install instead. If you’re not using virtualenv, you may have to prefix those commands with sudo. You can learn more about virtualenv at http://www.virtualenv.org/

To install from source, run:

python setup.py install

Usage

  • Including Lean Testing Python SDK

    from leantesting.Client import Client as LeanTestingClient
  • Creating a new instance

    LT = LeanTestingClient()

  • Get Current Token

    leantesting.getCurrentToken()
  • Attach New Token

    leantesting.attachToken('9ErdKZXpGPnvHuJ9di92eAFqrp14GKvfHMyclGGh')
  • Generate Authorization URL

    generatedURL = leantesting.auth.generateAuthLink(
        'DHxaSvtpl91Xos4vb7d0GKkXRu0GJxd5Rdha2HHx',
        'https://www.example.com/appurl/',
        'admin',
        'a3ahdh2iqhdasdasfdjahf26'
    )
    print( generatedURL )
  • Exchange Authorization Code For Access TOKEN

    token = leantesting.auth.exchangeAuthCode(
        'DHxaSvtpl91Xos4vb7d0GKkXRu0GJxd5Rdha2HHx',
        'DpOZxNbeL1arVbjUINoA9pOhgS8FNQsOkpE4CtXU',
        'authorization_code',
        'sOgY2DT47B2K0bqashnk0E6wUaYgbbspwdy9kGrk',
        'https://www.example.com/appurl/'
    )
    print( token )

  • Get User Information

    leantesting.user.getInformation()
  • Get User Organizations

    leantesting.user.organizations.all().toArray()

  • List All Projects

    leantesting.projects.all().toArray()
  • Create A New Project

    newProject = leantesting.projects.create({
        'name': 'Project135',
        'organization_id': 5779
    })
    print( newProject.data )
  • Retrieve An Existing Project

    leantesting.projects.find(3515).data
  • List Project Sections

    leantesting.projects.find(3515).sections.all().toArray()
  • Adding A Project Section

    newSection = leantesting.projects.find(3515).sections.create({
        'name': 'SectionName'
    })
    print( newSection.data )
  • List Project Versions

    leantesting.projects.find(3515).versions.all().toArray()
  • Adding A Project Version

    newVersion = leantesting.projects.find(3515).versions.create({
        'number': 'v0.3.1104'
    })
    print( newVersion.data )
  • List Project Users

    leantesting.projects.find(3515).users.all().toArray()
  • List Bug Type Scheme

    leantesting.projects.find(3515).bugTypeScheme.all().toArray()
  • List Bug Status Scheme

    leantesting.projects.find(3515).bugStatusScheme.all().toArray()
  • List Bug Severity Scheme

    leantesting.projects.find(3515).bugSeverityScheme.all().toArray()
  • List Bug Reproducibility Scheme

    leantesting.projects.find(3515).bugReproducibilityScheme.all().toArray()

  • List All Bugs In A Project

    leantesting.projects.find(3515).bugs.all().toArray()
  • Create A New Bug

    newBug = leantesting.projects.find(3515).bugs.create({
        'title': 'Something bad happened...',
        'status_id': 1,
        'severity_id': 2,
        'project_version_id': 10242
    })
    print( newBug.data )
  • Retrieve Existing Bug

    leantesting.bugs.find(38483).data
  • Update A Bug

    updatedBug = leantesting.bugs.update(118622, {
        'title': 'Updated title',
        'status_id': 1,
        'severity_id': 2,
        'project_version_id': 10242
    })
    print( updatedBug.data )
  • Delete A Bug

    leantesting.bugs.delete(118622)

  • List Bug Comments

    leantesting.bugs.find(38483).comments.all().toArray()

  • List Bug Attachments

    leantesting.bugs.find(38483).attachments.all().toArray()
  • Upload An Attachment

    filePath = '/place/Downloads/Images/1370240743_2294218.jpg'
    newAttachment = leantesting.bugs.find(38483).attachments.upload(filePath)
    print( newAttachment.data )
  • Retrieve An Existing Attachment

    leantesting.attachments.find(21515).data
  • Delete An Attachment

    leantesting.attachments.delete(75258)

  • List Platform Types

    leantesting.platform.types.all().toArray()
  • Retrieve Platform Type

    leantesting.platform.types.find(1).data
  • List Platform Devices

    leantesting.platform.types.find(1).devices.all().toArray()
  • Retrieve Existing Device

    leantesting.platform.devices.find(11).data
  • List OS

    leantesting.platform.os.all().toArray()
  • Retrieve Existing OS

    leantesting.platform.os.find(1).data
  • List OS Versions

    leantesting.platform.os.find(1).versions.all().toArray()
  • List Browsers

    leantesting.platform.browsers.all().toArray()
  • Retrieve Existing Browser

    leantesting.platform.browsers.find(1).data
  • List Browser Versions

    leantesting.platform.browsers.find(1).versions.all().toArray()

  • Using Filters

    leantesting.projects.find(3515).bugs.all({'limit': 2, 'page': 5}).toArray()
  • Entity List Functions

    browsers = leantesting.platform.browsers.all()
    print( browsers.total() )
    print( browsers.totalPages() )
    print( browsers.count() )
    print( browsers.toArray() )
  • Entity List Iterator When used in for loops, entity lists will automatically cycle to first page, regardless of page filter. After ending the loop, the entity list will NOT revert to first page or the initial instancing page filter setting in order not to cause useless API request calls.

    comments = leantesting.bugs.find(38483).comments.all({'limit': 1})
    for page in comments:
        print( page )
  • Entity List Manual Iteration ```python comments = leantesting.bugs.find(38483).comments.all({‘limit’: 1}) print( comments.toArray() )

Will return false if unable to move forwards

comments.next(); print( comments.toArray() )

Will return false if already on last page

comments.last(); print( comments.toArray() )

Will return false if unable to move backwards

comments.previous(); print( comments.toArray() )

Will return false if already on first page

comments.first(); print( comments.toArray() ) ```

Security

Need to report a security vulnerability? Send us an email to support@crowdsourcedtesting.com or go directly to our security bug bounty site https://hackerone.com/leantesting.

Development

Install dependencies:

pip install -e .

Tests

Install dependencies as mentioned above, then you can run the test suite:

python -m unittest2 discover

Contributing

Please see CONTRIBUTING for details.

Metadata

Release files for leantesting 1.2.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 leantesting 1.2.0
File Size Uploaded
leantesting-1.2.0.tar.gz 23.5 kB Details

Release files / leantesting-1.2.0.tar.gz

Download URL leantesting-1.2.0.tar.gz
Size 23.5 kB
Tags Source
SHA-256 checksum
How to use checksums
3fa51d3e83e268990a811d889e5dc6983764a1c53357af0d7200ec7f392c42c5
BLAKE2b-256 checksum
How to use checksums
b17d5eb1ca7dd06179a6ee078399c65b3d234ac369d951fdbc0d99d983a9411b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.2.0 This release

1 release file

1.1.0

1 release file

1.0.0

1 release file

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