Skip to content
/ xayah Public

A lightweight testing tool with test report functionality

License

Notifications You must be signed in to change notification settings

ualisars/xayah

Repository files navigation

xayah

A lightweight testing tool with test report functionality

Table of contents

General info

Xayah is used to test and generate report for python applications. It is built to combine a testing tool with test report functionality. It allows testing modules and generate a test report in JSON format

test suite example:

from xayah import TestSuite, TestResult

def add(a, b):
  return a + b

@TestSuite.init
class TestAdd:
  def test_add(self):
     assert add(2, 3) == 5

# generating a test report
TestAdd.run_test_cases()
report = TestResult().create_test_result()

Installation

Xayah is available on PyPI:

python -m pip install xayah

Documentation

Xayah's documentation can be found in readthedocs: https://xayah.readthedocs.io/en/latest/

Features

  • adding title, description, severity levels, etc.
  • test parametrization
  • steps
  • skipping tests
  • generating test report

Usage

In order to generate report, the test class should be decorated with TestSuite.init method:

@TestSuite.init
class CheckTestCase:
    def test_method(self):
        assert 1 == 1

then all test method (with test prefix) of the tested class can be executed by calling run_test_cases method:

CheckTestCase.run_test_cases()

in order to created test result TestResult().create_test_result() method should be called:

result = TestResult().create_test_result()

then test result can be parsed in any format

Telegram_bot_example

Originally, xayah was built as a test report tool for telegram bots.

Here you can see the simple usage in telegram bot with selenium:

from aiogram import Bot, Dispatcher, executor, types
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from xayah import TestResult, TestSuite, TestCase

API_TOKEN = 'BOT TOKEN HERE'

# Initialize bot and dispatcher
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

@TestSuite.init
@TestSuite.title('Google main page')
class TestGoogle:
    @TestCase.title('page title is Google')
    def test_google(self):
        driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
        driver.get('https://www.google.com/')
        assert driver.title == 'Google', 'title is not google'


@dp.message_handler(commands=['test'])
async def test(message: types.Message):
    webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    TestGoogle.run_test_cases()
    result = TestResult().create_test_result()
    test_suite = result.get(TestGoogle.__name__)
    test_suite_title = test_suite.get('title')
    test_case = test_suite.get('test_cases')[0]
    test_case_title = test_case.get('title')
    test_case_status = test_case.get('status')
    text = f'<pre><b>{test_suite_title}:</b></pre>\n  <pre>{test_case_title} - {test_case_status}</pre>'
    await message.reply(text, parse_mode=types.ParseMode.HTML)
    
if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

telegram bot's response:

Google main page:
  
page title is Google - passed

Future_work

Planned features:

  • Console application
  • Running xayah tests through console application
  • JSON generation
  • HTML page generation from the test report
  • PDF page generation from the test report
  • Integration with pytest
  • Making telegram bot integration easier

About

A lightweight testing tool with test report functionality

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages