Blog

Kiwi TCMS 8.0

We're happy to announce Kiwi TCMS version 8.0!

IMPORTANT: this is a major release which includes important database and API changes, several improvements and bug fixes. Multiple API methods are now incompatible with older releases and extra caution needs to be applied when upgrading via docker-compose.yml because newer MariaDB versions are breaking direct upgrades from existing installations!

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Docker images:

kiwitcms/kiwi       latest  71a55e353da2    557 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

Changes since Kiwi TCMS 7.3

Improvements

  • Update Django from 3.0.2 to 3.0.3
  • Update django-grappelli from 2.13.3 to 2.14.1
  • Update markdown from 3.1.1 to 3.2
  • Update python-gitlab from 1.15.0 to 2.0.1
  • Update pygithub from 1.45 to 1.46
  • Allow customization of test execution statuses via admin. For more information see https://kiwitcms.readthedocs.io/en/latest/admin.html#test-execution-statuses. Fixes Issue #236
  • Add passing rate chart to Execution trends telemetry
  • Documentation updates (@Prome88)

Database

This release adds several migrations which alter the underlying database schema by renaming multiple columns.

WARNINGS:

  • SQLite has very poor capabilities for altering schema and it will break when run with existing database! If you had deployed Kiwi TCMS with SQLite for production purposes you will not be able to upgrade! We recommend switching to Postgres first and then upgrading!

  • docker-compose.yml has been updated from MariaDB 5.5 to MariaDB 10.3. The 10.x MariaDB containers change their datadir configuration from /var/lib/mysql to /var/lib/mysql/data! We recommend first upgrading your MariaDB version, using Kiwi TCMS 7.3 and afterwards upgrading to Kiwi TCMS 8.0:

    1. Backup existing database with:

      docker exec -it kiwi_db mysqldump -u kiwi -pYourPass kiwi > backup.sql
      
    2. docker-compose down

    3. docker volume rm kiwi_db_data - will remove existing data volume b/c of incompatibilities between different MariaDB versions

    4. docker-compose up - will recreate data volume with missing data. e.g. manage.py showmigrations will report that 0 migrations have been applied.

    5. Restore the data from backup:

      cat backup.sql | docker exec -u 0 -i kiwi_db /opt/rh/rh-mariadb103/root/usr/bin/mysql kiwi
      

      note: This connects to the database as the root user

    6. Proceed to upgrade your Kiwi TCMS container !

CHANGES:

  • Remove model fields of type AutoField. They are a legacy construct and shouldn't be specified in the source code! Django knows how to add them dynamically. These are:
    • Tag.id
    • TestCaseStatus.id
    • Category.id
    • PlanType.id
    • TestExecutionStatus.id
  • Remove db_column attribute from model fields
  • Rename several primary key fields to id:
    • Build.build_id -> Build.id
    • TestRun.run_id -> TestRun.id
    • TestPlan.plan_id -> TestPlan.id
    • TestCase.case_id -> TestCase.id
    • TestExecution.case_run_id -> TestExecution.id

API

WARNING:

The database schema changes mentioned above affect multiple API methods in a backwards incompatible way! There is possibility that your API scripts will also be affected. You will have to adjust those to use the new field names where necessary!

CHANGES:

  • Methods Build.create(), Build.filter() and Build.update() will return id instead of build_id field
  • Method TestRun.get_cases() will return execution_id instead of case_run_id field and id instead of case_id field
  • Methods TestRun.add_case(), TestExecution.create(), TestExecution.filter() and TestExecution.update() will return id instead of case_run_id field
  • Methods TestRun.create(), TestRun.filter(), TestRun.update() will return id instead of run_id field
  • Methods TestPlan.create(), TestPlan.filter() and TestPlan.update() will return id instead of plan_id field
  • Methods TestCase.add_component(), TestCase.create(), TestCase.filter() and TestCase.update() will return id instead of case_id field

NOTES:

Kiwi TCMS automation framework plugins have been updated to work with the newest API. At the time of Kiwi TCMS v8.0 release their versions are:

  • kiwitcms-tap-plugin v8.0.1
  • kiwitcms-junit.xml-plugin v8.0.1
  • kiwitcms-junit-plugin v8.0

Bug fixes

  • Allow displaying lists with more then 9 items when reviewing test cases. Fixes Issue #339 (Mfon Eti-mfon)
  • Make tcms.tests.storage.RaiseWhenFileNotFound` capable of finding finding static files on Windows which enables development mode for folks not using Linux environment. See SO #55297178 (Mfon Eti-mfon)
  • Allow changing test execution status without adding comment. Fixes Issue #1261
  • Properly refresh test run progress bar when changing statuses. Fixes Issue #1326
  • Fix a bug where updating test cases from the UI was causing text and various other fields to be reset. Fixes Issue #1318

Refactoring

  • Extract attachments widget to new template. Fixes Issue #1124 (Rosen Sasov)
  • Rename RPC related classes. Fixes Issue #682 (Rosen Sasov)
  • Add new test (Mariyan Garvanski)
  • Start using GitHub actions, first for running flake8
  • Remove unused TestCase.get_previous_and_next()
  • Remove unused TestCaseStatus.string_to_instance()
  • Remove unused TestCase.create()
  • Remove unused json_success_refresh_page()
  • Remove unused fields from SearchPlanForm
  • Use JSON-RPC in previewPlan()
  • Remove toggleTestCaseContents(), duplicate of toggleTestExecutionPane()
  • Refactor a few more views to class-based

GitHub Marketplace listing deprecation

As we've stated previously Kiwi TCMS has migrated to a new GitHub backend and OAuth tokens for the previous backend have been revoked and the existing listing on GitHub Marketplace is deprecated. It is a non-functioning app at the moment!

It is not possible for us to cancel Marketplace subscriptions programatically, that is GitHub does not provide such API. Active subscribers please follow these 3 steps to help us clean up stale information:

  • Go to https://github.com/marketplace/kiwi-tcms
  • From "Edit your plan" button at the top select your GitHub account
  • Then click "Cancel this plan" link which is at the left-hand side at the bottom of the description box!

How to upgrade

Backup first! If you are using Kiwi TCMS as a Docker container then:

cd path/containing/docker-compose/
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb-103-centos7
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

WHERE: docker-compose.yml has been updated from your private git repository! The file provided in our GitHub repository is an example. Not for production use!

WARNING: kiwitcms/kiwi:latest and docker-compose.yml will always point to the latest available version! If you have to upgrade in steps, e.g. between several intermediate releases, you have to modify the above workflow:

# starting from an older Kiwi TCMS version
docker-compose down
docker pull kiwitcms/kiwi:<next_upgrade_version>
edit docker-compose.yml to use kiwitcms/kiwi:<next_upgrade_version>
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
# repeat until you have reached latest

Happy testing!

Hello testers, I have to admit that I made a rookie mistake and deleted the entire email database for the Kiwi TCMS newsletter! And of course we didn't have a backup of this database :-(. Please re-subscribe here and read below if you are interested to know what happened.

Last week, while exploring how to cancel active subscriptions for our deprecated GitHub Marketplace listing I found there is no way to cancel those programatically. So I've compiled a list of email addresses and decided to send subscribers an email asking them to cancel their subscriptions.

For this purpose I decided to import the contacts into Mailchimp because it gives you a better interface to design the actual message, include images in the message body, preview and test the message before it is sent! The import of addresses went fine, new addresses were tagged appropriately to separate them from the rest of the newsletter audience but they were not subscribed to receive emails automatically.

I selected "non-subscribed" option when importing as a second barrier to accidentally emailing people who do not want to receive regular news from us! However it turned out Mailchimp can't send messages to non-subscribed addresses! Maybe that's part of their attempts to be GDPR compliant.

So I decided to delete the freshly imported addresses, import them again and this time tag + subscribe them during the import! When selecting the addresses for deletion I am 99% confident I did filter them by tag first and then selected DELETE! And the entire contacts list was gone!

I've also contacted Mailchimp immediately to ask whether or not the addresses can be restored. Unfortunately they are trying to be super GDPR compliant and claim they don't have this information into their system anymore. And in this particular case we've been relying on the vendor to keep backups on their end so didn't even think about trying to backup this database!

For users who have accounts at https://public.tenant.kiwitcms.org we do have their email addresses but we're not going to automatically re-subscribe them. We've stopped auto-subscribing 2 years ago and also there's no way of telling which addresses were on the list in the first hand.

Please re-subscribe here and I promise we're going to start backing up the newsletter database as well.

Thank you!

Hello testers as we've stated previously Kiwi TCMS has migrated to a new GitHub backend. The previous OAuth application with ID e45b09369720518e1fc3 has been deprecated.

OAuth tokens for this application have been revoked and you should have received an email notification from GitHub about this.

If you still have an active Marketplace listing we kindly ask you to cancel it until we're able to deploy the improved integration on GitHub Marketplace again.

Thank you!

Project roadmap 2020

Hello testers, the Kiwi TCMS team sat down together last week and talked about what we feel is important for us during the upcoming year. This blog post outlines our roadmap for 2020!

roadmap image 2020

Project sustainability

The big goal towards which we are striving is to turn Kiwi TCMS into a sustainable open source project. For now this means several key areas:

1) Team
2) Technical
3) Community

Team

Right now we have a core team with 6 newcomers on-boarding. Engineering performance is all over the place with some people contributing too much while others contributing too little. More importantly there is no consistent pace of contributions which makes planning timely completion of technical tasks impossible.

At the moment we do operate as a bunch of disconnected people who happen to talk to each other from time to time.

We are going to adjust our internal processes and how we on-board new members. In fact we did our first "scrum-like" meeting this week and agreed to change our existing practice and strive to become better as a team!

Goal: to have a cohesive team at the end of the year which operates with a predictable capacity.

Goal: 1 PR/week/person as broad measure of individual performance.

Technical

The areas shown on the picture above will receive more priority.

Goal: complete remaining Telemetry features.

Goal: complete bug-tracker integration milestone.

Goal: all pylint issues resolved.

Goal: migrate all remaining legacy templates to Patternfly UI. See patternfly-migration milestone.

Goal: where FE sends AJAX requests to BE views replace with JSON RPC API instead.

Extra: start tackling the JavaScript mess that we have. This depends and is related to Patternfly migration and overall refactoring.

Extra: make it easier for downstream installations to extend and override parts of Kiwi TCMS in order for users to adjust the system to their own needs. The system is pretty flexible as-is but there have been requests, both online and offline, to provide some extra features! We'll start looking into them, likely making partial progress in the next 12 months.

Community

Last year Kiwi TCMS had massive success at every single conference that we've been to. Both project and team have been well received. While we are going to continue being part of various communities around the world we are trying to limit extensive travel and focus on functionality and partnerships which will increase Kiwi TCMS eco-system, make the project even more popular and drive further adoption!

Goal: extended GitHub integration via kiwitcms-github-app plugin.

Goal: release the following test automation framework plugins for Kiwi TCMS:

For more information see test-automation-plugins milestone.

Ongoing: work with our partners from the proprietary and open source worlds. This is hard to quantify and lots of it doesn't actually depend on the team. However we are continuing to talk to them regularly. Expect new feedback to become available under GitHub Issues.

Extra: see what we can do about testing productivity! This has always been part of our mission but we have not been able to produce anything worth sharing. We do have ideas in this space but we are generally looking for partnerships and collaborations. It is very likely that there will not be very much progress on this front because it is hard to define it properly :-(.

Summary

At the end of the day most of these goals compliment each other and help drive all of them to completion. Many of the still on-boarding people have expressed desire to improve their Python & Django skills. Working to resolve issues in the above specific areas will give them this opportunity! I expect they will show good progress on their respective tasks so we can write more about them on this blog.

Happy testing!

Kiwi TCMS 7.3

We're happy to announce Kiwi TCMS version 7.3!

IMPORTANT: this is a critical security update for CVE-2019-19844: Potential account hijack via password reset form!

Also migrates to Django 3.0 and includes several other improvement and bug-fixes!

You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Docker images:

kiwitcms/kiwi       latest  4026ee62e488    556 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

Changes since Kiwi TCMS 7.2

Security

  • Update Django from 2.2.8 to 3.0.2

Improvements

  • Update python-gitlab from 1.13.0 to 1.15.0
  • Update pygithub from 1.44.1 to 1.45
  • Update django-grappelli from 2.13.2 to 2.13.3
  • Bump django-uuslug from 1.1.9 to 1.2.0
  • Bump django-attachments from 1.4.1 to 1.5
  • Bump django-vinaigrette from 1.2.0 to 2.0.1
  • Update marked to version 0.8.0
  • Update prismjs to version 1.19.0
  • Generalize existing kiwitcms.telemetry.plugins handling code by renaming the entry point to kiwitcms.plugins
  • Refactor views to class based (Svetlozar Stoyanov)
  • Teach Kiwi TCMS to automatically report bugs to GitHub when the user selects such action. Fall back to opening a new browser window for manually entering the bug if something goes wrong

Database

  • When migrating from the older Bug model to LinkReference skip bugs which are attached directly to test cases instead of test executions. See SO #59321756
  • Remove AutoField.max_length because it is ignored by Django 3

API

  • TestCase.update() method now allows to update the author field. Fixes Issue #630

Bug fixes

  • Modify template pass object as test_plan. Fixes Issue #1307 (Ed Oswald S. Go)
  • Enable version selection in test plan search page. Fixes Issue #1276
  • Apply percentage rounding for completed test executions. Fixes Issue #1230
  • Fix a logical bug in conditional expression when deciding whether or not reporting bugs to selected issue tracker is disabled

Refactoring

  • Add code of conduct. Fixes Issue #1185 (Rosen Sasov)
  • Add test for KIWI_DONT_ENFORSE_HTTPS. Closes Issue #1274
  • Replace ugettext_lazy with gettext_lazy for Django 3
  • Remove BaseCaseSearchForm.bug_id field
  • Refactor testcase edit view to class-based
  • Happy New Year pylint

GitHub integration

The hosted version of Kiwi TCMS ships with additional GitHub integration. See GitHub App announcement and github-app for more information!

Upcoming conferences

The next two events we are going to participate are:

If you are around come and say "Happy testing"!

How to upgrade

Backup first! If you are using Kiwi TCMS as a Docker container then:

cd path/containing/docker-compose/
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

WHERE: docker-compose.yml has been updated from your private git repository! The file provided in our GitHub repository is an example. Not for production use!

WARNING: kiwitcms/kiwi:latest and docker-compose.yml will always point to the latest available version! If you have to upgrade in steps, e.g. between several intermediate releases, you have to modify the above workflow:

# starting from an older Kiwi TCMS version
docker-compose down
docker pull kiwitcms/kiwi:<next_upgrade_version>
edit docker-compose.yml to use kiwitcms/kiwi:<next_upgrade_version>
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
# repeat until you have reached latest

Happy testing!

Hello testers, Kiwi TCMS is migrating from its OAuth backend to the so called "GitHub App" backend in order to enable further integration with GitHub's PR flow as stated previously in our yearly goals. This blog post outlines the differences between the old and the new!

The old OAuth application only had access to your username, name and email for authentication purposes. Its authorization screen looked like so:

OAuth login screen

GitHub Apps on the other hand are designed for more granular access and tighter integration with the GitHub platform. This type of application still allows you to perform 1-click login into https://public.tenant.kiwitcms.org. If this is your first time logging into Kiwi TCMS after the migration you will see the following screen:

App login screen

Notice how the heading, information section and action button are slightly different! The important section is Resources on your account! We still only need your name, username and email address! Existing Kiwi TCMS accounts (from before the migration) will continue to work and they will still have access to all of their data previously created. Authorization of this new GitHub app (e.g. login only) does not give it permissions to access your repositories and act on your behalf.

To permit this GitHub App to access your repositories and/or act on your behalf you must Install it first. That is tell Kiwi TCMS GitHub integration code what kind of resources from your GitHub account it is allowed to access. You may install into your personal GitHub account or an organizational account! You may do this by following the Install & Authorize button on our home page or directly from https://github.com/apps/kiwi-tcms! The screen should look like this:

App installation screen

Initially we ask for read-only access to a few resources so Kiwi TCMS can start receiving webhooks from GitHub and synchronize information about your repositories into our database. This is documented both on the app installation screen itself (required by GitHub) and on https://github.com/kiwitcms/github-app!

Further ideas about integration between GitHub and Kiwi TCMS, including the original idea about status checks from Issue #700, can be found at https://github.com/kiwitcms/github-app/issues.

Help us grow

After this migration we're back to zero! The thousands of authorizations we've had on our legacy OAuth app can't be migrated to the new app. This also means our listing on GitHub Marketplace will be taken down and we have to qualify through the entire process from scratch.

Please help us get back on track! Here's what we ask you to do (in this order):

Thank you! Happy testing and happy new year!

Roadmap status report for 2019

Hello everyone, in this article I will outline the progress that the Kiwi TCMS team has made towards achieving the goals on our 2019 roadmap. TL,DR: last year we've made lots of big and visible changes in Kiwi TCMS. This year less so. Progress has been slower than before and not so much visible. Community and team is growing. More contributors are welcome.

Complete the internal refactoring

Status: small progress, needs help

CodeClimate progress is:

  • -60 code smells
  • -55 duplications
  • -50 other issues
  • 4.4% technical debt improvement
  • -240 hrs remaining until issues are fixed

The trend is showing less issues remaining but it has been a slow progress. As we fix the easier items the remaining ones become harder to deal with.

We've done minor work related to fixing issues reported by pylint. Around 150 of them still remain!

We have not done any targeted work to resolve other issues reported by Scrutinizer, remove vendored-in JavaScript libraries, JavaScript refactoring or classification of issues in 3rd party dependencies.

Redesign the UI templates with the help of Patternfly

Status: 60% done, needs help

There are 22 HTML templates remaining to be redesigned (from 59). That's mostly due to internal cleanup and some refactoring! Test plan and Test run pages are the two major templates that still need to be redesigned with Patternfly.

Modernize reporting aka Telemetry

Status: 60% done, in progress, behind schedule

The specs for the new Telemetry system have been defined after taking into account feedback on GitHub issues. Anton Sankov is the leading developer for this feature. So far we have 4 telemetry reports merged: testing break-down, status matrix, execution trends and flaky tests.

There are lots of minor issues or missing functionality in these first iterations (compared to specification). Work continues on the other telemetry use-cases and related items.

Plugins for 3rd party test automation frameworks

Status: good, needs help

UPDATE: no change in last 6 months.

If you'd like to see plugins for more test automation frameworks and/or file formats please checkout the documentation for links and more info.

Redefine bug-tracker integration

Status: 66% complete, in progress, behind schedule

We've been making slow progress on this milestone lately. For more info see https://github.com/kiwitcms/Kiwi/milestone/1

GitHub flow integration

Status: done, awaiting deployment

Our team spent some time making Kiwi TCMS the first open source TCMS available on the GitHub Marketplace. At the end of this year we were able to create a small application that allows further integration and extending the testing workflow to the GitHub platform.

This is waiting on a few more clarifications from GitHub before we deploy but for now it can be considered as done. Future functionality will be tracked and developed directly at https://github.com/kiwitcms/github-app/issues.

Agile integration with Trello

Status: no progress, will drop

This will be dropped from roadmap for the next year until we can get more interest from the community.

Improve engineering productivity

Status: no progress

Looking for external help here. This will stay as a low priority item on our roadmap for 2020 until we can free more resources on the team.

Community

Status: great, on track, needs work

This is our strongest area during this year. We have a strong presence in multiple communities, our event schedule is very busy and we are gaining more recognition every day! Core team hit several big bumps this year and is still recovering with a few more people onboarding.

Kiwi TCMS suffers from the problem that many of our users can't be contributors or simply don't want to!

In short: it is important for us to follow our mission and develop our core team so we can deliver on promises made in our roadmap! That requires a lot of time and effort which reduces short-term productivity.

Happy testing!

Kiwi TCMS 7.2

We're happy to announce Kiwi TCMS version 7.2! This is an improvement & bug fix release which includes new database migrations and API methods, internal refactoring and updated translations. You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Docker images:

kiwitcms/kiwi       latest  f9a8a044c34e    537 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

Changes since Kiwi TCMS 7.1

Improvements

  • Base docker image to new CentOS 8
  • Update Django from 2.2.6 to 2.2.8
  • Update django-contrib-comments from 1.9.1 to 1.9.2
  • Update django-grappelli from 2.13.1 to 2.13.2
  • Update django-modern-rpc from 0.11.1 to 0.12.0
  • Update django-simple-history from 2.7.3 to 2.8.0
  • Update mysqlclient from 1.4.4 to 1.4.6
  • Update pygithub from 1.44 to 1.44.1
  • Update python-gitlab from 1.12.1 to 1.13.0
  • Several documentation updates

Database migrations

  • Add new database fields weight, icon and color to TestExecutionStatus and adjust existing code to work with them. This is a necessary step before allowing customization of test execution statuses, see Issue #236

API

  • RPC method TestExecution.add_comment() now requires django_comments.add_comment permission
  • Add new RPC method TestExecution.remove_comment()
  • Add new RPC method TestCase.add_comment()
  • Add new RPC method TestCase.remove_comment()

Bug fixes

  • testplans.views.DeleteCasesView now requires testplans.change_testplan permission (Svetlomir Balevski)
  • testplans.views.ReorderCasesView now requires testplans.change_testplan permission (Svetlomir Balevski)
  • Fix counting bug in execution trends telemetry
  • Fix several telemetry queries to still show data in the corner case where test cases have been deleted from a TestPlan but test runs are still available
  • Fix broken bulk menu in TestRun page when (translated) status names are too long
  • Automatically expand TestExecution comment history if there are comments present. Fixes Issue #349 (Matt Porter)
  • Document timezone settings and show current server time in navbar. Fixes Issue #1206
  • Check for permissions in HTML template. Closes Issue #961
  • Document bug tracker integration support. Fixes Issue #698
  • Delete comments when TestCase and TestExecution are removed. Closes Issue #1028

Refactoring

  • Pylint fixes (Mariyan Garvanski)
  • Use django.utils.timezone.now() instead of datetime.now(). Closes Issue #545
  • Use JSON-RPC instead of backend views when working with comments. Resolves Issue #960
  • Remove tcms.core.contrib.comments module. Closes Issue #959
  • Remove label= attribute from form field. Fixes Issue #652
  • Move and rename XML-RPC forms. Resolves Issue #681
  • Convert testplans.views.DeleteCasesView to JSON-RPC
  • Refactor more views from function based to class based
  • Remove duplicate JavaScript

Important changes

Soon Kiwi TCMS will switch from OAuth to GitHub App integration type with GitHub. Login with your GitHub accounts will still be supported but you will also be able to INSTALL Kiwi TCMS into your account/organization/repositories. This will open the possibility for further integration with GitHub as expressed in our roadmap for 2019!

We are going to share more information when this becomes available.

Upcoming conferences

The next two events we are going to participate are:

If you are around come and say "Happy testing"!

How to upgrade

Backup first! If you are using Kiwi TCMS as a Docker container then:

cd path/containing/docker-compose/
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

WHERE: docker-compose.yml has been updated from your private git repository! The file provided in our GitHub repository is an example. Not for production use!

WARNING: kiwitcms/kiwi:latest and docker-compose.yml will always point to the latest available version! If you have to upgrade in steps, e.g. between several intermediate releases, you have to modify the above workflow:

# starting from an older Kiwi TCMS version
docker-compose down
docker pull kiwitcms/kiwi:<next_upgrade_version>
edit docker-compose.yml to use kiwitcms/kiwi:<next_upgrade_version>
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
# repeat until you have reached latest

Happy testing!

Kiwi TCMS is going to FOSDEM 2020

Stand at FOSDEM'19

Hello testers, Kiwi TCMS is going to FOSDEM 2020. This is where you can find us:

  • Fri Jan 31st: after 18:00 @ Delirium Café - we are taking part of the FOSDEM Beer Event where all participants are invited. Shout out with #KiwiTCMS on Twitter if you can't find us in the crowd
  • Sat Feb 1st: Testing and Automation devroom - we are proud to be co-hosting this devroom together with Linaro and SUSE. CfP is open until Dec 10th 2019. Apply here!
  • Sun Feb 2nd: Open Source Test Management stand - we will be together with our friends from SystemTestPortal and we are preparing some real black-box testing for you!

We would like to meet with all of you and talk about software testing, test management and test process organization. In case you are stuck for crazy ideas checkout our project mission for inspiration.

Picture: FOSDEM'19 with Kiwi TCMS, ReportPortal & SystemTestPortal

Happy testing!

Starting with version 7.0 Kiwi TCMS pages displaying URLs to bugs also contain an info icon which shows additional information as tooltip. These are designed to provide more contextual information about the bug. By default the tooltip shows the OpenGraph metadata for that URL. This article will explain how to override this in 2 different ways.

bug details shown

Option #1: using the caching layer

Additional bug information is cached on the application layer. The cache key is the bug URL! By default Kiwi TCMS uses local-memory caching which isn't accessible for external processes but can be reconfigured very easily. This example changes the CACHES setting to use a directory on the file system like so

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/tmp/kiwi-cache',
        'TIMEOUT': 3600,
    }
}

Then you need to poll your 3rd party bug tracker (and/or other systems) and update the cache for each URL

from django.core.cache import cache
from tcms.core.contrib.linkreference.models import LinkReference

for reference in LinkReference.objects.filter(is_defect=True):
    # possibly filter objects coming only from your own bug tracker
    # in case there are multiple trackers in use

    # custom methods to grab more information. Must return strings
    title = fetch_title_from_bug_tracker(reference.url)
    description = fetch_description_from_bug_tracker(reference.url)

    # store the information in Kiwi TCMS cache
    cache.set(reference, {'title': title, 'description': description})

Then execute the Python script above regularly. For example use the following as your cron script

#!/bin/bash
export VIRTUAL_ENV=/venv
export PATH=/venv/bin:${PATH}
cat /path/to/cache_updater.py | /Kiwi/manage.py shell

bug details from customized cache

IMPORTANT

  • Kiwi TCMS expires cache entries after an hour. Either change the TIMEOUT setting shown above or run your script more frequently
  • How to modify default Kiwi TCMS settings is documented here
  • The Python + Bash scripts above don't need to be on the same system where Kiwi TCMS is hosted. However they need the same Python 3 virtualenv and cache settings as Kiwi TCMS does
  • Information about Django's cache framework and available backends can be found here
  • memcached is a supported cache backend option, see here
  • django-elasticache is a backend for Amazon ElastiCache which provides several configuration examples
  • Both django-redis and django-redis-cache are good libraries which support Redis
  • Any 3rd party libraries must be pip3 install-ed into your own docker image

Option #2: extend bug tracker integration

Let's say you are already running a customized Docker image of Kiwi TCMS. Then you may opt-in to extend the existing bug tracker integration code which provides the information shown in the tooltip. In this example I've extended the KiwiTCMS bug tracker implementation but you can even provide your own from scratch

class ExtendedBugTracker(KiwiTCMS):
    def details(self, url):
        result = super().details(url)

        result['title'] = 'EXTENDED: ' + result['title']
        result['description'] += '<h1>IMPORTANT</h1>'

        return result

Then import the new ExtendedBugTracker class inside tcms/issuetracker/types.py like so

index 9ad90ac..2c76621 100644
--- a/tcms/issuetracker/types.py
+++ b/tcms/issuetracker/types.py
@@ -17,6 +17,9 @@ from django.conf import settings

 from tcms.issuetracker.base import IssueTrackerType
 from tcms.issuetracker.kiwitcms import KiwiTCMS  # noqa
+from tcms.issuetracker.kiwitcms import ExtendedBugTracker

and change the bug tracker type, via https://tcms.example.com/admin/testcases/bugsystem/, to ExtendedBugTracker.

bug details extended internally

IMPORTANT

  • ExtendedBugTracker may live anywhere on the filesystem but Python must be able to import it
  • It is best to bundle all of your customizations into a Python package and pip3 install it into your customized docker image
  • ExtendedBugTracker must be imported into tcms/issuetracker/types.py in order for the admin interface and other functions to find it. You may also place the import at the bottom of tcms/issuetracker/types.py
  • API documentation for bug tracker integration can be found here
  • Rebuilding the docker image is outside the scope of this article. Have a look at this Dockerfile for inspiration

NOTE: starting with Kiwi TCMS v8.5 external bug tracker integration classes are listed in the EXTERNAL_BUG_TRACKERS setting. If you are using v8.5 or newer instead of importing ExtendedBugTracker in tcms/issuetracker/types.py you should override the list of available bug tracker integrations:

EXTERNAL_BUG_TRACKERS.append('mymodule.ExtendedBugTracker')

Happy testing!

Kiwi TCMS 7.1

We're happy to announce Kiwi TCMS version 7.1! This is a small improvement update which includes database schema and API changes, several other improvements, internal refactoring and updated translations. You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Docker images:

kiwitcms/kiwi       latest  c8cf36ac5ca5    602 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

Changes since Kiwi TCMS 7.0

Improvements

  • Update django from 2.2.5 to 2.2.6
  • Update python-gitlab from 1.11.0 to 1.12.1
  • Update pygithub from 1.43.8 to 1.44
  • Update psycopg2 from 2.8.3 to 2.8.4
  • Add help tooltips in all telemetry pages
  • Better styling for checkboxes in 'Add hyperlink' dialog, part of TestRun page
  • Add hyperlink validation. Fixes Issue #1147

Database migrations

  • Add bugs permissions to Tester group. Will make any difference only if upgrading from existing installation

API

  • New method Bug.remove()

Bug fixes

  • Always build with the latest versions of translations
  • Add 'Delete' menu item in Bugs page. Fixes #1153 Issue #1153
  • When deleting hyperlink from TestExecution hide the actual UI elements from the page
  • Fix failure to delete TCs when the number of TCs inside TP is greater than 100. Fixes Issue #1149 and Sentry KIWI-TCMS-8F

Refactoring

  • Rename directory xmlrpc to rpc and pylint updates. Refs Issue #682 (Matej Aleksandrov, Sinergise)
  • Remove labels from form fields, Refs Issue #652 (Azmi YÜKSEL)
  • New base class for tests around permissions (Svetlomir Balevski)
  • New "blueprint" test case around permissions to make testing in this area more robust
  • Refactor many views from function based to class based
  • Update stale tests in tcms/core/tests/ and make sure they aren't ignored by the test runner
  • Remove empty class XMLRPCBaseCaseForm
  • Remove XMLRPCNewCaseForm, duplicate of NewCaseForm
  • Remove rpc.forms.UpdateCaseForm in favor of XMLRPCUpdateCaseForm
  • Update only English sources with new strings as a temporary workaround b/c Crowdin uses different formatting heuristics than gettext. This will minimize the number of .po format changes
  • A few pylint fixes

Translations

Acknowledgments

A special "thank you" goes to our friends from PyCon Balkan in Belgrade who allowed us to host an open source coding sprint in Belgrade during the conference!

A second "thank you" goes to Open Labs Hackerspace who hosted a localization sprint in Tirana and contributed to several different languages!

Thank you for being part of our community. Version 7.1 includes all of your contributions.

Website updates

We're using the opportunity to share that website is now serving via SSL courtesy of GitHub and Let's encrypt.

Our main page has also been updated to showcase some of our customers: Better (Slovenia), Minds, Inc. (USA), Musala Soft (Bulgaria). If you would like to feature your corporate logo and tell us how you use Kiwi TCMS then drop us an email!

Upcoming conferences

The next two events we are going to participate are:

If you are around come and say "Happy testing"!

Upcoming FOSDEM 2020

We are happy to announce that our team, together with SUSE and Linaro will be hosting the Testing and Automation Developer Room at FOSDEM in Brussels next February.

Call for papers is open until December 10th 2019. Anything related to software testing and open source is welcome. Apply from the link above.

How to upgrade

Backup first! If you are using Kiwi TCMS as a Docker container then:

cd path/containing/docker-compose/
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

WHERE: docker-compose.yml has been updated from your private git repository! The file provided in our GitHub repository is an example. Not for production use!

WARNING: kiwitcms/kiwi:latest and docker-compose.yml will always point to the latest available version! If you have to upgrade in steps, e.g. between several intermediate releases, you have to modify the above workflow:

# starting from an older Kiwi TCMS version
docker-compose down
docker pull kiwitcms/kiwi:<next_upgrade_version>
edit docker-compose.yml to use kiwitcms/kiwi:<next_upgrade_version>
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
# repeat until you have reached latest

Happy testing!

Kiwi TCMS 7.0

We're happy to announce Kiwi TCMS version 7.0! This is a major release which includes security updates, significant database schema and API changes, many improvements, removed functionality, bug fixes, substantial internal refactoring and several new languages. You can explore everything at https://public.tenant.kiwitcms.org!

The 7.0 version number happily coincides with the fact that we've surpassed 70000 downloads from Docker Hub.

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Docker images:

kiwitcms/kiwi       latest  d34dc6d896bf    584 MB
kiwitcms/kiwi       6.2     7870085ad415    957 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955 MB
kiwitcms/kiwi       6.1     b559123d25b0    970 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970 MB
kiwitcms/kiwi       5.3.1   a420465852be    976 MB

Changes since Kiwi TCMS 6.11

Security

  • API method BugSystem.filter() has been removed (now unused) but it was possible to use this method to steal passwords or keys used for Issue Tracker integration. This vulnerability could be exploited by users logged into Kiwi TCMS and is classified as medium severity! We advise you to change your integration API keys and passwords immediately!

Improvements

  • Update Django from 2.2.4 to 2.2.5
  • Update django-uuslug from 1.1.8 to 1.1.9
  • Update mysqlclient from 1.4.2.post1 to 1.4.4
  • Update python-bugzilla from 2.2.0 to 2.3.0
  • Update python-gitlab from 1.10.0 to 1.11.0
  • Update patternfly from 3.59.3 to 3.59.4
  • Reduce docker image size from 1.01 GB to under 600 MB
  • Add TestCase Health telemetry
  • Add support for Redmine issue tracker. Fixes Issue #41 (Jesse C. Lin)
  • Add breathing room around HTML form's submit buttons (Rady Madjev)
  • New TestRun page action: bulk-add hyperlinks to TestExecution(s)
  • Make it possible to disable HTTPS by specifying the KIWI_DONT_ENFORCE_HTTPS environment variable! Fixes Issue #1036 (Marco Descher)
  • Documentation updates, including internal style checker. Fixes Issue #1000 (Prome88)
  • When linking a TestExecution to a defect and choosing to update the Issue Tracker Kiwi TCMS will not add a comment pointing back to TR ID/summary/URL and TE ID/summary. This provides more detailed information about the reproducer instead of just linking to a TestCase without any specific execution details like we did in the past
  • Display additional defect information via Issue Tracker integration. On Patternfly pages which show defect URLs this is accessible via a small info icon. Fixes Issue #117
  • Add minimalistic defect tracker functionality. Fixes Issue #699
    • integrated with Issue Tracker integration layer as if it was an external system
    • when adding hyperlink to TestExecition (also via API method TestExecution.add_link()) this is special cased and the references between Bug and TestExecution are always updated
    • when clicking 'Report bug' from inside Test Execution the new defect is reported automatically and a new browser window opens to display the information

Database migrations

  • Tell the migration planner to apply testruns.0006_rename_test_case_run_to_test_execution after linkreference.0001_squashed. This enables subsequent migrations and new functionality to be applied without crashing.

    Warning

    Django should be able to handle this automatically both for existing installations and for new ones. In any case make sure you backup your data first and make a dry-run to verify that nothing breaks!

  • Remove fields url_reg_exp, validate_reg_exp and description from BugSystem model

  • Update the following fields in LinkReference model:

    • rename test_case_run to execution
    • add indexing for created_on and url
    • add is_defect field
  • Apply LinkReference permissions to default group Tester. Fixes Issue #881

    Warning

    Administrators of existing applications will need to apply these permissions by hand via the Admin section.

  • Remove testcases.Bug model, replaced with LinkReference. Closes Issue #1029 and obsoletes Issue #320.

    Note

    Linking bugs to TestExecution is now performed via URLs instead of keeping a reference to BUG-ID and trying to reconstruct the URL on the fly.

    Warning

    The model named Bug which is added by subsequent migrations refers to defects reported into Kiwi TCMS minimalistic defect tracker!

  • New model bugs.Bug is now available. Permissions of type bugs | bug | Can ... will be applied to the default group named Tester only for new installations.

    Warning

    Administrators of existing applications will need to apply these permissions by hand via the Admin section.

API

  • TestExecution.add_link() method now returns serialized LinkReference object.
  • TestExecution.remove_link() method now accepts one parameter of type dict used to filter the objects which to remove
  • TestExecution.get_links() method now accepts one parameter of type dict instead of int
  • TestExecution.add_link() method signature changed from (int, str, str) to (dict), where the single parameter holds field values for the LinkReference model
  • Remove TestExecution.add_bug() method, use TestExecution.add_link()
  • Remove TestExecution.remove_bug() method, use TestExecution.remove_link()
  • Remove TestCase.add_bug() method
  • Remove TestCase.remove_bug() method
  • Remove Bug.remove() method, use TestExecution.remove_link()
  • Remove Bug.create() method, use TestExecution.add_link()
  • Add method Bug.details() which together with the underlying IssueTracker.details() is the foundation of how Kiwi TCMS fetches extra details from the issue tracking system. The default implementation uses OpenGraph protocol to collect the data that will be shown. You may override .details() for each issue tracker (or add your own IT) to extend this functionality. Information is cached for 1 hour by default. References Issue #117
  • Add methods Bug.add_tag() and Bug.remove_tag()
  • Existing method with name Bug.filter() has changed behavior. It is now used to query objects from Kiwi TCMS minimalistic defect tracker

Removed functionality

  • Remove IssueTrackerType.all_issues_link() method. This was used in TestRun Report page to show a single link that will open all bugs in the Issue Tracker. Most trackers don't support this and the UI portion has been rewritten
  • Remove LinkOnly issue tracker - obsolete because all defects are now added to TestExecutions via their URLs
  • Remove bulk-add/bulk-remove of bugs in TestRun page, replaced by bulk-add for hyperlinks

Settings

  • Respect the CACHES setting, see Django docs for more info. Initially this setting is used to cache defect details received via Issue Tracker integration. See Issue #117

Bug fixes

  • Don't auto-download FontAwesome for SimpleMDE. Resolves icons disappearing on pages which have the markdown editor. Fixes Issue #905
  • Reorder HTML elements so Delete button is still visible in TestCase review comment section. Fixes Issue #1013 (Rady Madjev)
  • Remove section that displays bugs in TestExecution container. Bugs are now denoted by a small icon next to their hyperlink. Closes Issue #475
  • Cache Issue Tracker connections per base_url. Fixes Issue #290

Refactoring

  • Lots of refactoring from function based views to class based views (Rady Madjev)
  • Use JavaScript and the API to remove case execution instead of dedicated backend function (Rady Madjev)
  • Update pylint directives around missing permissions (Svetlomir Balevski)
  • Fix typo in identifier. Fixes CID 344186
  • Use TestExecution.add_link() and TestExecution.remove_link() in UI instead of dedicated backend function.
  • Remove unused LinkReference views, forms and tests modules

Translations

For more information check-out all supported languages. To request new language click here!

junit.xml-plugin v0.4

A few days ago we have also released kiwitcms-junit.xml-plugin v0.4 with the following changes:

  • Update junitparser from 1.3.2 to 1.3.4
  • Also support XML files with <testsuites> root tag (Katalon Studio). Fixes Issue #9

tap-plugin v0.4

We have also released kiwitcms-tap-plugin v0.4 with the following changes:

  • Include traceback from TAP file as TestExecution comment. Fixes Issue #7 (Christophe CHAUVET)

How to upgrade

Backup first! If you are using Kiwi TCMS as a Docker container then:

cd path/containing/docker-compose/
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

WHERE: docker-compose.yml has been updated from your private git repository! The file provided in our GitHub repository is an example. Not for production use!

WARNING: kiwitcms/kiwi:latest and docker-compose.yml will always point to the latest available version! If you have to upgrade in steps, e.g. between several intermediate releases, you have to modify the above workflow:

# starting from an older Kiwi TCMS version
docker-compose down
docker pull kiwitcms/kiwi:<next_upgrade_version>
edit docker-compose.yml to use kiwitcms/kiwi:<next_upgrade_version>
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
# repeat until you have reached latest

Happy testing!

Next month our team will be at PyCon Balkan, Oct 3-5 in Belgrade. Together with presentation and a workshop we are going to host open source sprints! These will be an informal gathering where participants will be able to learn more about how open source works and go through their first contributions. This is ideal for students and less experienced people but we welcome everyone. There will be tasks ranging from easy to very hard!

Who: 4 mentors from Kiwi TCMS and you!

What: full day of peer programming and contributing to Kiwi TCMS

Where: room will be announced on the days of the conference, follow @KiwiTCMS for more info

Why: up your tech skills, build your GitHub profile and have fun together

Translate Kiwi TCMS

Difficulty: easy

We have enabled Serbian language in our translation system. To get started checkout our translation contribution page. Once strings are translated kiwitcms-bot will automatically open a pull request with the new text.

Find unused CSS classes

Difficulty: easy

This should be relatively easy. For each class/selector defined in our CSS files search (grep) if any of the HTML templates use it. If it is not in use then remove it.

Find unused JavaScript code

Difficulty: easy

Similar to the above. We're not 100% certain but there could be legacy JavaScript functions which are no longer in use. Find them and remove them! At the very least you have confirmed that all functions are in use!

CodeClimate Minor severity issues

Difficulty: easy to moderate

Check-out the list of Minor severity issues. There are many of them:

  • CSS lint issues (we suggest you start with this one)
  • functions longer than 25 lines of code
  • functions with bigger cognitive and cyclomatic complexity
  • modules longer than 250 LOC

Try fixing a few to see how it goes and continue if you feel confident. Not everything may be an issue so if you have any questions ask someone from our team.

CodeClimate Major severity issues

Difficulty: moderate to hard

Check-out the list of Major severity issues. There are around 150 of them:

  • identical and similar code blocks
  • big modules
  • big functions

Most of these require some sort of refactoring, either splitting snippets of code into smaller pieces (functions or sub-modules) or using one function in several places instead of 2 very similar but different functions, etc. Ask our team members about which approach they prefer for fixing these issues to minimize the effort spent here.

CodeClimate Critical severity issues

Difficulty: hard

Check-out the list of Critical severity issues. All of these are functions with high cognitive complexity and the recommended way to deal with them is refactoring into class based views.

Improve pylint health

Difficulty: easy

Execute pylint against the latest sources and start fixing the issues. Looking at pylint logs the following items are relatively easy to work on:

  • Everything in module tcms.urls
  • Everything in module tcms.telemetry.api
  • Everything in module tcms.testruns.tests.test_views
  • Everything in module tcms.xmlrpc.forms
  • Everything in module tcms.testcases.tests.test_models
  • Everything in module tcms.core.forms.fields
  • Everything in module tcms.settings.common
  • Everything in module tcms.settings.test
  • All module-in-directory-without-init errors reported for module tcms.tests.__init__

Note: fixme, missing-permission-required and avoid-auto-field errors are usually harder to resolve and will require more work/refactoring. If you feel confident go ahead and fix them, if not skip to the next error message.

We also use a custom pylint checker which reports function based views. If you are looking for something harder to work on, then give it a try (see 3rd pylint line in Makefile) and refactor some of the existing view functions into class based views.

Fix 3rd party security issues discovered by Bandit

Difficulty: moderate to hard

Bandit is a static analysis tool similar to pylint. It focuses on discovering issues which may lead to security vulnerabilities. We have resolved all such issues in our own source code but we also execute Bandit against the entire Python dependency stack. There it finds thousands of issues, so much so that the reporter crashes.

In CI there are around 130 issues reported. The best course of action here is to execute Bandit locally against the offending library and then figure out what to do:

  • report an issue upstream
  • send a pull request upstream
  • if these are test files maybe exclude them from the package (e.g. don't ship them for production)

Note: inside Travis CI we have all runtime and testing dependencies which is more than what we have inside the official Docker image for Kiwi TCMS.

Work on reported issues

The following issues look suitable for a sprint and don't require lots of background knowledge. You can also find them using the PyConBalkan label on GitHub:

  • #212 - moderate - Convert jQ to $ - this is an easy search & rename but will require more extensive manual testing
  • #431 - moderate to hard - Remove JavaScript fireEvent() - 17 matches in static/js/. Must be replaced with direct function calls
  • #652 - easy - Removal of labels from form fields - all labels must be included in the HTML template and marked for translation
  • #681, #682 - moderate - Move API modules & their tests from xmlrpc/api/<app>.py to <app>/api.py. These have good test coverage so you have to make sure you don't break anything
  • #971 - moderate - manage.py command for changing Site URL - will help with automatic provisioning, e.g. Ansible. For howto see Django docs
  • #1021 - moderate - Update TestCase page UI to allow adding TestPlans to cases - use TestPlan.add_case() API method and refresh the widget. See how Tags and Components cards work in the same page
  • #1070 - moderate - manage.py command for checking email settings - will help with troubleshooting misconfigured email. Must raise exceptions if something fails. For howto see Django docs
  • #733, #736, #738, #883, #1089 - hard to very hard - New checkers for pylint - Kiwi TCMS uses customized pylint checkers to discover various conditions. We need a few more of them and/or update of the existing ones

We hope to see you in Belgrade. Until then: Happy testing!

Your favorite open source test case management system is going on tour again. During the next several months we will be at:

Feel free to ping us at @KiwiTCMS or look for the kiwi bird logo and come to say hi. Happy testing!

Kiwi TCMS 6.11

We're happy to announce Kiwi TCMS version 6.11! This is a security and improvement release which updates many internal dependencies, adds 2 new Telemetry reports, updates TestPlan and TestCase cloning pages and provides several other improvements and bug fixes. You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Docker images:

kiwitcms/kiwi       latest  6a8249d23a67    1.011 GB
kiwitcms/kiwi       6.2     7870085ad415    957.6 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955.7 MB
kiwitcms/kiwi       6.1     b559123d25b0    970.2 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970.1 MB
kiwitcms/kiwi       5.3.1   a420465852be    976.8 MB

Changes since Kiwi TCMS 6.10

Security

Improvements

  • Update python-gitlab from 1.8.0 to 1.10.0
  • Update django-grappelli from 2.12.3 to 2.13.1
  • Update django-simple-history from 2.7.2 to 2.7.3
  • Update django-attachments to 1.4.1
  • Update PyGithub from 1.43.7 to 1.43.8
  • Update patternfly to version 3.59.3
  • Update prismjs to version 1.17.0
  • Add Testing Status Matrix telemetry
  • Add Testing Execution Trends telemetry
  • Make it possible to attach files directly inside Test Plan page
  • Make it possible to attach files directly inside Test Execution widget
  • Convert Clone TestPlan page to Patternfly, greatly simplify the UI and update behavior:
    • Cloned TP author will always be set to the current user
    • Cloned TC author will always be set to the current user
    • Always keep the original default tester for test cases when cloning
    • Refactor to class based view
    • Fix a problem where Version values failed form validation b/c we've been trying to filter based on non-existing field product_id instead of just product
    • Fixes a problem where erroneous Version value was shown in the UI
  • Convert Clone TestCase page to Patternfly, greatly simplify the UI and update behavior. Fixes Issue #838:
    • Allow cloning into multiple test plans
    • Remove 'Filter another plan' option. Will be replaced by 'Add TP to TC', see Issue #1021
    • Always update sortkey. Cloned TC will show at the bottom of the TestPlan
    • Cloned TC author will always be set to the current user
    • Always keep the original default tester

API

  • First parameter of RPC method Bug.report() has been renamed from test_case_run_id to execution_id. This may break existing API scripts which try to pass this argument by name instead of by position!

Settings

  • Allow ENV variables KIWI_USE_TZ and KIWI_TIME_ZONE to control settings USE_TZ and TIME_ZONE. Fixes Issue #982 (Jason Yi)

Bug fixes

  • Fix wrong permission label when deleting comments. Fixes Issue #1010

Refactoring

  • Disable unnecessary pylint messages for missing-permission-required checker (Svetlomir Balevski)
  • Remove unnecessary from_plan URL variable making cleaner URLs
  • kiwi_lint: Don't check nested functions for permissions
  • Remove and regroup JavaScript functions
  • Instruct pyup-bot to monitor requirements/tarballs.txt for updates

Translations

How to upgrade

Backup first! If you are using Kiwi TCMS as a Docker container then:

cd path/containing/docker-compose/
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

WHERE: docker-compose.yml has been updated from your private git repository! The file provided in our GitHub repository is an example. Not for production use!

WARNING: kiwitcms/kiwi:latest and docker-compose.yml will always point to the latest available version! If you have to upgrade in steps, e.g. between several intermediate releases, you have to modify the above workflow:

# starting from an older Kiwi TCMS version
docker-compose down
docker pull kiwitcms/kiwi:<next_upgrade_version>
edit docker-compose.yml to use kiwitcms/kiwi:<next_upgrade_version>
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
# repeat until you have reached latest

Happy testing!

Happy Monday, testers! In this series we are introducing the contributors behind Kiwi TCMS. This is our community and these are their stories.

Aneta Petkova - QA Chapter Lead at SumUp

Aneta is a software engineer navigating the complex field of QA since her first "grownup" job. She's been working in the area of test automation for web applications using different programming languages and tools. Her mission is to inspire people to think about quality from the very inception of ideas and to blur the line between developers and QA specialists.

What is your professional background

I have an engineering degree in computer science and I've spend the last 8 years in Quality Assurance. Java, TestNG and UI automation with Selenium WebDriver are my strongest technical skills but I use different programming languages and tools.

I believe languages and tools should only support an engineer and never define them.

Currently I am the QA Chapter Lead at SumUp, where I can work towards achieving my goals in an amazing team of people that do what they love.

When did you use open source for the first time

The first time I remember was in 2011, but I've probably used it before and just didn't pay attention. To me it seemed the same as proprietary, and I guess that means it was good.

Describe your contributions to the project

I created kiwitcms-junit-plugin. This is a native Java library which you can install via Maven Central. It will discover your automated test suite and publish test execution results in Kiwi TCMS. This plugin is very simple and requires only minimal configuration before it is ready to work. Check-out the example in TP-25!

editor comment: Aneta and Ivo (Kiwi TCMS) hosted the "Git crash course" workshop at HackConf 2018. Kiwi TCMS will be hosting 2 workshops this year so stay tuned!

Why did you decide to contribute to Kiwi TCMS

I had recently switched Java for Ruby and I was feeling nostalgic. Also, I had spent my entire career so far in QA and I wanted to slip on the developer shoes for at least a little bit.

Was there something which was hard for you during the contribution process

I'm used to working in a team and when I started working on this project I was the only active Java developer. Luckily for me, I live in the time of StackOverflow, so I managed to get most of my questions answered by strangers on the Internet.

I learned tons of stuff, but mostly I learned I can build software, not just test it!

Which is the best part of contributing to Kiwi TCMS

Doing something that has the potential to help others and that could be improved upon.

What is next for you in professional and open source plan

My current focus is moving slightly into DevOps direction and I am really overwhelmed by the amount of things to learn. I feel there is so much I want to experiment with. I am not really planning anything related to open source - it has never been a goal for me - but when I come across a project I feel strongly about, I'd probably be tempted to contribute.

Thank you, Aneta! Happy testing!

In this new series we are going to introduce the contributors behind Kiwi TCMS. This is our community and these are their stories.

Primož Klemen - QA tester, full time dad, Manchester United F.C. supporter

Primož is an early adopter and our Slovenian translator. He's been actively engaging in GitHub issues, posted pull requests for improving documentation and follows us on StackOverflow as well.

What is your professional background

I've started working in IT as tech support for the 2nd largest Slovenian ISP at the time. Then I've been at leading software provider for fintech in the Balkans region in the same role and gradually transitioned into QA role. Currently, I'm working as a QA tester for Better (by Marand) and ensure, with help of my colleagues of course, proper quality of administration application for health care sector.

When did you use open source for the first time

If I recall correctly that would be some 14 years ago when I ditched dreaded Internet Explorer in favor of Mozilla Firefox browser. The whole Internet got better in a matter of seconds.

What are your contributions to Kiwi TCMS

I mainly contribute via translating the application into my native language, Slovenian. Currently there are 7 languages available for Kiwi TCMS so you are more than welcome to join and add another one. Translating via Crowdin is very simple and requires no additional technical skills. I've also dabbled into project documentation and proposed a few updates to it. I'm also the culprit for some 32 issues and counting, the majority of them being proposals for future application enhancements and few UX/UI bugs (déformation professionnelle :-)).

Why did you decide to contribute to Kiwi TCMS

The guys and gals from the Kiwi TCMS team provided us with an application which solved our pain about building, maintaining and running manual regression tests.

They did all of that for free in their spare time! So I've decided to give something back to the whole community. This was indeed my first contribution to the open source world but not the last. Since then I've also contributed to other projects which I use on a regular basis.

In hindsight, Kiwi TCMS converted me from an open source user to open source contributor!

Was there something which was hard for you during the contribution process

Contributing to the project, as a non-developer, is very easy and intuitive by either opening issues on GitHub or translating via Crowdin or even committing updated documentation to git repository through GitHub Desktop client. All of the aforementioned was new to me and I've learned in depth how to use these tools. I've also had the pleasure to familiarize myself with project documentation - Sphinx and reStructuredText are my two new best friends.

Which is the best part of contributing to Kiwi TCMS

Being able to actively improve an application that we use on a daily basis in our development process. Getting to know more people from all around the globe and see their insights about software quality assurance thus learning something new every day.

What is next for you in professional and open source plan

Professionally I'm 100% committed to Better (by Marand) and helping us achieve the best standard of quality for health care applications which also incorporates using the knowledge gathered by following and/or contributing to open source. I'm going to continue contributing to Kiwi TCMS and Captura and if time allows maybe involve myself with some other interesting projects.

Thank you, Primož! Happy testing!

Hello everyone, in this article I will outline the progress that the Kiwi TCMS team has made towards achieving the goals on our 2019 mission and roadmap. TL,DR: Kiwi TCMS has made progress since January, it's been tough and may not have been very visible. I feel like we've been behind schedule till now! The greatest positive thing has been community and team development!

Complete the internal refactoring

Status: minimal progress, needs help

CodeClimate progress is:

  • -30 code smells
  • -40 duplications
  • -30 other issues
  • 4% technical debt improvement
  • -200 hrs remaining until issues are fixed

This is mostly the result of code reviews and minor fixes, not targeted work.

We have not done any targeted work to resolve other issues reported by Scrutinizer, Pylint, remove vendored-in JavaScript libraries, JavaScript refactoring or classification of issues in 3rd party dependencies.

There are new people onboarding in the team right now and our plan is for them to start grinding at these issues very soon!

Redesign the UI templates with the help of Patternfly

Status: 50% done, needs help

There are 27 HTML templates remaining to be redesigned (from 59). That's mostly due to internal cleanup than targeted refactoring. More work on this item will probably follow towards the end of the year after we get more priority items out of the way and get more of the new team members rolling!

Modernize reporting aka Telemetry

Status: in progress, a bit behind schedule

The specs for the new Telemetry system have been defined after taking into account feedback on GitHub issues. Anton Sankov is the leading developer for this feature. So far we have 2 telemetry reports merged: testing break-down and status matrix. The next one will be execution trends.

There are lots of minor issues or missing functionality in these first iterations (compared to specification). Our plan is to have the major use-cases satisfied first and then work to refine all of the existing telemetry pages.

Plugins for 3rd party test automation frameworks

Status: good, needs help

Until now we have released TAP, junit.xml and native JUnit 5 plugins. There's also a PHPUnit plugin which is more or less complete but unreleased yet. Both JUnit 5 and PHPUnit plugins are developed by external contributors!

We often get asked for plugins for languages and frameworks we don't use or don't even know! Given that our expertise is mostly in Python we will gladly accept your pull requests if you decide to maintain or contribute to one of the plugins. This will also help us get insight into what automation frameworks people are using and how exactly you structure a test automation workflow around Kiwi TCMS.

Checkout the documentation for links and more info.

Redefine bug-tracker integration

Status: no progress

Last week, right after OpenExpo, we did a check-up session and this was one of the areas identified with zero amount of progress. I have a strong preference to work on this feature myself but have not been able to due to various other items that need my attention.

The short version is that I'd prefer to remove all issue tracker specific code and allow the tester to add arbitrary URLs to link to existing bugs. How to do integration (even as simple as publishing a comment in the bug tracker) over a generic interface still eludes me. In the next few weeks I will kick-off this topic with a separate blog post/issue for everyone to comment on.

GitHub flow integration

Status: no progress

Our team spent some time making Kiwi TCMS the first open source TCMS available on the GitHub Marketplace. We will continue this integration effort and flow integration will emerge from that. There's also many things that need to be done to satisfy GitHub's .

Agile integration with Trello

Status: no progress

Improve engineering productivity

Status: no progress

Our mission is to transform testing in your organization by providing the tools for that via Kiwi TCMS. It is astonishing that so far nobody has provided any kind of feedback in Issue #703 wrt improving productivity in their teams!

We have some ideas which have been blocked by lack of resources on the team and refactoring tasks. Because we've adopted this as our mission this is an important item for us and we'll continue working on it as resources allow. Progress is to be expected towards the end of the year.

Community

Status: great, on track, needs work

This is our strongest area during the year so far. We have a strong presence in several communities, our event schedule is busy enough and we are gaining more recognition every day!

  • Hosted project stand at 3/5 conferences with 2 more on-track
  • Won the OpenAward for Best Tech Community
  • Hosted several presentations and workshops with few more on track
  • Found new talent to join the core team: 2 just ready to start contributing, 5 more in training
  • 1 more senior engineer as a mentor. We also have a few independent wanna-be contributors and will be hosting qualification interviews for marketing assistant very soon
  • There are contributions and pull requests coming from users of Kiwi TCMS as well. We'd like to see more of course.
  • There are a couple of open source projects and companies using Kiwi TCMS who are friendly towards the project. We are working with them to get a public endorsement on the website and engage in more technical work together. Of course everyone has limited resources and is very busy :-(
  • Sponsors on OpenCollect are just a few but we didn't have any previously so this is a good sign.

This is the moment to mention that not all is honey and roses in open source land. Kiwi TCMS suffers from the problem that many of our users can't be contributors or simply don't want to!

Manual testers can't program. This is a fact and a good sized chunk of our user base actually performs manual testing. Those that can write automation and probably code decently well may not be familiar with Python and Django. At least in Bulgaria these two aren't very popular, definitely not among testers. That is to say this part of the user-base simply doesn't have the necessary skills to contribute and the majority of what we need is code contribution!

Another (fairly big IMO) group of users are coming from proprietary companies who view open source and Kiwi TCMS as a zero cost option. Something that they take free of charge and use it without ever contributing back. They don't understand nor really care about the open source culture.

To make things worse we receive requests every single day via our private email addresses or questions via IM despite our website clearly stating community engagement rules. On a few occasions we have received very rude comments of the sort "our company demands you fix this", "is this going to be ready this year" (context implying entitlement), etc. To make things more ridiculous we've even received support requests (via contact form) from companies and start-up who get their return address wrong so we can't get in touch directly!

In short: don't demand anything from us unless you are ready to pay for it, work for it yourself or propose a mutually beneficial scenario. We do try to keep the community happy but more importantly follow our mission and develop our core team!

Happy testing!

Image of the award

Kiwi TCMS is the winner at OpenAwards'19 category Best Tech Community! Big thanks to the jury, our contributors and core-team and the larger open source and quality assurance communities who voted for us and supported the project during all of those years.

This award is the best present we could get to mark the 10th anniversary of the project. More news of how we are progressing with current roadmap will follow soon in a separate blog post.

Thank you & happy testing!

Kiwi TCMS 6.10

We're happy to announce Kiwi TCMS version 6.10! This is a small security and improvement update. You can explore everything at https://public.tenant.kiwitcms.org!

Supported upgrade paths:

5.3   (or older) -> 5.3.1
5.3.1 (or newer) -> 6.0.1
6.0.1            -> 6.1
6.1              -> 6.1.1
6.1.1            -> 6.2 (or newer)

Docker images:

kiwitcms/kiwi       latest  bbb581d60ed1    1.005 GB
kiwitcms/kiwi       6.2     7870085ad415    957.6 MB
kiwitcms/kiwi       6.1.1   49fa42ddfe4d    955.7 MB
kiwitcms/kiwi       6.1     b559123d25b0    970.2 MB
kiwitcms/kiwi       6.0.1   87b24d94197d    970.1 MB
kiwitcms/kiwi       5.3.1   a420465852be    976.8 MB

Changes since Kiwi TCMS 6.9

Security

  • Update Django from 2.2.1 to 2.2.2 for medium severity CVE-2019-12308 (XSS), CVE-2019-11358 (jQuery). More info
  • Add missing permission checks for menus in Test run page UI template. Permission check added for TestExecution status and comment menu. References Issue #716
  • Re-enable static analysis with bandit and Coverity Scan in Travis CI (Svetlomir Balevski)

Improvements

  • Update psycopg2 from 2.8.2 to 2.8.3
  • Update markdown from 3.1 to 3.1.1
  • Update patternfly to version 3.59.2
  • Override PasswordResetForm because Site.objects.get_current() didn't produce correct results when working with kiwitcms-tenants
  • Show column is_active in user admin page

Refactoring

  • Add test for email_case_deletion() (Rik)
  • New linter to warn about usage of AutoField. Fixes Issue #737 (Ivo Donchev, HackSoft)
  • New linter to discover empty classed. Fixes Issue #739 (Daniel Goshev)
  • New linter to warn about usage of OneToOneField. Fixes Issue #735 (George Goranov)
  • New linter to warn about usage of function based views. Fixes Issue #734 (Yavor Lulchev, Uber)
  • New linter to discover Python files in directories without __init__.py. Fixes Issue #790

Join us at OpenExpo in Madrid

Kiwi TCMS is exhibitor at OpenExpo Europe on June 20th in Madrid. We will be hosting an info booth and 2 technical presentations delivered by Anton Sankov and Alex Todorov.

Kiwi TCMS is also the leading finalist in the Best Tech Community category at Open Awards 2019!

Use OE19SPEAKERINVITE 100% discount code! Get your ticket here!

How to upgrade

If you are using Kiwi TCMS as a Docker container then:

cd Kiwi/
git pull
docker-compose down
docker pull kiwitcms/kiwi
docker pull centos/mariadb
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate

Don't forget to backup before upgrade!

WARNING: kiwitcms/kiwi:latest and docker-compose.yml will always point to the latest available version! If you have to upgrade in steps, e.g. between several intermediate releases, you have to modify the above workflow:

# starting from an older Kiwi TCMS version
docker-compose down
docker pull kiwitcms/kiwi:<next_upgrade_version>
edit docker-compose.yml to use kiwitcms/kiwi:<next_upgrade_version>
docker-compose up -d
docker exec -it kiwi_web /Kiwi/manage.py migrate
# repeat until you have reached latest

Happy testing!

Newer Posts

Page 6 / 9

Older Posts