Kiwi TCMS is Open Source Seed Award winner

Kiwi TCMS is the proud winner of a $10,000 award from Mozilla, Indeed, Open Collective, Ford Foundation & Simply Secure. Read below for the full story!

At the end of January Zahari alerted our team about the Open Source Speed Dating FOSDEM 2020 event and Alex was very swift in filing the application form. Just as we landed in Brussels, ready to host Testing and Automation devroom and the Open Source Test Management stand, we got the news - Kiwi TCMS has been selected as a participant.

What followed was a very hasty day of preparing a 5 min pitch and rehearsing it as much as possible so we can be ready to present our project. Alex prepared the pitch and made final review and polishing together with Anton. For the record everything was written down on paper, including important facts about the project and schedule - when and where is our slot, how is Alex going to get there, when does he need to leave to be on time, etc. We believe that preparation was key here and that's why our team always tries to be prepared when we participate at events! It was as good as it can get, no more changes!

On Feb 1st all hell broke loose - it was day #1 of FOSDEM, the Testing an Automation devroom was full with amazing speakers and packed with people, watch videos here, there was barely time to eat or drink water and at 5PM Alex had to rush across town to pitch Kiwi TCMS!

Then everything went like clockwork - weather was warm for the season, Alex decided to walk from ULB to La Tricoterie, both so he doesn't get stuck in traffic but also to regulate stress level and be clear minded for what comes next. He arrived just on time to meet with new folks and have a glass of wine before taking his turn with the judges.

Open Source Speed Dating is a format where projects pitch to a team of 3 judges who then follow up with various questions. Their goal is to assess how suitable your project is for the money they are giving away but also how would actually receiving an award help the project. You do get guidance how to prepare and what sort of information the judges are looking for. However you have no idea who the other participants are and who are you competing against! All you have is a 15 minutes slot where you have to give the best of you and hope it is enough.

Afterwards we reunited together, did even more walking, played the SPACESHIP at Let Me Out escape room and finished with a mandatory team dinner in the hearth of Brussels.

Following an internal selection process and due diligence we finally received the award. $10,000 for open source!

As a side note we also got to know who the other winners are, which can be seen from Open Source Speed Dating records: F-Droid, ossia, MNT Research GmbH and Kiwi TCMS!

We’re giving all of it to our community

All money from the Kiwi TCMS Collective will be going towards funding development tasks. Like Alex told the judges - this will help us enable more hands working on Kiwi TCMS and complete pending work faster. Stay tuned for our bounty program announcement!

Happy testing!

Kiwi TCMS 8.1

We're happy to announce Kiwi TCMS version 8.1!

IMPORTANT: this is a small security and improvement release which also includes several bug fixes, 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  fbb363af2d90    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 8.0

Security

  • JSON-RPC handler will now HTML escape all strings. This prevents XSS attacks via tags, components or anything else which is loaded on the web page via RPC and then shown as string. Even if someone saves <script>alert(123);</script> in the database the returned result will be HTML escaped and will not be executed as JavaScript!

    Notes:

    This is easy to exploit but people able to do so should have accounts in your Kiwi TCMS installation and write privileges on their accounts. If they do this means they can cause a lot more damage much more easily!

  • Update Django from 3.0.3 to 3.0.4 - fixes security issue CVE-2020-9402: Potential SQL injection via tolerance parameter in GIS functions and aggregates on Oracle which we believe does not affect Kiwi TCMS

Improvements

  • Update bleach from 3.1.0 to 3.1.1

  • Update django-colorfield from 0.1.15 to 0.2.1

  • Update markdown from 3.2 to 3.2.1

  • On bug creation send email to assignee. Fixes Issue #1154 (Mfon Eti-mfon)

  • Make it possible to provide override settings in a directory. Kiwi TCMS will respect:

    • local_settings.py
    • local_settings_dir/*.py

    For more information see https://kiwitcms.readthedocs.io/en/latest/installing_docker.html#customization

  • Allow adding TestPlan to TestCase via UI. Fixes Issue #1021

  • Add visual representation of failures in TestCase health telemetry

  • Add helper text to TestExecutionStatus admin

  • Add link to discussion forum in Help menu

API

  • TestCase.create() method no longer accepts product or product_id fields which have previously been deprecated
  • API methods which receive True/False values will no longer parse yes,no,1,0 values. The only accepted values are boolean constants defined in the calling programming language which are then transmitted via XML-RPC or JSON-RPC and converted to native boolean on the backend

Bug fixes

  • The number of search results shown per page can now be controlled via DEFAULT_PAGE_SIZE setting, which is 100 by default. Fixes Issue #1210 (Ivailo Karabojkov)
  • Use comma separated display of components in bug reports. Fixes Issue #1157 (Ivailo Karabojkov)
  • Update selector for 'Select All' test executions in TestRun page. Fixes Issue #1404
  • Fix crash when sorting test cases in TestPlan page. Fixes Sentry #KIWI-TCMS-A6
  • Fix a TC-undefined displayed in TestCase health telemetry

Refactoring

  • Add test for TestRunAdmin.change_view() (Mariyan Garvanski)
  • Remove unused showCaseRunsWithSelectedStatus
  • Internal JavaScript updates

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!

Catch-up with Kiwi TCMS in Sofia, Singapore, Kiev & Moscow

Hello testers, you can catch-up with your favorite open source test case management system during the month of March. Here's a list of events we are going to:

To claim a free Community Standard Ticket use code atodorov. First 5 tickets only! For a 25% discount use code fossasia-speaker. For a 25% discount use code exhibitor-friends - applies only to Community Standard Ticket.

Original plan was to visit OpenTest Con, Beijing between March 30-31 which has now been cancelled! The new plan is to stay 2-3 more days in Kiev and join some meetups if available.

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

We're not participating in 'QA of the year' award

Hello testers, this is the story of how our team is not taking part of the "QA of the year" contest organized by the QA: Challenge Accepted conference despite being nominated by Alex. In collaboration with Peter Sabev (organizer) we've managed to figure out what happened:

Then after a few days we've got word back - Peter had figured out what happened. Apparently the same Google form has been opened on 2 different computers and one of them overwrote the existing submissions.

This kind of issue can be avoided by employing the following measures:

Sadly the issue was discovered after the submission deadline has ended so Kiwi TCMS can't participate in this year's contest. We wish the rest of the finalists best of luck and we're going to see you at QA: Challenge Accepted next month.

Happy testing!

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!

I deleted our newsletter from Mailchimp ! Please re-subscribe

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!

GitHub OAuth tokens have been revoked

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!

Kiwi TCMS is migrating from OAuth to GitHub App

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:

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:

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!

How to override bug details in Kiwi TCMS

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

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

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!

Open source sprints at PyCon Balkan in Belgrade

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:

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:

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:

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:

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:

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

Kiwi TCMS conference presence, AW2019

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!

Contributor profile: Aneta Petkova

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!

Project news only, GDPR compliant. Subscribe here!