Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The "Requirement Status" is a calculated field, so it shows the information for some version depending on a Xray setting available in Custom Field Preferences. Currently, it is not possible to specify explicitly the version that you want to calculate the coverage on. Please read Using custom fields for a deeper explanation.  

Tests

Can I use a Test for testing different system versions?

Yes. A Test is like a test template. You can use it in multiple Test Sets or Test Executions, which may be assigned with different versions.

How do I associate a Test with a project version?

The association of a Test with a project version is not direct. Your Tests are written in order to validate some requirement, that itself belongs to a specific version. Although a Test may be associated with a requirement of a specific version, you are able to run Tests for the versions you like. In terms of requirement coverage, you have different behaviors to choose from in the administration settings (see Requirement Coverage Strategy). You may also to have a look at Test Versioning.

Do you support versioning of Tests?

Please refer to Test Versioning.

How do I define which Tests should be used for regression testing?

Please take a look at Tips for organizing tests.

Can I link Tests to other Tests?

Yes. You can create normal links between Test issues, as you would do for any standard Jira issue. Xray will not process those relationships in any special way; it will ignore them unless they are of "tests" or "tested by" relationships.

The "TestRunStatus" custom field does not show the "expected" value. Why? 

The "TestRunStatus" is a calculated field, so it shows the information for some version, depending on a Xray setting available in Custom Field Preferences. Currently, it is not possible to specify explicitly the version that you want to calculate the coverage on. Please read Using custom fields for a deeper explanation.

Test Sets

Can I clone a Test Set? Will that clone the Tests that belong to the Test Set?

You can clone a Test Set and the cloned Test Set will have the same Test Sets that were in the original Test Set. The tests themselves are not cloned. If you really want to clone a bulk list of tests, then you must clone them manually (you may find add-ons for this purpose), and then associate  them to the new Test Set. In fact, whenever you clone Test Sets, Test Executions or Test Plans, the Tests that they contain are not cloned; just the internal association.

Test Executions

How do I create a Test Execution for all failed tests (or other test status) of a previous execution?

You can do it easily within the Test Plan screen via the "Create Test Execution" button. You may also create a new Test Execution for some of the tests listed in the table below the Filters, by pressing the bulk icon Image Removed and then pick the relevant tests (you may use a filter to help you out), and then choose the Create in the actions icon Image Removed, available on the right side of the table.

Can I run a Test Execution multiple times?

The status of my requirements always shows as Not Run, independently of the results I have recorded


Image Added

Warning

You might be using environments on Test Executions that are affecting the aggregated status for the Tests. If you have a couple of Test Executions, one with a specific environment (e.g., Android) and another without any environment, then Xray will also consider the empty environment when calculating the aggregated status (this is, of course, if all Test Executions are within the same Version or Test Plan).

Warning

You have not configured your versions accordingly. Remember that requirements coverage is calculated with Test Execution and/or Test Set for a Requirement Fix version.

Tip

You must have the same version name between projects. The Test Execution fix version must have the same value as the Requirement Issue fix version.

Image AddedImage Added

Tests

Can I use a Test for testing different system versions?

Yes. A Test is like a test template. You can use it in multiple Test Sets or Test Executions, which may be assigned with different versions.

How do I associate a Test with a project version?

The association of a Test with a project version is not direct. Your Tests are written in order to validate some requirement, that itself belongs to a specific version. Although a Test may be associated with a requirement of a specific version, you are able to run Tests for the versions you like. In terms of requirement coverage, you have different behaviors to choose from in the administration settings (see Requirement Coverage Strategy). You may also to have a look at Test Versioning.

Do you support versioning of Tests?

Please refer to Test Versioning.

How do I define which Tests should be used for regression testing?

Please take a look at Tips for organizing tests.

Can I link Tests to other Tests?

Yes. You can create normal links between Test issues, as you would do for any standard Jira issue. Xray will not process those relationships in any special way; it will ignore them unless they are of "tests" or "tested by" relationships.

The "TestRunStatus" custom field does not show the "expected" value. Why? 

The "TestRunStatus" is a calculated field, so it shows the information for some version, depending on a Xray setting available in Custom Field Preferences. Currently, it is not possible to specify explicitly the version that you want to calculate the coverage on. Please read Using custom fields for a deeper explanation.

Test Sets

Can I clone a Test Set? Will that clone the Tests that belong to the Test Set?

You can clone a Test Set and the cloned Test Set will have the same Test Sets that were in the original Test Set. The tests themselves are not cloned. If you really want to clone a bulk list of tests, then you must clone them manually (you may find add-ons for this purpose), and then associate  them to the new Test Set. In fact, whenever you clone Test Sets, Test Executions or Test Plans, the Tests that they contain are not cloned; just the internal association.

Test Executions

How do I create a Test Execution for all failed tests (or other test status) of a previous execution?

You can do it easily within the Test Plan screen via the "Create Test Execution" button. You may also create a new Test Execution for some of the tests listed in the table below the Filters, by pressing the bulk icon Image Added and then pick the relevant tests (you may use a filter to help you out), and then choose the Create in the actions icon Image Added, available on the right side of the table.

Can I run a Test Execution multiple times?

Kind of. A specific Test Execution represents an execution task of a list of tests, for a specific version/revision, done at a specific time. With Xray, the normal way of executing a set of tests multiple times is by creating a Test Execution each time you want to execute the tests. All you need  to do is clone an existing Test Execution; the newly-created Test Execution will contain the same list of tests, in clean state since you haven't executed Kind of. A specific Test Execution represents an execution task of a list of tests, for a specific version/revision, done at a specific time. With Xray, the normal way of executing a set of tests multiple times is by creating a Test Execution each time you want to execute the tests. All you need  to do is clone an existing Test Execution; the newly-created Test Execution will contain the same list of tests, in clean state since you haven't executed them yet.

Do I have to use Test Environments?

...

Please see the proper section within the documentation in Importing and Exporting Tests (CSV).

Integrations

Can I trigger/start Jenkins/Bamboo builds from Xray?

Currently, this is not possible.

JQL functions

When searching for issues, custom fields (e.g., TestRunStatus) do not return the correct values.

Columns presented in the results do not take into account the context of the JQL query. The TestRunStatus custom field will always present the same result independent of the JQL query. 

...

(CSV).

Integrations

Can I trigger/start Jenkins/Bamboo builds from Xray?

Currently, this is not possible.

JQL functions

When searching for issues, custom fields (e.g., TestRunStatus) do not return the correct values.

Columns presented in the results do not take into account the context of the JQL query. The TestRunStatus custom field will always present the same result independent of the JQL query. 

Let's say you want to see the tests of a given Test Execution, using testExecutionTests(...), and their results. If Test A is executed by TE1 and TE2 and you're filtering by TE2, then you will get the "global" status calculated, and this can be the value in TE1 if TE1 is the latest test run.

Jira startup

Xray is disabled upon Jira startup

If you get a log message like:

Code Block
languagejava
titlecom.atlassian.cache.CacheException: java.lang.IllegalArgumentException: Unknown icon type 'issuetype'
collapsetrue
2017-06-27 06:18:42,964 JIRA-Bootstrap ERROR      [c.x.raven.issuetype.RavenIssueTypeManagerImpl] Error ocurred installing Xray issue types! 

com.atlassian.cache.CacheException: java.lang.IllegalArgumentException: Unknown icon type 'issuetype' 

                at com.atlassian.cache.memory.DelegatingCachedReference.get(DelegatingCachedReference.java:83) 

                at com.atlassian.jira.config.DefaultConstantsManager.getAllIssueTypeObjects(DefaultConstantsManager.java:636) 

                at com.xpandit.raven.service.impl.RavenIssueTypeServiceImpl.findIssueType(Unknown Source) 

                at com.xpandit.raven.issuetype.RavenIssueTypeManagerImpl.a(Unknown Source) 

                at com.xpandit.raven.issuetype.RavenIssueTypeManagerImpl.a(Unknown Source) 

                at com.xpandit.raven.RavenSetupHandler.setup(Unknown Source) 

                at com.xpandit.raven.RavenSetupHandler.onPluginEnabled(Unknown Source) 

                ... 2 filtered 

                at java.lang.reflect.Method.invoke(Method.java:498) 

                at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:36) 

                at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1$1.run(AsynchronousAbleEventDispatcher.java:48) 

                at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299) 

                at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:107) 

                at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.java:160) 

                at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:79) 

                at com.atlassian.plugin.event.impl.DefaultPluginEventManager.broadcast(DefaultPluginEventManager.java:73) 

                at com.atlassian.plugin.manager.DefaultPluginManager.broadcastIgnoreError(DefaultPluginManager.java:2122) 

                at com.atlassian.plugin.manager.DefaultPluginManager.enableDependentPlugins(DefaultPluginManager.java:1261) 

                at com.atlassian.plugin.manager.DefaultPluginManager.addPlugins(DefaultPluginManager.java:1215) 

                at com.atlassian.jira.plugin.JiraPluginManager.addPlugins(JiraPluginManager.java:152) 

                at com.atlassian.plugin.manager.DefaultPluginManager.earlyStartup(DefaultPluginManager.java:597) 

                at com.atlassian.jira.plugin.JiraPluginManager.earlyStartup(JiraPluginManager.java:120) 

                at com.atlassian.jira.ComponentManager$PluginSystem.earlyStartup(ComponentManager.java:641) 

                at com.atlassian.jira.ComponentManager.quickStart(ComponentManager.java:195) 

                at com.atlassian.jira.ComponentManager.start(ComponentManager.java:164) 

                at com.atlassian.jira.upgrade.PluginSystemLauncher.start(PluginSystemLauncher.java:43) 

                at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$postDbLaunch$2(DefaultJiraLauncher.java:150) 

                at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.doNowOrEnqueue(DatabaseConfigurationManagerImpl.java:298) 

                at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.doNowOrWhenDatabaseActivated(DatabaseConfigurationManagerImpl.java:194) 

                at com.atlassian.jira.startup.DefaultJiraLauncher.postDbLaunch(DefaultJiraLauncher.java:141) 

                at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$start$0(DefaultJiraLauncher.java:103) 

                at com.atlassian.jira.util.devspeed.JiraDevSpeedTimer.run(JiraDevSpeedTimer.java:31) 

                at com.atlassian.jira.startup.DefaultJiraLauncher.start(DefaultJiraLauncher.java:101) 

                at com.atlassian.jira.startup.LauncherContextListener.initSlowStuff(LauncherContextListener.java:149) 

                at java.lang.Thread.run(Thread.java:745) 

Caused by: java.lang.IllegalArgumentException: Unknown icon type 'issuetype' 

                at com.atlassian.jira.plugin.icon.IconTypeDefinitionFactoryImpl.getDefaultSystemIconFilename(IconTypeDefinitionFactoryImpl.java:45) 

                at com.atlassian.jira.avatar.AvatarManagerImpl.loadDefaultAvatarId(AvatarManagerImpl.java:488) 

                at com.atlassian.jira.avatar.AvatarManagerImpl.lambda$getDefaultAvatarId$3(AvatarManagerImpl.java:509) 

                at com.atlassian.vcache.internal.core.DefaultRequestCache.lambda$get$15(DefaultRequestCache.java:43) 

                at java.util.HashMap.computeIfAbsent(HashMap.java:1126) 

                at com.atlassian.jira.avatar.AvatarManagerImpl.getDefaultAvatarId(AvatarManagerImpl.java:509) 

                at com.atlassian.jira.avatar.AvatarManagerImpl.getDefaultAvatarId(AvatarManagerImpl.java:482) 

                at com.atlassian.jira.issue.issuetype.IssueTypeImpl.getAvatarOrDefault(IssueTypeImpl.java:39) 

                at com.atlassian.jira.issue.issuetype.IssueTypeImpl.getAvatar(IssueTypeImpl.java:32) 

                at com.atlassian.jira.config.DefaultIssueConstantFactory.createIssueType(DefaultIssueConstantFactory.java:64) 

                at com.atlassian.jira.config.DefaultIssueConstantFactory.createIssueType(DefaultIssueConstantFactory.java:84) 

                at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 

                at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) 

                at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) 

                at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 

                at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 

                at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) 

                at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 

                at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) 

                at com.atlassian.jira.config.DefaultConstantsManager.loadIssueTypeCache(DefaultConstantsManager.java:799) 

                at com.atlassian.cache.memory.MemoryCacheManager$1$1.load(MemoryCacheManager.java:129) 

                at com.atlassian.cache.memory.MemoryCacheManager$1$1.load(MemoryCacheManager.java:105) 

                at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) 

                at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) 

                at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) 

                at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) 

                at com.google.common.cache.LocalCache.get(LocalCache.java:3937) 

                at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) 

                at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) 

                at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830) 

                at com.atlassian.cache.memory.DelegatingCachedReference.getUnderLock(DelegatingCachedReference.java:93) 

                at com.atlassian.cache.memory.DelegatingCachedReference.get(DelegatingCachedReference.java:78) 

                ... 35 more 

2017-06-27 06:18:42,980 JIRA-Bootstrap ERROR      [c.xpandit.raven.RavenSetupHandler] Xray add-on initialization failed! Disabling Xray add-on... 

com.atlassian.jira.exception.CreateException: com.atlassian.cache.CacheException: java.lang.IllegalArgumentException: Unknown icon type 'issuetype' 

                at com.xpandit.raven.issuetype.RavenIssueTypeManagerImpl.a(Unknown Source) 

                at com.xpandit.raven.RavenSetupHandler.setup(Unknown Source) 

                at com.xpandit.raven.RavenSetupHandler.onPluginEnabled(Unknown Source) 

                at sun.reflect.GeneratedMethodAccessor136.invoke(Unknown Source) 

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 

                at java.lang.reflect.Method.invoke(Method.java:498) 

                at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:36) 

                at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1$1.run(AsynchronousAbleEventDispatcher.java:48) 

                at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299) 

                at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:107) 

                at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.java:160) 

                at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:79) 

                at com.atlassian.plugin.event.impl.DefaultPluginEventManager.broadcast(DefaultPluginEventManager.java:73) 

                at com.atlassian.plugin.manager.DefaultPluginManager.broadcastIgnoreError(DefaultPluginManager.java:2122) 

                at com.atlassian.plugin.manager.DefaultPluginManager.enableDependentPlugins(DefaultPluginManager.java:1261) 

                at com.atlassian.plugin.manager.DefaultPluginManager.addPlugins(DefaultPluginManager.java:1215) 

                at com.atlassian.jira.plugin.JiraPluginManager.addPlugins(JiraPluginManager.java:152) 

                at com.atlassian.plugin.manager.DefaultPluginManager.earlyStartup(DefaultPluginManager.java:597) 

                at com.atlassian.jira.plugin.JiraPluginManager.earlyStartup(JiraPluginManager.java:120) 

                at com.atlassian.jira.ComponentManager$PluginSystem.earlyStartup(ComponentManager.java:641) 

                at com.atlassian.jira.ComponentManager.quickStart(ComponentManager.java:195) 

                at com.atlassian.jira.ComponentManager.start(ComponentManager.java:164) 

                at com.atlassian.jira.upgrade.PluginSystemLauncher.start(PluginSystemLauncher.java:43) 

                at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$postDbLaunch$2(DefaultJiraLauncher.java:150) 

                at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.doNowOrEnqueue(DatabaseConfigurationManagerImpl.java:298) 

                at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.doNowOrWhenDatabaseActivated(DatabaseConfigurationManagerImpl.java:194) 

                at com.atlassian.jira.startup.DefaultJiraLauncher.postDbLaunch(DefaultJiraLauncher.java:141) 

                at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$start$0(DefaultJiraLauncher.java:103) 

                at com.atlassian.jira.util.devspeed.JiraDevSpeedTimer.run(JiraDevSpeedTimer.java:31) 

                at com.atlassian.jira.startup.DefaultJiraLauncher.start(DefaultJiraLauncher.java:101) 

                at com.atlassian.jira.startup.LauncherContextListener.initSlowStuff(LauncherContextListener.java:149) 

                at java.lang.Thread.run(Thread.java:745) 

Caused by: com.atlassian.cache.CacheException: java.lang.IllegalArgumentException: Unknown icon type 'issuetype' 

                at com.atlassian.cache.memory.DelegatingCachedReference.get(DelegatingCachedReference.java:83) 

                at com.atlassian.jira.config.DefaultConstantsManager.getAllIssueTypeObjects(DefaultConstantsManager.java:636) 

                at com.xpandit.raven.service.impl.RavenIssueTypeServiceImpl.findIssueType(Unknown Source) 

                at com.xpandit.raven.issuetype.RavenIssueTypeManagerImpl.a(Unknown Source) 

                ... 32 more 

                at com.atlassian.jira.plugin.icon.IconTypeDefinitionFactoryImpl.getDefaultSystemIconFilename(IconTypeDefinitionFactoryImpl.java:45) 

                at com.atlassian.jira.avatar.AvatarManagerImpl.loadDefaultAvatarId(AvatarManagerImpl.java:488) 

                at com.atlassian.jira.avatar.AvatarManagerImpl.lambda$getDefaultAvatarId$3(AvatarManagerImpl.java:509) 

                at com.atlassian.vcache.internal.core.DefaultRequestCache.lambda$get$15(DefaultRequestCache.java:43) 

                at java.util.HashMap.computeIfAbsent(HashMap.java:1126) 

                at com.atlassian.vcache.internal.core.DefaultRequestCache.get(DefaultRequestCache.java:43) 

                at com.atlassian.jira.avatar.AvatarManagerImpl.getDefaultAvatarId(AvatarManagerImpl.java:509) 

                at com.atlassian.jira.avatar.AvatarManagerImpl.getDefaultAvatarId(AvatarManagerImpl.java:482) 

                at com.atlassian.jira.issue.issuetype.IssueTypeImpl.getAvatarOrDefault(IssueTypeImpl.java:39) 

                at com.atlassian.jira.issue.issuetype.IssueTypeImpl.getAvatar(IssueTypeImpl.java:32) 

                at com.atlassian.jira.config.DefaultIssueConstantFactory.createIssueType(DefaultIssueConstantFactory.java:64) 

                at com.atlassian.jira.config.DefaultIssueConstantFactory.createIssueType(DefaultIssueConstantFactory.java:84) 

                at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 

                at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) 

                at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) 

                at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 

                at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 

                at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) 

                at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 

                at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) 

                at com.atlassian.jira.config.DefaultConstantsManager.loadIssueTypeCache(DefaultConstantsManager.java:799) 

                at com.atlassian.cache.memory.MemoryCacheManager$1$1.load(MemoryCacheManager.java:129) 

                at com.atlassian.cache.memory.MemoryCacheManager$1$1.load(MemoryCacheManager.java:105) 

                at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) 

                at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) 

                at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) 

                at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197) 

                at com.google.common.cache.LocalCache.get(LocalCache.java:3937) 

                at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) 

                at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) 

                at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830) 

                at com.atlassian.cache.memory.DelegatingCachedReference.getUnderLock(DelegatingCachedReference.java:93) 

                at com.atlassian.cache.memory.DelegatingCachedReference.get(DelegatingCachedReference.java:78) 

                ... 35 more 
  • Check, querying your database, if any issue type has an invalid avatar id:
Code Block
SELECT * FROM issuetype WHERE avatar NOT IN (SELECT id FROM avatar);
  • Go to Jira Administration → Issues → Issue Types;
  • Search for the issue types found in the DB query and change its icons to a valid one.
  • After performing this changes, restart Jira and the issue should be fixed.
Info

This issue is caused by an inconsistency between two Jira tables: the avatar's table and the issuetype's table. This kind of issue typically happens after an upgrade on Jira.

We are providing a workaround so our customers can still use Xray without having to manually enable it every time they restart Jira

...

.

Contact

Can I send you guys an email?

...

Sure. Please leave us a message in our Service Desk and we'll get back to you right away. We also have webinars (both live and recorded) that you can attend.


.

.