Lean Testing Python SDK
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
leantesting
tests
.gitignore
CONTRIBUTING.md
LICENSE
README.md
README.rst
__init__.py
setup.py

README.md

Lean Testing Python SDK

Python client for Lean Testing API

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
client = LeanTestingClient()

  • Get Current Token
client.getCurrentToken()
  • Attach New Token
client.attachToken('9ErdKZXpGPnvHuJ9di92eAFqrp14GKvfHMyclGGh')
  • Generate Authorization URL
generatedURL = client.auth.generateAuthLink(
	'DHxaSvtpl91Xos4vb7d0GKkXRu0GJxd5Rdha2HHx',
	'https://www.example.com/appurl/',
	'admin',
	'a3ahdh2iqhdasdasfdjahf26'
)
print( generatedURL )
  • Exchange Authorization Code For Access TOKEN
token = client.auth.exchangeAuthCode(
	'DHxaSvtpl91Xos4vb7d0GKkXRu0GJxd5Rdha2HHx',
	'DpOZxNbeL1arVbjUINoA9pOhgS8FNQsOkpE4CtXU',
	'authorization_code',
	'sOgY2DT47B2K0bqashnk0E6wUaYgbbspwdy9kGrk',
	'https://www.example.com/appurl/'
)
print( token )

  • Get User Information
client.user.getInformation()
  • Get User Organizations
client.user.organizations.all().toArray()
  • Retrieve An Existing User Organization
client.user.organizations.find(31).data

  • List All Projects
client.projects.all().toArray()
  • Create A New Project
newProject = client.projects.create({
	'name': 'Project135',
	'organization_id': 5779
})
print( newProject.data )
  • Retrieve An Existing Project
client.projects.find(3515).data
  • List Project Sections
client.projects.find(3515).sections.all().toArray()
  • Adding A Project Section
newSection = client.projects.find(3515).sections.create({
	'name': 'SectionName'
})
print( newSection.data )
  • List Project Versions
client.projects.find(3515).versions.all().toArray()
  • Adding A Project Version
newVersion = client.projects.find(3515).versions.create({
	'number': 'v0.3.1104'
})
print( newVersion.data )
  • List Project Test Cases
client.projects.find(3515).testCases.all().toArray()
  • List Project Test Runs
client.projects.find(3515).testRuns.all().toArray()
  • Retrieve Results For Test Run
client.projects.find(3515).testRuns.find(123).data
  • List Project Users
client.projects.find(3515).users.all().toArray()
  • Remove A Project User
client.projects.find(3515).users.delete(123)
  • List Bug Type Scheme
client.projects.find(3515).bugTypeScheme.all().toArray()
  • List Bug Status Scheme
client.projects.find(3515).bugStatusScheme.all().toArray()
  • List Bug Severity Scheme
client.projects.find(3515).bugSeverityScheme.all().toArray()
  • List Bug Reproducibility Scheme
client.projects.find(3515).bugReproducibilityScheme.all().toArray()

  • List All Bugs In A Project
client.projects.find(3515).bugs.all().toArray()
  • Create A New Bug
newBug = client.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
client.bugs.find(38483).data
  • Update A Bug
updatedBug = client.bugs.update(118622, {
	'title': 'Updated title',
	'status_id': 1,
	'severity_id': 2,
	'project_version_id': 10242
})
print( updatedBug.data )
  • Delete A Bug
client.bugs.delete(118622)

  • List Bug Comments
client.bugs.find(38483).comments.all().toArray()

  • List Bug Attachments
client.bugs.find(38483).attachments.all().toArray()
  • Upload An Attachment
filePath = '/place/Downloads/Images/1370240743_2294218.jpg'
newAttachment = client.bugs.find(38483).attachments.upload(filePath)
print( newAttachment.data )
  • Retrieve An Existing Attachment
client.attachments.find(21515).data
  • Delete An Attachment
client.attachments.delete(75258)

  • List Platform Types
client.platform.types.all().toArray()
  • Retrieve Platform Type
client.platform.types.find(1).data
  • List Platform Devices
client.platform.types.find(1).devices.all().toArray()
  • Retrieve Existing Device
client.platform.devices.find(11).data
  • List OS
client.platform.os.all().toArray()
  • Retrieve Existing OS
client.platform.os.find(1).data
  • List OS Versions
client.platform.os.find(1).versions.all().toArray()
  • List Browsers
client.platform.browsers.all().toArray()
  • Retrieve Existing Browser
client.platform.browsers.find(1).data
  • List Browser Versions
client.platform.browsers.find(1).versions.all().toArray()

  • Using Filters
client.projects.find(3515).bugs.all({'limit': 2, 'page': 5}).toArray()
  • Entity List Functions
browsers = client.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 = client.bugs.find(38483).comments.all({'limit': 1})
for page in comments:
	print( page )
  • Entity List Manual Iteration
comments = client.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.