diff --git a/404.html b/404.html index 59eb92500..037882fda 100644 --- a/404.html +++ b/404.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
Skip to main content

Page Not Found

You may have used an outdated link as there have been some changes in the structure of the documentation.

But it/'s clearly here somewhere!
Please, use the keyword search to find it!

- + \ No newline at end of file diff --git a/admin-panel/AllProjectsPage/index.html b/admin-panel/AllProjectsPage/index.html index 20deda07b..72be2dc28 100644 --- a/admin-panel/AllProjectsPage/index.html +++ b/admin-panel/AllProjectsPage/index.html @@ -12,7 +12,7 @@ - + @@ -30,7 +30,7 @@ button to complete the registration.

  • The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT MANAGER project role.

  • note

    The link for registration will be active until the user registers in the system for up to, but not exceeding 24 hours.

    Detailed project info

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Projects" page.

    3. Click "See detailed information" button.

    4. View aggregated data of the selected project. Available period options are:

    Delete projects

    To delete a project, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Projects" page.

    3. Click on ellipsis button on the project preview.

    4. Click on the "Delete" option. A warning pop-up message will appear.

    5. Click "Delete". The project will be deleted from ReportPortal.

    note

    PERSONAL PROJECTS cannot be deleted from the system.

    - + \ No newline at end of file diff --git a/admin-panel/AllUsersPage/index.html b/admin-panel/AllUsersPage/index.html index 2c42d7bd7..412d7fc05 100644 --- a/admin-panel/AllUsersPage/index.html +++ b/admin-panel/AllUsersPage/index.html @@ -12,7 +12,7 @@ - + @@ -36,7 +36,7 @@ dashboards and widgets), that the user owns on the projects will be kept in ReportPortal.

    Edit user account role

    The only space in ReportPortal where user can get the Administrator rights is All Users page.

    Give ADMINISTRATOR role

    To give Administrator role for any user, perform the following steps:

    1. Login into the ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Users" page.

    3. Hover over user's name. - "Make admin" button will be displayed.

    4. Click on the "Make admin" button. - A confirmation message will be shown.

    5. Click "Change" button on pop-up window. Account role User will be changed to Administrator. The user account will be marked with "admin" label.

    Take away ADMINISTRATOR role

    To take away Administrator account role, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Users" page.

    3. Click on the "Admin" button near the user's name.

    4. A confirm message will be shown.

    5. Click "Change" button. Account role "Administrator" will be changed to "User".

    - + \ No newline at end of file diff --git a/analysis/AutoAnalysisOfLaunches/index.html b/analysis/AutoAnalysisOfLaunches/index.html index dff96418d..cb8160114 100644 --- a/analysis/AutoAnalysisOfLaunches/index.html +++ b/analysis/AutoAnalysisOfLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ For effective using Auto–Analysis you should come through several stages.

    Create an analytical base in the ElasticSearch

    First of all, you need to create an analytical base. For that, you should start to analyze test results manually.

    All test items with a defect type which have been analyzed manually or automatically by ReportPortal are sent to the Elastic Search.

    The following info is sent:

    For the better analysis, we merge small logs (which consist of 1-2 log lines and words number <= 100) together. We store this merged log message as a separate document if there are no other big logs (consisting of more than 2 log lines or having a stacktrace) in the test item. We store this merged log message in a separate field "merged_small_logs" for all the big logs if there are ones.

    The Analyzer preprocesses log messages from the request for test failure analysis: extracts error message, stacktrace, numbers, exceptions, urls, paths, parameters and other parts from text to search for the most similar items by these parts in the analytical base. These parts are saved in a separate fields for each log entry.

    Each log entry along with its defect type is saved to ElasticSearch in the form of a separate document. All documents created compose an Index. The more test results index has, the more accurate results will be generated by the end of the analysis process.

    tip

    If you do not sure how many documents(logs) are contained in the Index at that moment, you can check it. For that, perform the following actions:

    Test items of a launch in Debug mode are not sent to the service Analyzer. If the test item is deleted or moved to the Debug mode, it is removed from the Index.

    Auto-Analysis process

    After your Index has been completed. You can start to use the auto-analysis feature.

    Analysis can be launched automatically (via Project Settings) or manually (via the menu on All launches view). After the process is started, all items with defect type “To investigate” with logs (log level >= 40 000) from the analyzed launch are picked and sent to the Analyzer Service and the service ElasticSearch for investigations.

    How Elasticsearch returns candidates for Analysis

    Here is a simplified procedure of the Auto-analysis candidates searching via ElasticSearch.

    When a "To investigate" test item appears we search for the most similar test items in the analytical base. We create a query which searches by several fields, message similarity is a compulsory condition, other conditions boost the better results and they will have a higher score (boost conditions are similarity by unique id, launch name, error message, found exceptions, numbers in the logs and etc.).

    Then ElasticSearch receives a log message and divides it into the terms (words) with a tokenizer and calculates the importance of each term (word). For that ElasticSearch computes TF-IDF for each term (word) in the analyzed log. If the level of term importance is low, the ElasticSearch ignores it.

    note

    Term frequency (TF) – how many time term (word) is used in an analyzed log;

    Document frequency (DF) – in how many documents this term (word) is used in Index;

    TF-IDF (TF — term frequency, IDF — inverse document frequency) — a statistical measure used to assess the importance of a term (word) in the context of a log that is part of an Index. The weight of a term (word) is proportional to the amount of use of this term (word) in the analyzed log and inversely proportional to the frequency of term (word) usage in Index.

    The term (word) with the highest level of importance is the term (word) that is used very frequently in analyzed log and moderately in the Index.

    After all important terms are defined, Elastic search calculates the level of equality between an analyzed log and each log in the Index. For each log from the Index is calculated a score.

    note

    How calculated a score:

    score(q,d) =

         coord(q,d) -
    SUM (
    tf(t in d),
    idf(t)²,
    t.getBoost(),
    ) (t in q)

    Where:

    The results are sorted by the score, in case the scores are the same, they are sorted by "start_time" field, which helps to boost the test items with closer to today dates. So the latest defect types will be higher in the returned by Elasticsearch results.

    The ElasticSearch returns to the service Analyzer 10 logs with the highest score for each log. Analyzer regroups all the results by a defect type and chooses the best representative for each defect type group, based on their scores.

    note

    In the case the test item has several logs, the best representative for a defect type group will become the log with the highest score among all logs.

    How Auto-analysis makes decisions for candidates, returned by Elasticsearch

    The ElasticSearch returns to the service Analyzer 10 logs with the highest score for each query and all these candidates will be processed further by the ML model. Analyzer regroups all the results by a defect type and chooses the best representative for each defect type group, based on their scores.

    The ML model is an XGBoost model which features (about 30 features) represent different statistics about the test item, log message texts, launch info and etc, for example:

    The model gives a probability for each defect type group, and we choose the defect type group with the highest probability and the probability should be >= 50%.

    A defect comment and a link to BTS of the best representative from this group come to the analyzed item.

    The Auto-analysis model is retrained for the project and this information can be found in the section "How models are retrained" below.

    So this is how Auto-Analysis works and defines the most relevant defect type on the base of the previous investigations. We give an ability to our users to configure auto-analysis manually.

    Auto-analysis Settings

    All settings and configurations of Analyzer and ElasticSearch are situated on a separate tab on Project settings.

    1. Login into ReportPortal instance as Administrator or project member with PROJECT MANAGER role on the project;

    2. Come on Project Settings, choose Auto-Analysis section;

    In this section user can perform the following actions:

    1. Switch ON/OFF auto-analysis;

    2. Choose a base for analysis (All launches/ Launches with the same name);

    3. Configure ElasticSearch settings;

    4. Remove/Generate ElasticSearch index.

    Switch ON/OFF automatic analysis;

    To activate the "Auto-Analysis" functionality in a project, perform the following steps:

    1. Login ReportPortal instance as Administrator or project member with PROJECT MANAGER role on the project.

    2. Select ON in the "Auto-Analysis" selector on the Project settings / Auto-analysis section.

    3. Click the "Submit" button. Now "Auto-Analysis" will start as soon as any launch finishes.

    Base for analysis (All launches/ Launches with the same name);

    You can choose which results from previous runs should be considered in Auto –Analysis for defining the failure reason.

    There two options:

    If you choose “All launches”, test results in the launch will have analyzed on the base of all data in Elastic search of the project.

    If you choose “Launches with the same name”, test results in the launch will have analyzed on the base of all data in Elastic search that have the same Launch name.

    You can choose those configurations via Project configuration or from the list of actions on All launches view.

    Configure ElasticSearch settings

    Also, we give the possibility for our users to configure 2 main parameters of ElasticSearch manually:

    Parameter MinShouldMatch is involved in the calculation of a score. It is a minimum value for coord(q,d) (the percent of words equality between an analyzed log and a particular log from the ElasticSearch). So you can increase search hardness and choose a minimum level of similarity that is required.

    With the parameter Number of log lines - you can write the root cause of test failure in the first lines and configure the analyzer to take into account only the required lines.

    With these 2 parameters, you can configure the accuracy of the analysis that you need. For your facilities we have prepared 3 pre-sets with values:

    Remove/Generate ElasticSearch index

    There two possible actions that can be performed under Index in ElasticSearch.

    You can remove the Index from ElasticSearch and all logs with there defect type will be deleted. ML will be set to zero. All data with your investigations will be deleted from the ElasticSearch. For creating a new one you could start to investigate test results manually or generate data based on previous results on the project once again.

    note

    Your investigations in ReportPortal will not be changed. The operation concerns only ElasticSearch base.

    Another option, you can generate the Index in ElasticSearch. In the case of generation, all data will be removed from ElasticSearch and the new one will be generated based on all previous investigations on the project following current analysis settings.

    At the end of the process, you will receive a letter with info about the end of the process and with several items that will be appeared in ElasticSearch.

    You can use index generation for several goals. For example, assume two hypothetical situations when index generation can be used:

    note

    The new base will be generated following logs and settings that are existing on the moment of operating. So index before removing and index after generation can be different.

    We strongly do not recommend use auto-analysis until the new index will be generated.

    Manual analysis

    Analysis can be launched manually. To start the analysis manually, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select the "Analysis" option from the context menu next to the selected launch name.

    3. Choose the scope of previous results on the base of which test items should be auto-analyzed. The default is the one that is chosen on the setting page, but you can change it manually.

    Via this menu you can choose 3 options unlike on Project Settings:

    Options All launches and Launches with the same name are working the same as on project settings. If you choose Only current launch, the system is analyzing the test items of chosen launch only on a base of already investigated date of this launch.

    1. Choose which items from launch should be analyzed:

    In case the user chooses Only To investigate items - the system is analyzing only items with defect type "To investigate" in the chosen launch;

    In case the user chooses Items analyzed automatically (by AA) - the system is analyzing only items that have been already analyzed by auto-analysis. The results of the previous run of analysis will be set to zero and items will be analyzed once again.

    In case the user chooses Items analyzed manually - the system is analyzing only items that have been already analyzed by the user manually. The results of the previous run of analysis will be set to zero and items will be analyzed once again.

    In the case of multi-combination - the system is analyzing results dependence on chosen options.

    note

    The Ignore flag is saved. If the item has flag Ignore in AA, it will not be re-analyzed.

    tip

    For option Only current lunch you can not choose Items analyzed automatically (by AA) and Items analyzed manually simultaneously.

    1. Click the "Analysis" button. Now "Auto-Analysis" will start.

    Any launches with an active analyzing process will be marked with the "Analysis" label.

    Label AA

    When the test item is analyzed by the ReportPortal, a label "AA" is set on the test item on a Step Level. You can filter results with a parameter “Analysed by RP (AA)”

    Ignore in Auto-Analysis

    If you don't want to save some test items in ElasticSearch, you can "Ignore in Auto-Analysis". For that you can choose this action in “Make decision” modal:

    Or from the action list for several test items:

    When you choose “Ignore in AA”, logs of the chosen item are removed from the ElasticSearch.

    - + \ No newline at end of file diff --git a/analysis/HowModelsAreRetrained/index.html b/analysis/HowModelsAreRetrained/index.html index 48c6dd016..60408c691 100644 --- a/analysis/HowModelsAreRetrained/index.html +++ b/analysis/HowModelsAreRetrained/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    How models are retrained

    In the Auto-analysis and ML suggestions processes several models take part:

    • Auto-analysis XGBoost model, which gives the probability for a test item to be of a specific type based on the most similar test item in the history with this defect type
    • ML suggestions XGBoost model, which gives the probability for a test item to be similar to the test item from the history
    • Error message language model on Tf-Idf vectors(Random Forest Classifier), which gives a probability for the error message to be of a specific defect type or its subtype based on the words in the message. The probability from this model is taken as a feature in the main boosting algorithm.

    At the start of the project, you have global models. They were trained on 6 projects and were validated to give a good accuracy on average. To have a more powerful and personalized test failure analysis, the models should be retrained on the data from the project.

    note

    If a global model performs better on your data, the retrained model won't be saved. As far as we save a custom model only if it performs better for your data than the global one.

    Triggering information and retrained models are saved in Minio(or a filesystem) as you set up in the Analyzer service settings.

    Retraining triggering conditions for Error message Random Forest Classifier:

    • Each time the test item defect type is changed to another issue type(except "To Investigate"), we update the triggering info, which saves the quantity of test items with defect types and the quantity of test items with defect types since the last training. This information is saved in the file "defect_type_trigger_info" in Minio.
    • When we have more than 100 labelled items, and since last training we have 100 labelled test items, retraining is triggered and if validation data metrics are better than metrics for a global model for the same data points, then we save a custom "defect_type" model in Minio and use it further in the auto-analysis and suggestions functionality.

    Retraining triggering conditions for Auto-analysis and Suggestion XGBoost models:

    • We gather training data for training from several sources:
      • when you choose one of the suggestions(the chosen test item will be a positive example, others will be negative ones)
      • when you don't choose any suggestion and edit the test item somehow(set up a defect type manually, add a comment, etc.), all suggestions become negative examples;
      • when auto-analysis runs and for a test item it finds a similar test item, we consider it a positive example, until the user changes the defect type for it manually. In this case, the result will be marked as a negative one.
    • Each time a suggestion analysis runs or changing a defect type happens, we update the triggering info for both models. This information is saved in the files "auto_analysis_trigger_info" and "suggestion_tgrigger_info" in Minio.
    • When we have more than 300 labelled items, and since last training we have 100 labelled test items, retraining is triggered and if validation data metrics are better than metrics for a global model for the same data points, then we save a custom "auto_anlysis" model in Minio and use it further in the auto-analysis functionality.
    • When we have more than 100 labelled items, and since last training we have 50 labelled test items, retraining is triggered and if validation data metrics are better than metrics for a global model for the same data points, then we save a custom "suggestion" model in Minio and use it further in the suggestions functionality.
    - + \ No newline at end of file diff --git a/analysis/MLSuggestions/index.html b/analysis/MLSuggestions/index.html index e287cf7ed..fe75c802a 100644 --- a/analysis/MLSuggestions/index.html +++ b/analysis/MLSuggestions/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    ML Suggestions

    ML suggestions functionality is based on previously analyzed results (either manually or via Auto-analysis feature) using Machine Learning. The functionality is provided by the Analyzer service in combination with ElasticSearch.

    This analysis hints what are the most similar analyzed items to the current test item. You can interact with this functionality in several ways:

    • Choose one of the suggested items if you see that the reason for the current test item is similar to the suggested one. When you choose the item and apply changes to the current item, the following test item characteristics will be copied from the chosen test item:

      • a defect type;
      • a link to BTS (in case if it exists);
      • comment (in case if it exists);
    • If you see no suitable suggested test item for the current test item, just do not select any of them.

    How the ML suggestions functionality is working

    ML Suggestions searches for similar previously analyzed items to the current test item, so it requires an analytical base saved in Elasticsearch. ML suggestions takes into account all user-investigated, auto-analyzed items or items chosen from ML suggestions. While the analytical base is growing ML suggestions functionality will have more examples to search by and suggest you the best options.

    ML suggestions analysis is run everytime you enter "Make decision" editor. ML suggestions are run for all test items no matter what defect type they have now. This functionality is processing only test items with logs (log level >= 40000).

    The request for the suggestions part looks like this:

    • testItemId;
    • uniqueId;
    • testCaseHash;
    • launchId;
    • launchName;
    • project;
    • analyzerConfig;
    • logs = List of log objects (logId, logLevel, message)

    The Analyzer preprocesses log messages from the request for analysis: extracts error message, stacktrace, numbers, exceptions, urls, paths, parameters and other parts from text to search for the most similar items by these parts in the analytical base. We make several requests to the Elasticsearch to find similar test items by all the error logs.

    note

    When a test item has several error logs, we will use the log with the highest score as a representative of this test item.

    The ElasticSearch returns to the service Analyzer 10 logs with the highest score for each query and all these candidates will be processed further by the ML model. The ML model is an XGBoost model which features (about 40 features) represent different statistics about the test item, log message texts, launch info and etc, for example:

    • the percent of selected test items with the following defect type
    • max/min/mean scores for the following defect type
    • cosine similarity between vectors, representing error message/stacktrace/the whole message/urls/paths and other text fields
    • whether it has the same unique id, from the same launch
    • the probability for being of a specific defect type given by the Random Forest Classifier trained on Tf-Idf vectors

    The model gives a probability for each candidate, we filter out test items with the probability <= 40%. We sort the test items by this probability, after that we deduplicate test items inside this ranked list. If two test items are similar with >= 98% by their messages, then we will leave the test item with the highest probability. After deduplication we take maximimum 5 items with the highest score to show in the ML Suggestions section.

    ML suggestions section contains at maximum 5 suggested items, they are shown together with the scores given by the model and we divide them into 3 groups:

    • the group "SAME", test items with the score = 100%
    • the group "HIGH", test items with the score in the range [70% - 99.9%]
    • the group "LOW", test items with the score in the range [40% - 69.9%]
    - + \ No newline at end of file diff --git a/analysis/ManualAnalysis/index.html b/analysis/ManualAnalysis/index.html index f5354d7ab..6e526b4b9 100644 --- a/analysis/ManualAnalysis/index.html +++ b/analysis/ManualAnalysis/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    Manual Analysis

    Manual Analysis is presented on our test report dashboard by “Make decision” modal.

    “Make decision” modal redesign

    Redesign of the “Make decision” modal was implemented in version 5.7. This feature helps to sort out auto tests and decide: What is the problem? How can it be marked? Is it required to post issue or link issue? It became easier to use this functionality after the redesign.

    The “Make decision” modal can be opened in three ways:

    1) from the Step level

    2) via Actions

    3) from the Log level

    “Execution to change” section

    “Execution to change” section is displayed at the top left of the “Make decision” modal. It includes Step name, current defect type. Also it can have a log, a comment, a link to a Bug Tracking System (BTS), a label (AA, PA, Ignore AA) if exist. You can expand logs to understand why this step was failed.

    How to set a defect type and type a comment

    “Select defect” section is displayed at the top right of the “Make decision” modal. It includes “Manual selection”, “Analyzer suggestions”, “History of the test”.

    You can select a defect type and type a comment manually. Selected defect type and added comment will be applied to the current item (there is also a possibility to apply them to other items – please, have a look at “Apply for” section).

    How to use “Analyzer suggestions”

    You also can select any step from the “Analyzer suggestions” with a similar log. Similar log is marked with a red asterisk. Then the defect type, the comment and linked BTS ticket (if exist) of the suggested step will be applied to the current item (there is also a possibility to apply them to other items – please, have a look at “Apply for” section).

    “History of the test” section

    You can see the “History of the test” – which defect type this step had in previous runs. You can select any item from the “History of the test”. Then the defect type, the comment and linked BTS ticket (if exist) of the suggested step will be applied to the current item (there is also a possibility to apply them to other items – please, have a look at “Apply for” section).

    How to select other steps for analysis

    The “Make decision” modal works not only with the current step. This feature allows to select other steps with “To Investigate” defect type which can be changed as well. For that, please, expand the “Apply for” section and select the needed option.

    The “Results will be applied for” message is displayed at the bottom after selection. This section was added in version 5.7.

    Now you can view all changes before applying. Expand the “Results will be applied for” section to see information about changes. You should click “Apply” button to apply selected changes.

    Bulk update

    There is also a possibility for Bulk update, when the changes are applied to all selected test items.

    As you can see, “Make decision” modal is a time-saving tool for engineers.

    - + \ No newline at end of file diff --git a/analysis/PatternAnalysis/index.html b/analysis/PatternAnalysis/index.html index 1ed575b13..2d35eb73a 100644 --- a/analysis/PatternAnalysis/index.html +++ b/analysis/PatternAnalysis/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ Add The most popular pattern widget (TOP-20) and track the TOP-20 the most popular reason of test failing in the build.

    Use case 2:

    Problem: Test run has finished. A user found that more than 3 items have failed by the same reason. And he want to find all such items.

    Solution: Create a new pattern rule on Project Settings. Launch a pattern analysis manually for one launch. name. Find all items failed by the same reason by choosing a filter by Pattern Name on the Step view.

    - + \ No newline at end of file diff --git a/analysis/SearchForTheSimilarToInvestigateItems/index.html b/analysis/SearchForTheSimilarToInvestigateItems/index.html index 910c8f731..6c7aa244a 100644 --- a/analysis/SearchForTheSimilarToInvestigateItems/index.html +++ b/analysis/SearchForTheSimilarToInvestigateItems/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    Search for the similar "To investigate" items

    Let's consider below an example of ML-driven failure triage in ReportPortal.

    Use case:

    Situation: Analyzer has completed its work and marked known issues with defect types.

    But there are a lot of failures with a similar unknown reason in the run. All such items have "To investigate" defect type.

    Problem: A user should check and analyze all failed items.

    Solution:

    A user is on All launches, he clicks on "To investigate" and opens a list with items. When a user clicks on a pencil next to a defect type, the system opens the "Make decision" modal. In this modal a user can see all items with "To investigate" defect type and the same failure reason.

    There are 3 options for search the similar "To investigate" items on the Step level:

    • Current item only
    • Similar "To investigate" in the launch & current item
    • Similar "To investigate" in 10 launches & current item

    There are 4 options for search the similar "To investigate" items on the Log level:

    • Current item only
    • Similar "To investigate" in the launch & current item
    • Similar "To investigate" in 10 launches & current item
    • "To investigate" from the history line & current item

    If launches are filtered by filter on All Launches page, then addition option Similar "To investigate" in the Filter & current item appears on the Step and Log levels.

    A user can select all identical failures and perform the bulk operation for them.

    - + \ No newline at end of file diff --git a/analysis/UniqueErrorAnalysis/index.html b/analysis/UniqueErrorAnalysis/index.html index 2f7d9547c..9c468f17f 100644 --- a/analysis/UniqueErrorAnalysis/index.html +++ b/analysis/UniqueErrorAnalysis/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    Unique Error Analysis

    You can look at the test failure analysis from different points of view: qualitative (passing rate – How many tests have failed?) and quantitative (Why have they failed?). For example, if 1000 test cases are failed, then

    1. they could fail for the same reason

    2. they could fail for various reasons

    While failed tests allow you to understand what is broken, “Unique Error analysis” functionality implemented in version 5.7 will show you why it broke. The main advantage of this solution is that a list of all unique errors of the launch is presented in one place. Moreover, the system automatically groups tests by the same errors: when you expand some error, you see a list of steps where it occurred.

    “Unique error auto-analysis” is set ON by default.

    “Include/exclude numbers” settings

    There are 2 settings: “include/exclude numbers” – it depends if you decide that numbers in error logs have significant value for analysis or not.

    Now, Unique error auto-analysis will be started after a launch has been finished.

    To see the list of “Unique errors” for the launch, open any item level in the launch and click “Unique errors” tab.

    Finally, you can see the list of “Unique errors”.

    There you can see a list with groups of error logs. You can expand a group to check what tests belong to the same one and it could give you a hint during error analysis and defects assigning. The groups are formed based on unique error logs, some small error logs can be merged and displayed as one error.

    How to run “Unique error analysis” manually

    tip

    You can also run “Unique error analysis” manually from any item level in case auto analysis is set OFF. Please, follow the steps below:

    You can also run “Unique Error analysis” from the menu next to a particular launch.

    Examples with “Include/exclude numbers” settings

    Let’s consider some examples with the same Unique Errors but with different include/exclude numbers settings.

    We have 2 errors with identical text, but the difference is numeric value in the first error.

    1. An example with “Include numbers to analyzed logs” setting. Error with numeric value is displayed:
    1. An example with “Exclude numbers from analyzed logs” setting. As you can see, error with numeric value is not displayed:

    How to get ML suggestions for the group of steps

    In addition, there is a possibility to get ML suggestions for the group of steps. It speeds up the process of analyzing failed tests and assigning defect types by several times.

    Also, the new Quality Gates rule – “New Errors” – was implemented based on the “Unique Error analysis” functionality. This rule helps to identify if there are new unique errors in the current launch by comparing it to another specified launch.

    To summarize, ReportPortal got the following benefits thanks to the “Unique Error analysis” functionality:

    1. a list of unique errors for the launch with grouping,
    2. facilitating tests results analysis,
    3. ML suggestions for a group of steps,
    4. new Quality Gates rule.

    This way you can easily sort out the failures based on the unique errors found.

    - + \ No newline at end of file diff --git a/assets/images/CreateDashboard-2e25ca8b7611c63c5cd7f605b2b3cb3d.png b/assets/images/CreateDashboard-2e25ca8b7611c63c5cd7f605b2b3cb3d.png new file mode 100644 index 000000000..96300574f Binary files /dev/null and b/assets/images/CreateDashboard-2e25ca8b7611c63c5cd7f605b2b3cb3d.png differ diff --git a/assets/images/CreateDashboard-4f7bc94f27a9ffb36b7b5f8c81fb3d75.png b/assets/images/CreateDashboard-4f7bc94f27a9ffb36b7b5f8c81fb3d75.png deleted file mode 100644 index 78e2b1f24..000000000 Binary files a/assets/images/CreateDashboard-4f7bc94f27a9ffb36b7b5f8c81fb3d75.png and /dev/null differ diff --git a/assets/images/CreateWidget-25ed2492b3e2a2abc0b915d59d695542.png b/assets/images/CreateWidget-25ed2492b3e2a2abc0b915d59d695542.png deleted file mode 100644 index 3800c1a0f..000000000 Binary files a/assets/images/CreateWidget-25ed2492b3e2a2abc0b915d59d695542.png and /dev/null differ diff --git a/assets/images/CreateWidget-f596ab25c80ea89a250a68dfcff3f53d.png b/assets/images/CreateWidget-f596ab25c80ea89a250a68dfcff3f53d.png new file mode 100644 index 000000000..985c6c3e4 Binary files /dev/null and b/assets/images/CreateWidget-f596ab25c80ea89a250a68dfcff3f53d.png differ diff --git a/assets/images/CustomizeWidget-029599e6fed04ca6071d96980828538f.png b/assets/images/CustomizeWidget-029599e6fed04ca6071d96980828538f.png new file mode 100644 index 000000000..3266cb1b6 Binary files /dev/null and b/assets/images/CustomizeWidget-029599e6fed04ca6071d96980828538f.png differ diff --git a/assets/images/CustomizeWidget-372a06c18d9aa15b6c80bef0a03c0828.png b/assets/images/CustomizeWidget-372a06c18d9aa15b6c80bef0a03c0828.png deleted file mode 100644 index d35be5064..000000000 Binary files a/assets/images/CustomizeWidget-372a06c18d9aa15b6c80bef0a03c0828.png and /dev/null differ diff --git a/assets/images/DeleteDashboard-94ed5725252069d9c2565d1b56f7c5bb.png b/assets/images/DeleteDashboard-94ed5725252069d9c2565d1b56f7c5bb.png deleted file mode 100644 index 6d3c8598c..000000000 Binary files a/assets/images/DeleteDashboard-94ed5725252069d9c2565d1b56f7c5bb.png and /dev/null differ diff --git a/assets/images/DeleteDashboard-de6c2f781a84e327df0f8a29fd761374.png b/assets/images/DeleteDashboard-de6c2f781a84e327df0f8a29fd761374.png new file mode 100644 index 000000000..95ad0e7d0 Binary files /dev/null and b/assets/images/DeleteDashboard-de6c2f781a84e327df0f8a29fd761374.png differ diff --git a/assets/images/DeleteWidget-14fae75ee085ca966504213d5ba8cb09.png b/assets/images/DeleteWidget-14fae75ee085ca966504213d5ba8cb09.png deleted file mode 100644 index b408348f0..000000000 Binary files a/assets/images/DeleteWidget-14fae75ee085ca966504213d5ba8cb09.png and /dev/null differ diff --git a/assets/images/DeleteWidget-1bed7f83ff7701a4798a05e6c16a8c68.png b/assets/images/DeleteWidget-1bed7f83ff7701a4798a05e6c16a8c68.png new file mode 100644 index 000000000..dcf3a56ec Binary files /dev/null and b/assets/images/DeleteWidget-1bed7f83ff7701a4798a05e6c16a8c68.png differ diff --git a/assets/images/EditDashboard-65933356245c0ff0557897065a20848e.png b/assets/images/EditDashboard-65933356245c0ff0557897065a20848e.png deleted file mode 100644 index 67e2867d2..000000000 Binary files a/assets/images/EditDashboard-65933356245c0ff0557897065a20848e.png and /dev/null differ diff --git a/assets/images/EditDashboard-931c64aa1443a24eb4f7ca8390714030.png b/assets/images/EditDashboard-931c64aa1443a24eb4f7ca8390714030.png new file mode 100644 index 000000000..6150a21d7 Binary files /dev/null and b/assets/images/EditDashboard-931c64aa1443a24eb4f7ca8390714030.png differ diff --git a/assets/images/EditWidget-3ba0f4537b2c0f83f581b256a71fa0bf.png b/assets/images/EditWidget-3ba0f4537b2c0f83f581b256a71fa0bf.png new file mode 100644 index 000000000..500e4d98d Binary files /dev/null and b/assets/images/EditWidget-3ba0f4537b2c0f83f581b256a71fa0bf.png differ diff --git a/assets/images/EditWidget-df992198bf7499a6180883f83b489330.png b/assets/images/EditWidget-df992198bf7499a6180883f83b489330.png deleted file mode 100644 index e9f5281e8..000000000 Binary files a/assets/images/EditWidget-df992198bf7499a6180883f83b489330.png and /dev/null differ diff --git a/assets/js/0e384e19.d1d3a88b.js b/assets/js/0e384e19.d1d3a88b.js new file mode 100644 index 000000000..856fce460 --- /dev/null +++ b/assets/js/0e384e19.d1d3a88b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9671],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var a=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=a.createContext({}),u=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(r),m=o,g=c["".concat(l,".").concat(m)]||c[m]||d[m]||n;return r?a.createElement(g,i(i({ref:t},p),{},{components:r})):a.createElement(g,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,i=new Array(n);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>u});var a=r(87462),o=(r(67294),r(3905));const n={sidebar_position:1,slug:"/",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics."},i="What is ReportPortal?",s={unversionedId:"intro",id:"intro",title:"What is ReportPortal?",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics."},sidebar:"defaultSidebar",next:{title:"ReportPortal Tutorial",permalink:"/docs/reportportal-tutorial/"}},l={},u=[{value:"What ReportPortal can do?",id:"what-reportportal-can-do",level:2},{value:"What technologies are used?",id:"what-technologies-are-used",level:2},{value:"Benefits of report automation with ReportPortal",id:"benefits-of-report-automation-with-reportportal",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"what-is-reportportal"},"What is ReportPortal?"),(0,o.kt)("p",null,"ReportPortal is a TestOps service, that provides increased capabilities to speed up results analysis and reporting through the use of built-in analytic features."),(0,o.kt)("p",null,"ReportPortal is a great addition to Continuous Integration and Continuous\nTesting process."),(0,o.kt)("p",null,"ReportPortal is distributed under the Apache v2.0 license, and it is free to use and modify, even for commercial purposes. We offer the only paid premium feature \u2013 ",(0,o.kt)("a",{parentName:"p",href:"/category/quality-gates"},"Quality Gates"),"."),(0,o.kt)("p",null,"If a company is interested in our services, we can provide support hours to deploy, integrate, configure, or customize the tool, as well as ",(0,o.kt)("a",{parentName:"p",href:"https://reportportal.io/pricing"},"SaaS options"),"."),(0,o.kt)("h2",{id:"what-reportportal-can-do"},"What ReportPortal can do?"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Mainstream platforms integration")))),(0,o.kt)("p",null,"ReportPortal seamlessly integrates with mainstream platforms such as Jenkins, Jira, BDD process, majority of Functional and Unit testing frameworks."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Real-time results")))),(0,o.kt)("p",null,"Real-time integration provides businesses the ability to manage and track execution status directly from the ReportPortal."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Test case execution results structure")))),(0,o.kt)("p",null,"Test case execution results are stored following the same structure you have in your reporting suites and test plan. The test cases are shown together with all related data in one place, right where you need it: logs, screenshots, binary data. The execution pipeline of certain test cases are also available for you, so one can see previous test execution report in one click."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Collaborative analysis")))),(0,o.kt)("p",null,"Our test report dashboard also gives you the ability to collaboratively analyze the test automation results and quickly get automation test report. Particular test cases can be associated with a product bug, an automation issue, a system issue or can be submitted as an issue ticket directly from the execution result."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Historical data of test execution")))),(0,o.kt)("p",null,"ReportPortal provides enhanced capabilities along with auto-results analysis by\nleveraging historical data of test execution."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Automatic Analysis")))),(0,o.kt)("p",null,"With each execution, ReportPortal automatically figures out the root cause of a fail. As a result of AI-based defects triage, ReportPortal is marking a test result with a flag. Engineers will be alerted about this issue to provide further analysis: if it has been resolved already or which test results require actual human analysis."),(0,o.kt)("h2",{id:"what-technologies-are-used"},"What technologies are used?"),(0,o.kt)("p",null,"Considering a high load rate and performance requirements, we use\ncutting edge technologies such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"PostgreSQL - The World's Most Advanced Open Source Relational Database.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"REST Web Service - lightweight requests, industry standard.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Mobile responsive UI - check it at any mobile device with the default browser."))),(0,o.kt)("h2",{id:"benefits-of-report-automation-with-reportportal"},"Benefits of report automation with ReportPortal"),(0,o.kt)("p",null,"Report automation is the procedure by which reports are routinely and automatically refreshed."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Speedy decision-making")))),(0,o.kt)("p",null,"Report automation is an effective technique to provide information that is essential to business operations. Delivering crucial information to the appropriate people at the appropriate time becomes considerably quicker and simpler by automatically generated reports. It allows to get business faster insights and drive better decisions."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Accurate data")))),(0,o.kt)("p",null,"In ReportPortal, you have fully real-time analytic report automation. Since the reports are automatically generated, you are insured against human error when reports are generated manually."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Advanced reporting")))),(0,o.kt)("p",null,"ReportPortal offers widgets with a user-friendly visual interface to create interactive reports for all your needs. For example, you can build qa metrics dashboard using ",(0,o.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/OverallStatistics"},"Overall statistics"),", ",(0,o.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/UniqueBugsTable"},"Unique bugs table"),", ",(0,o.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/PassingRateSummary"},"Passing rate summary")," widgets. "),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Easily running CI/CD tests")))),(0,o.kt)("p",null,"ReportPortal is CI/CD agnostic tool solution. You can use ",(0,o.kt)("a",{parentName:"p",href:"/log-data-in-reportportal/HowToRunYourTests"},"any CI environment")," to run automated tests to improve quality of product by catching issues early in development lifecycle."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0e384e19.fb41a6cf.js b/assets/js/0e384e19.fb41a6cf.js deleted file mode 100644 index 16e43817e..000000000 --- a/assets/js/0e384e19.fb41a6cf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9671],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),u=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(r),m=n,g=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return r?a.createElement(g,i(i({ref:t},p),{},{components:r})):a.createElement(g,i({ref:t},p))}));function g(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:n,i[1]=s;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=r(87462),n=(r(67294),r(3905));const o={sidebar_position:1,slug:"/",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics."},i="What is ReportPortal?",s={unversionedId:"intro",id:"intro",title:"What is ReportPortal?",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics."},sidebar:"defaultSidebar",next:{title:"ReportPortal Tutorial",permalink:"/docs/reportportal-tutorial/"}},l={},u=[{value:"What ReportPortal can do?",id:"what-reportportal-can-do",level:2},{value:"What technologies are used?",id:"what-technologies-are-used",level:2},{value:"Benefits of report automation with ReportPortal",id:"benefits-of-report-automation-with-reportportal",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"what-is-reportportal"},"What is ReportPortal?"),(0,n.kt)("p",null,"ReportPortal is a TestOps service, that provides increased capabilities to speed up results analysis and reporting through the use of built-in analytic features."),(0,n.kt)("p",null,"ReportPortal is a great addition to Continuous Integration and Continuous\nTesting process."),(0,n.kt)("h2",{id:"what-reportportal-can-do"},"What ReportPortal can do?"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Mainstream platforms integration")))),(0,n.kt)("p",null,"ReportPortal seamlessly integrates with mainstream platforms such as Jenkins, Jira, BDD process, majority of Functional and Unit testing frameworks."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Real-time results")))),(0,n.kt)("p",null,"Real-time integration provides businesses the ability to manage and track execution status directly from the ReportPortal."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Test case execution results structure")))),(0,n.kt)("p",null,"Test case execution results are stored following the same structure you have in your reporting suites and test plan. The test cases are shown together with all related data in one place, right where you need it: logs, screenshots, binary data. The execution pipeline of certain test cases are also available for you, so one can see previous test execution report in one click."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Collaborative analysis")))),(0,n.kt)("p",null,"Our test report dashboard also gives you the ability to collaboratively analyze the test automation results and quickly get automation test report. Particular test cases can be associated with a product bug, an automation issue, a system issue or can be submitted as an issue ticket directly from the execution result."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Historical data of test execution")))),(0,n.kt)("p",null,"ReportPortal provides enhanced capabilities along with auto-results analysis by\nleveraging historical data of test execution."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Automatic Analysis")))),(0,n.kt)("p",null,"With each execution, ReportPortal automatically figures out the root cause of a fail. As a result of AI-based defects triage, ReportPortal is marking a test result with a flag. Engineers will be alerted about this issue to provide further analysis: if it has been resolved already or which test results require actual human analysis."),(0,n.kt)("h2",{id:"what-technologies-are-used"},"What technologies are used?"),(0,n.kt)("p",null,"Considering a high load rate and performance requirements, we use\ncutting edge technologies such as:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"PostgreSQL - The World's Most Advanced Open Source Relational Database.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"REST Web Service - lightweight requests, industry standard.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Mobile responsive UI - check it at any mobile device with the default browser."))),(0,n.kt)("h2",{id:"benefits-of-report-automation-with-reportportal"},"Benefits of report automation with ReportPortal"),(0,n.kt)("p",null,"Report automation is the procedure by which reports are routinely and automatically refreshed."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Speedy decision-making")))),(0,n.kt)("p",null,"Report automation is an effective technique to provide information that is essential to business operations. Delivering crucial information to the appropriate people at the appropriate time becomes considerably quicker and simpler by automatically generated reports. It allows to get business faster insights and drive better decisions."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Accurate data")))),(0,n.kt)("p",null,"In ReportPortal, you have fully real-time analytic report automation. Since the reports are automatically generated, you are insured against human error when reports are generated manually."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Advanced reporting")))),(0,n.kt)("p",null,"ReportPortal offers widgets with a user-friendly visual interface to create interactive reports for all your needs. For example, you can build qa metrics dashboard using ",(0,n.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/OverallStatistics"},"Overall statistics"),", ",(0,n.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/UniqueBugsTable"},"Unique bugs table"),", ",(0,n.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/PassingRateSummary"},"Passing rate summary")," widgets. "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Easily running CI/CD tests")))),(0,n.kt)("p",null,"ReportPortal is CI/CD agnostic tool solution. You can use ",(0,n.kt)("a",{parentName:"p",href:"/log-data-in-reportportal/HowToRunYourTests"},"any CI environment")," to run automated tests to improve quality of product by catching issues early in development lifecycle."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/33580f2e.5e68215f.js b/assets/js/33580f2e.d4dccbfe.js similarity index 74% rename from assets/js/33580f2e.5e68215f.js rename to assets/js/33580f2e.d4dccbfe.js index 634cca798..6ffd0a078 100644 --- a/assets/js/33580f2e.5e68215f.js +++ b/assets/js/33580f2e.d4dccbfe.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2106],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>k});var o=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(r),d=a,k=u["".concat(s,".").concat(d)]||u[d]||m[d]||n;return r?o.createElement(k,l(l({ref:t},p),{},{components:r})):o.createElement(k,l({ref:t},p))}));function k(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,l=new Array(n);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:a,l[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var o=r(87462),a=(r(67294),r(3905));const n={sidebar_position:3,sidebar_label:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker."},l="Deploy with Docker on Linux/Mac",i={unversionedId:"installation-steps/DeployWithDockerOnLinuxMac",id:"installation-steps/DeployWithDockerOnLinuxMac",title:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker.",source:"@site/docs/installation-steps/DeployWithDockerOnLinuxMac.md",sourceDirName:"installation-steps",slug:"/installation-steps/DeployWithDockerOnLinuxMac",permalink:"/docs/installation-steps/DeployWithDockerOnLinuxMac",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/installation-steps/DeployWithDockerOnLinuxMac.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker."},sidebar:"defaultSidebar",previous:{title:"Basic monitoring configuration",permalink:"/docs/installation-steps/BasicMonitoringConfiguration"},next:{title:"Deploy with Docker on Windows",permalink:"/docs/installation-steps/DeployWithDockerOnWindows"}},s={},c=[{value:"Install Docker",id:"install-docker",level:2},{value:"Deploy ReportPortal with Docker",id:"deploy-reportportal-with-docker",level:2}],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"deploy-with-docker-on-linuxmac"},"Deploy with Docker on Linux/Mac"),(0,a.kt)("p",null,"ReportPortal can be easily deployed using Docker Compose."),(0,a.kt)("h2",{id:"install-docker"},"Install Docker"),(0,a.kt)("p",null,"Docker is supported by all major Linux distributions, MacOS and Windows."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.docker.com/get-started"},"Download")," Docker"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/compose/install/"},"Download")," Docker Compose")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f Recomended change resources limits at least ",(0,a.kt)("strong",{parentName:"p"},"2")," CPU ",(0,a.kt)("strong",{parentName:"p"},"5")," GB RAM for Docker Desktop: ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/mac/#advanced"},"MAC")," | ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/windows/#advanced"},"Windows")," | ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/linux/#advanced"},"Linux"))),(0,a.kt)("h2",{id:"deploy-reportportal-with-docker"},"Deploy ReportPortal with Docker"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Download the latest ReportPortal Docker Compose file from ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/reportportal/reportportal/blob/master/docker-compose.yml"},"here"),". You can make it by run the following command:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"curl -LO https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Make the ElasticSearch configuration prerequisites for the analyzer service"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"OPTIONAL: Set {vm.max_map_count} kernel setting before ReportPortal deploying with the following ",(0,a.kt)("a",{parentName:"li",href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#docker-cli-run-prod-mode"},"Commands")),(0,a.kt)("li",{parentName:"ul"},"Give right permissions to ElasticSearch data folder using the following commands:")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir -p data/elasticsearch\nchmod 777 data/elasticsearch\nchgrp 1000 data/elasticsearch\n")),(0,a.kt)("p",null,"For more details about ElasticSearch visit ElasticSearch ",(0,a.kt)("a",{parentName:"p",href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#_notes_for_production_use_and_defaults"},"guide")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"OPTIONAL"),(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("strong",{parentName:"p"},"PostgreSQL Performance Tuning")),(0,a.kt)("p",{parentName:"blockquote"},'Depends on your hardware configuration and parameters of your system, you can additionally optimize your PostgreSQL performance by adding the following parameters to "command" option in the Docker compose file:'),(0,a.kt)("pre",{parentName:"blockquote"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"}," -c effective_io_concurrency=\n -c shared_buffers=\n -c max_connections=\n -c effective_cache_size=\n -c maintenance_work_mem=\n -c random_page_cost=\n -c seq_page_cost= \n -c min_wal_size= \n -c max_wal_size=\n -c max_worker_processes=\n -c max_parallel_workers_per_gather=\n")),(0,a.kt)("p",{parentName:"blockquote"},"Please choose set the values of these variables that are right for your system."),(0,a.kt)("p",{parentName:"blockquote"},"You can also change PostgreSQL host by passing a new value to POSTGRES_SERVER environment ",(0,a.kt)("a",{parentName:"p",href:"./AdditionalConfigurationParameters"},"variable"),".")),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},"Start the application using the following command:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker-compose -p reportportal up -d --force-recreate\n")),(0,a.kt)("p",null,"Where:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"-p reportportal")," adds project prefix 'reportportal' to all containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"up")," creates and starts containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"-d")," daemon mode"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"--force-recreate")," Re-creates containers if there any")),(0,a.kt)("p",null,"Useful commands:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker-compose logs")," shows logs from all containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker logs ","<","container_name",">")," shows logs from selected container"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker ps -a | grep \"reportportal_\" | awk '{print $1}' | xargs docker rm -f")," Deletes all ReportPortal containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker-compose down"))),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},"Open your web-browser with an IP address of the deployed environment at port ",(0,a.kt)("strong",{parentName:"li"},"8080"))),(0,a.kt)("p",null,"Use the following ",(0,a.kt)("strong",{parentName:"p"},"login\\pass")," to access:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Default User: ",(0,a.kt)("inlineCode",{parentName:"li"},"default\\1q2w3e")),(0,a.kt)("li",{parentName:"ul"},"Administrator: ",(0,a.kt)("inlineCode",{parentName:"li"},"superadmin\\erebus"))),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f Please change the admin password for better security")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2106],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>k});var o=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(r),d=a,k=u["".concat(s,".").concat(d)]||u[d]||m[d]||n;return r?o.createElement(k,l(l({ref:t},p),{},{components:r})):o.createElement(k,l({ref:t},p))}));function k(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,l=new Array(n);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:a,l[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var o=r(87462),a=(r(67294),r(3905));const n={sidebar_position:3,sidebar_label:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker."},l="Deploy with Docker on Linux/Mac",i={unversionedId:"installation-steps/DeployWithDockerOnLinuxMac",id:"installation-steps/DeployWithDockerOnLinuxMac",title:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker.",source:"@site/docs/installation-steps/DeployWithDockerOnLinuxMac.md",sourceDirName:"installation-steps",slug:"/installation-steps/DeployWithDockerOnLinuxMac",permalink:"/docs/installation-steps/DeployWithDockerOnLinuxMac",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/installation-steps/DeployWithDockerOnLinuxMac.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker."},sidebar:"defaultSidebar",previous:{title:"Basic monitoring configuration",permalink:"/docs/installation-steps/BasicMonitoringConfiguration"},next:{title:"Deploy with Docker on Windows",permalink:"/docs/installation-steps/DeployWithDockerOnWindows"}},s={},c=[{value:"Install Docker",id:"install-docker",level:2},{value:"Deploy ReportPortal with Docker",id:"deploy-reportportal-with-docker",level:2}],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"deploy-with-docker-on-linuxmac"},"Deploy with Docker on Linux/Mac"),(0,a.kt)("p",null,"ReportPortal can be easily deployed using Docker Compose."),(0,a.kt)("h2",{id:"install-docker"},"Install Docker"),(0,a.kt)("p",null,"Docker is supported by all major Linux distributions, MacOS and Windows."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.docker.com/get-started"},"Download")," Docker"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/compose/install/"},"Download")," Docker Compose")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f Recomended change resources limits at least ",(0,a.kt)("strong",{parentName:"p"},"2")," CPU ",(0,a.kt)("strong",{parentName:"p"},"5")," GB RAM for Docker Desktop: ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/mac/#advanced"},"MAC")," | ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/windows/#advanced"},"Windows")," | ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/linux/#advanced"},"Linux"))),(0,a.kt)("h2",{id:"deploy-reportportal-with-docker"},"Deploy ReportPortal with Docker"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Download the latest ReportPortal Docker Compose file from ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/reportportal/reportportal/blob/master/docker-compose.yml"},"here"),". You can make it by run the following command:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"curl -LO https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Make the ElasticSearch configuration prerequisites for the analyzer service"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"OPTIONAL: Set {vm.max_map_count} kernel setting before ReportPortal deploying with the following ",(0,a.kt)("a",{parentName:"li",href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#docker-cli-run-prod-mode"},"Commands")),(0,a.kt)("li",{parentName:"ul"},"Give right permissions to ElasticSearch data folder using the following commands:")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir -p data/elasticsearch\nchmod 777 data/elasticsearch\nchgrp 1000 data/elasticsearch\n")),(0,a.kt)("p",null,"For more details about ElasticSearch visit ElasticSearch ",(0,a.kt)("a",{parentName:"p",href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#_notes_for_production_use_and_defaults"},"guide")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"OPTIONAL"),(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("strong",{parentName:"p"},"PostgreSQL Performance Tuning")),(0,a.kt)("p",{parentName:"blockquote"},'Depends on your hardware configuration and parameters of your system, you can additionally optimize your PostgreSQL performance by adding the following parameters to "command" option in the Docker compose file:'),(0,a.kt)("pre",{parentName:"blockquote"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"}," -c effective_io_concurrency=\n -c shared_buffers=\n -c max_connections=\n -c effective_cache_size=\n -c maintenance_work_mem=\n -c random_page_cost=\n -c seq_page_cost= \n -c min_wal_size= \n -c max_wal_size=\n -c max_worker_processes=\n -c max_parallel_workers_per_gather=\n")),(0,a.kt)("p",{parentName:"blockquote"},"Please choose set the values of these variables that are right for your system."),(0,a.kt)("p",{parentName:"blockquote"},"You can also change PostgreSQL host by passing a new value to POSTGRES_SERVER environment ",(0,a.kt)("a",{parentName:"p",href:"./AdditionalConfigurationParameters"},"variable"),".")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"Ensure you override the UAT Service environment variable RP_INITIAL_ADMIN_PASSWORD")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"version: '2.4'\nservices:\n\n uat:\n environment:\n RP_INITIAL_ADMIN_PASSWORD: \"My_Strong_Password!\"\n")),(0,a.kt)("p",null,"We've modified the current approach: during the initial installation and the first login of the superadmin, they will need to create a unique initial password, different from the default password provided in the ReportPortal installation documentation. Failure to do so will prevent the Auth service from starting."),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},"Start the application using the following command:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker-compose -p reportportal up -d --force-recreate\n")),(0,a.kt)("p",null,"Where:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"-p reportportal")," adds project prefix 'reportportal' to all containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"up")," creates and starts containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"-d")," daemon mode"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"--force-recreate")," Re-creates containers if there any")),(0,a.kt)("p",null,"Useful commands:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker-compose logs")," shows logs from all containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker logs ","<","container_name",">")," shows logs from selected container"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker ps -a | grep \"reportportal_\" | awk '{print $1}' | xargs docker rm -f")," Deletes all ReportPortal containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker-compose down"))),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},"Open your web-browser with an IP address of the deployed environment at port ",(0,a.kt)("strong",{parentName:"li"},"8080"))),(0,a.kt)("p",null,"Use the following ",(0,a.kt)("strong",{parentName:"p"},"login\\pass")," to access:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Default User: ",(0,a.kt)("inlineCode",{parentName:"li"},"default\\1q2w3e")),(0,a.kt)("li",{parentName:"ul"},"Administrator: ",(0,a.kt)("inlineCode",{parentName:"li"},"superadmin\\erebus"))),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f Please change the admin password for better security")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/40be41a9.619ee169.js b/assets/js/40be41a9.619ee169.js new file mode 100644 index 000000000..fd352e6ba --- /dev/null +++ b/assets/js/40be41a9.619ee169.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6325],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>g});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=u(a),m=r,g=p["".concat(s,".").concat(m)]||p[m]||d[m]||i;return a?n.createElement(g,o(o({ref:t},c),{},{components:a})):n.createElement(g,o({ref:t},c))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:r,o[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var n=a(87462),r=(a(67294),a(3905));const i={sidebar_label:"Azure SAML"},o="Azure SAML",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/AzureSAML",id:"reportportal-configuration/authorization/SAMLProvider/AzureSAML",title:"Azure SAML",description:"SAML plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/AzureSAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"Azure SAML"},sidebar:"defaultSidebar",previous:{title:"SAML Provider",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/"},next:{title:"Okta SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML"}},s={},u=[{value:"Configure SAML on Azure side",id:"configure-saml-on-azure-side",level:2},{value:"Create organization in Azure",id:"create-organization-in-azure",level:3},{value:"Create your application in Azure",id:"create-your-application-in-azure",level:3},{value:"Assign users to the application in Azure",id:"assign-users-to-the-application-in-azure",level:3},{value:"Configure Single sign-on on Azure",id:"configure-single-sign-on-on-azure",level:3},{value:"Basic SAML Configuration",id:"basic-saml-configuration",level:3},{value:"Add Azure attributes",id:"add-azure-attributes",level:3},{value:"Configure SAML on ReportPortal side",id:"configure-saml-on-reportportal-side",level:2},{value:"Synchronize Azure SAML and ReportPortal",id:"synchronize-azure-saml-and-reportportal",level:2}],c={toc:u},p="wrapper";function d(e){let{components:t,...i}=e;return(0,r.kt)(p,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"azure-saml"},"Azure SAML"),(0,r.kt)("p",null,"SAML plugin is available in ReportPortal on the Plugins page."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,r.kt)("p",null,"Login to ReportPortal via Azure SAML is available starting from version 5.7 (SAML Okta was implemented in versions before 5.7)."),(0,r.kt)("p",null,"Azure SAML is a useful authorization method for big companies with 100+ employees, especially if this organization is already presented in Azure service. The main benefit here is no need for manual account creation. Users can log in to the ReportPortal using Azure SAML in an uncomplicated way: select login with SAML, then choose Azure, and upon login users\u2019 data is synchronized with ReportPortal automatically."),(0,r.kt)("p",null,"If your organization is using Azure SAML and some employees left, there is no need to remove their accounts from ReportPortal and from other Azure applications \u2013 just clearing their accounts in Azure will be enough."),(0,r.kt)("p",null,"To configure authorization via Azure SAML we need to synchronize Azure and ReportPortal."),(0,r.kt)("p",null,"Firstly, configure SAML on Azure side."),(0,r.kt)("h2",{id:"configure-saml-on-azure-side"},"Configure SAML on Azure side"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Log in to ",(0,r.kt)("a",{parentName:"li",href:"https://portal.azure.com"},"Azure portal")," using your organization creds."),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"App Services"),".\n",(0,r.kt)("media-view",{src:a(86100),alt:"App Services button"})),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"View")," in the ",(0,r.kt)("inlineCode",{parentName:"li"},"Manage Azure Active Directory")," section.\n",(0,r.kt)("media-view",{src:a(12181),alt:"View button"})),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"Manage Tenants"),".\n",(0,r.kt)("media-view",{src:a(79949),alt:"Manage Tenants"}))),(0,r.kt)("h3",{id:"create-organization-in-azure"},"Create organization in Azure"),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"If you haven\u2019t configured organization in Azure yet, click ",(0,r.kt)("inlineCode",{parentName:"li"},"Create"),".",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"if you have configured organization in Azure, please, go to step 9.")),(0,r.kt)("media-view",{src:a(29962),alt:"Configure organization"})),(0,r.kt)("li",{parentName:"ol"},"Select a tenant type (",(0,r.kt)("inlineCode",{parentName:"li"},"Azure Active Directory"),") and click ",(0,r.kt)("inlineCode",{parentName:"li"},"Next: Configuration >")," button.\n",(0,r.kt)("media-view",{src:a(50747),alt:"Select a tenant type"})),(0,r.kt)("li",{parentName:"ol"},"Fill in the necessary fields and click ",(0,r.kt)("inlineCode",{parentName:"li"},"Next: Review + create >")," button.\n",(0,r.kt)("media-view",{src:a(52365),alt:"Create a tenant"})),(0,r.kt)("li",{parentName:"ol"},"Pass the Captcha verification and click the ",(0,r.kt)("inlineCode",{parentName:"li"},"Create")," button.\n",(0,r.kt)("media-view",{src:a(54383),alt:"Captcha verification"}))),(0,r.kt)("h3",{id:"create-your-application-in-azure"},"Create your application in Azure"),(0,r.kt)("ol",{start:9},(0,r.kt)("li",{parentName:"ol"},"After the creation of an organization go to the ",(0,r.kt)("inlineCode",{parentName:"li"},"Enterprise Applications")," section.\n",(0,r.kt)("media-view",{src:a(61512),alt:"Enterprise Applications section"})),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"New application"),".\n",(0,r.kt)("media-view",{src:a(98621),alt:"New application button"})),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"Create your own application"),".\n",(0,r.kt)("media-view",{src:a(67524),alt:"Create your own application"})),(0,r.kt)("li",{parentName:"ol"},"Enter the name of your application, choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Integrate any other application you don't find in the gallery (Non-gallery)")," bullet and click ",(0,r.kt)("inlineCode",{parentName:"li"},"Create")," button.\n",(0,r.kt)("media-view",{src:a(57140),alt:"The name of your application"}))),(0,r.kt)("h3",{id:"assign-users-to-the-application-in-azure"},"Assign users to the application in Azure"),(0,r.kt)("ol",{start:13},(0,r.kt)("li",{parentName:"ol"},"Assign users (e.g., yourself) to this application. Please, follow the next screenshots:\n",(0,r.kt)("media-view",{src:a(31005),alt:"Assign users to your application"}),(0,r.kt)("media-view",{src:a(94962),alt:"Add user/group"}),(0,r.kt)("media-view",{src:a(63431),alt:"Add assignment"}))),(0,r.kt)("h3",{id:"configure-single-sign-on-on-azure"},"Configure Single sign-on on Azure"),(0,r.kt)("ol",{start:14},(0,r.kt)("li",{parentName:"ol"},"Go to the ",(0,r.kt)("inlineCode",{parentName:"li"},"Single sign-on")," section.\n",(0,r.kt)("media-view",{src:a(96260),alt:"Single sign-on section"})),(0,r.kt)("li",{parentName:"ol"},"Choose SAML.\n",(0,r.kt)("media-view",{src:a(73798),alt:"Select a Single sign-on method"}))),(0,r.kt)("h3",{id:"basic-saml-configuration"},"Basic SAML Configuration"),(0,r.kt)("ol",{start:16},(0,r.kt)("li",{parentName:"ol"},"Configure ",(0,r.kt)("inlineCode",{parentName:"li"},"Basic SAML Configuration")," settings as follows:\n",(0,r.kt)("media-view",{src:a(15055),alt:"Basic SAML Configuration"}))),(0,r.kt)("h3",{id:"add-azure-attributes"},"Add Azure attributes"),(0,r.kt)("ol",{start:17},(0,r.kt)("li",{parentName:"ol"},"Edit ",(0,r.kt)("inlineCode",{parentName:"li"},"Attributes & Claims")," settings and add ",(0,r.kt)("strong",{parentName:"li"},(0,r.kt)("em",{parentName:"strong"},"email")),", ",(0,r.kt)("strong",{parentName:"li"},(0,r.kt)("em",{parentName:"strong"},"firstName"))," and ",(0,r.kt)("strong",{parentName:"li"},(0,r.kt)("em",{parentName:"strong"},"lastName"))," attributes (default Azure attributes have ugly format). Please follow the next screenshots:\n",(0,r.kt)("media-view",{src:a(27503),alt:"Edit Attributes & Claims settings"}),(0,r.kt)("media-view",{src:a(36619),alt:"Add new claim"}),(0,r.kt)("media-view",{src:a(90745),alt:"Manage claim"}))),(0,r.kt)("p",null,"SAML configuration is completed on Azure side after adding these attributes."),(0,r.kt)("p",null,"Lastly, configure SAML on ReportPortal side."),(0,r.kt)("h2",{id:"configure-saml-on-reportportal-side"},"Configure SAML on ReportPortal side"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Log in to ",(0,r.kt)("strong",{parentName:"li"},"ReportPortal")," as Admin."),(0,r.kt)("li",{parentName:"ol"},"Open Menu at the bottom and choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Administrate")," section.\n",(0,r.kt)("media-view",{src:a(84280),alt:"Administrate section in our test automation reporting platform"})),(0,r.kt)("li",{parentName:"ol"},"Select ",(0,r.kt)("inlineCode",{parentName:"li"},"Plugins"),".\n",(0,r.kt)("media-view",{src:a(67919),alt:"Plugins section in our continuous testing platform"})),(0,r.kt)("li",{parentName:"ol"},"Open ",(0,r.kt)("inlineCode",{parentName:"li"},"SAML"),".\n",(0,r.kt)("media-view",{src:a(6991),alt:"SAML plugin"})),(0,r.kt)("li",{parentName:"ol"},"Click the ",(0,r.kt)("inlineCode",{parentName:"li"},"Add integration")," button.\n",(0,r.kt)("media-view",{src:a(62772),alt:"Add integration"}))),(0,r.kt)("h2",{id:"synchronize-azure-saml-and-reportportal"},"Synchronize Azure SAML and ReportPortal"),(0,r.kt)("ol",{start:6},(0,r.kt)("li",{parentName:"ol"},"Synchronize Azure SAML and ReportPortal as follows:\n",(0,r.kt)("media-view",{src:a(57803),alt:"Configure Azure SAML in our test automation dashboard"}))),(0,r.kt)("p",null,"Finally, you can log in to ReportPortal using Azure SAML."))}d.isMDXComponent=!0},86100:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML1-92b042929d4e97ced259a68ff9c48595.png"},67524:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML10-6a23fd3b721c2602c55c7ed2a0be6bbc.png"},57140:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML11-1004dc6e53af486ffca2d4e69c810f18.png"},31005:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML12-ef24287d428faf1c1225268f31276a06.png"},94962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML13-527d6583c9f0fc9663ad826bf699054f.png"},63431:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML14-8f34adbfd9f99384a1170e5ad3c1650e.png"},96260:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML15-43590b9488a24255e9c31db9384c3604.png"},73798:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML16-7de84a049daded06d2efc5e1aae1c09c.png"},15055:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML17-31dc030807624856b9769c82af7ac7da.png"},27503:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML18-5d4186bafc7685bbdb9838a38ff96393.png"},36619:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML19-e424d1bd6e85298967bb1680c6713643.png"},12181:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML2-b88ab5331da6850050d3bdc2e29e0224.png"},90745:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML20-78ea4fb5fe53ef4fb6c826517b218533.png"},84280:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML21-e96d50d6b9c587b71220461098459175.png"},67919:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML22-630e92e9c9422a3d516085766af00840.png"},6991:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML23-947d036a20b59253157372519c149f91.png"},62772:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML24-2ebfa04dfad9edff564ed1af0a0f1090.png"},79949:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML3-980285de43e221c4754358f0d095c165.png"},29962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML4-df61701732d7a04a632ae489776041de.png"},50747:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML5-e8e490ee53127d32e35266b27172df07.png"},52365:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML6-787a5dba2a61ba981a2f78b4e84318f1.png"},54383:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML7-93d6b3810967b1835920afcd3856c21a.png"},61512:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML8-798f0f507c461ecc20e7f40ec9825459.png"},98621:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML9-5a79b3928b71f7c1acb8e81c7d8fe07d.png"},57803:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/SAMLIntegration-ea71af4655807dc1ee2d23cdbef1ed6f.png"}}]); \ No newline at end of file diff --git a/assets/js/40be41a9.6445dfd1.js b/assets/js/40be41a9.6445dfd1.js deleted file mode 100644 index 6abf669aa..000000000 --- a/assets/js/40be41a9.6445dfd1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6325],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),u=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(a),m=n,g=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return a?r.createElement(g,o(o({ref:t},p),{},{components:a})):r.createElement(g,o({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:n,o[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_label:"Azure SAML"},o="Azure SAML",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/AzureSAML",id:"reportportal-configuration/authorization/SAMLProvider/AzureSAML",title:"Azure SAML",description:"SAML plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/AzureSAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"Azure SAML"},sidebar:"defaultSidebar",previous:{title:"SAML Provider",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/"},next:{title:"Okta SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML"}},s={},u=[{value:"Configure SAML on Azure side",id:"configure-saml-on-azure-side",level:2},{value:"Create organization in Azure",id:"create-organization-in-azure",level:3},{value:"Create your application in Azure",id:"create-your-application-in-azure",level:3},{value:"Assign users to the application in Azure",id:"assign-users-to-the-application-in-azure",level:3},{value:"Configure Single sign-on on Azure",id:"configure-single-sign-on-on-azure",level:3},{value:"Basic SAML Configuration",id:"basic-saml-configuration",level:3},{value:"Add Azure attributes",id:"add-azure-attributes",level:3},{value:"Configure SAML on ReportPortal side",id:"configure-saml-on-reportportal-side",level:2},{value:"Synchronize Azure SAML and ReportPortal",id:"synchronize-azure-saml-and-reportportal",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...i}=e;return(0,n.kt)(c,(0,r.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"azure-saml"},"Azure SAML"),(0,n.kt)("p",null,"SAML plugin is available in ReportPortal on the Plugins page."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,n.kt)("p",null,"Login to ReportPortal via Azure SAML is available starting from version 5.7 (SAML Okta was implemented in versions before 5.7)."),(0,n.kt)("p",null,"Azure SAML is a useful authorization method for big companies with 100+ employees, especially if this organization is already presented in Azure service. The main benefit here is no need for manual account creation. Users can log in to the ReportPortal using Azure SAML in an uncomplicated way: select login with SAML, then choose Azure, and upon login users\u2019 data is synchronized with ReportPortal automatically."),(0,n.kt)("p",null,"If your organization is using Azure SAML and some employees left, there is no need to remove their accounts from ReportPortal and from other Azure applications \u2013 just clearing their accounts in Azure will be enough."),(0,n.kt)("p",null,"To configure authorization via Azure SAML we need to synchronize Azure and ReportPortal."),(0,n.kt)("p",null,"Firstly, configure SAML on Azure side."),(0,n.kt)("h2",{id:"configure-saml-on-azure-side"},"Configure SAML on Azure side"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Log in to ",(0,n.kt)("a",{parentName:"p",href:"https://portal.azure.com"},"Azure portal")," using your organization creds.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click ",(0,n.kt)("inlineCode",{parentName:"p"},"App Services"),"."))),(0,n.kt)("media-view",{src:a(86100),alt:"App Services button"}),(0,n.kt)("ol",{start:3},(0,n.kt)("li",{parentName:"ol"},"Click ",(0,n.kt)("inlineCode",{parentName:"li"},"View")," in the ",(0,n.kt)("inlineCode",{parentName:"li"},"Manage Azure Active Directory")," section.")),(0,n.kt)("media-view",{src:a(12181),alt:"View button"}),(0,n.kt)("ol",{start:4},(0,n.kt)("li",{parentName:"ol"},"Click ",(0,n.kt)("inlineCode",{parentName:"li"},"Manage Tenants"),".")),(0,n.kt)("media-view",{src:a(79949),alt:"Manage Tenants"}),(0,n.kt)("h3",{id:"create-organization-in-azure"},"Create organization in Azure"),(0,n.kt)("ol",{start:5},(0,n.kt)("li",{parentName:"ol"},"If you haven\u2019t configured organization in Azure yet, click ",(0,n.kt)("inlineCode",{parentName:"li"},"Create"),".")),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"if you have configured organization in Azure, please, go to step 9.")),(0,n.kt)("media-view",{src:a(29962),alt:"Configure organization"}),(0,n.kt)("ol",{start:6},(0,n.kt)("li",{parentName:"ol"},"Select a tenant type (",(0,n.kt)("inlineCode",{parentName:"li"},"Azure Active Directory"),") and click ",(0,n.kt)("inlineCode",{parentName:"li"},"Next: Configuration >")," button.")),(0,n.kt)("media-view",{src:a(50747),alt:"Select a tenant type"}),(0,n.kt)("ol",{start:7},(0,n.kt)("li",{parentName:"ol"},"Fill in the necessary fields and click ",(0,n.kt)("inlineCode",{parentName:"li"},"Next: Review + create >")," button.")),(0,n.kt)("media-view",{src:a(52365),alt:"Create a tenant"}),(0,n.kt)("ol",{start:8},(0,n.kt)("li",{parentName:"ol"},"Pass the Captcha verification and click the ",(0,n.kt)("inlineCode",{parentName:"li"},"Create")," button.")),(0,n.kt)("media-view",{src:a(54383),alt:"Captcha verification"}),(0,n.kt)("h3",{id:"create-your-application-in-azure"},"Create your application in Azure"),(0,n.kt)("ol",{start:9},(0,n.kt)("li",{parentName:"ol"},"After the creation of an organization go to the ",(0,n.kt)("inlineCode",{parentName:"li"},"Enterprise Applications")," section.")),(0,n.kt)("media-view",{src:a(61512),alt:"Enterprise Applications section"}),(0,n.kt)("ol",{start:10},(0,n.kt)("li",{parentName:"ol"},"Click ",(0,n.kt)("inlineCode",{parentName:"li"},"New application"),".")),(0,n.kt)("media-view",{src:a(98621),alt:"New application button"}),(0,n.kt)("ol",{start:11},(0,n.kt)("li",{parentName:"ol"},"Click ",(0,n.kt)("inlineCode",{parentName:"li"},"Create your own application"),".")),(0,n.kt)("media-view",{src:a(67524),alt:"Create your own application"}),(0,n.kt)("ol",{start:12},(0,n.kt)("li",{parentName:"ol"},"Enter the name of your application, choose ",(0,n.kt)("inlineCode",{parentName:"li"},"Integrate any other application you don't find in the gallery (Non-gallery)")," bullet and click ",(0,n.kt)("inlineCode",{parentName:"li"},"Create")," button.")),(0,n.kt)("media-view",{src:a(57140),alt:"The name of your application"}),(0,n.kt)("h3",{id:"assign-users-to-the-application-in-azure"},"Assign users to the application in Azure"),(0,n.kt)("ol",{start:13},(0,n.kt)("li",{parentName:"ol"},"Assign users (e.g., yourself) to this application. Please, follow the next screenshots:")),(0,n.kt)("media-view",{src:a(31005),alt:"Assign users to your application"}),(0,n.kt)("media-view",{src:a(94962),alt:"Add user/group"}),(0,n.kt)("media-view",{src:a(63431),alt:"Add assignment"}),(0,n.kt)("h3",{id:"configure-single-sign-on-on-azure"},"Configure Single sign-on on Azure"),(0,n.kt)("ol",{start:14},(0,n.kt)("li",{parentName:"ol"},"Go to the ",(0,n.kt)("inlineCode",{parentName:"li"},"Single sign-on")," section.")),(0,n.kt)("media-view",{src:a(96260),alt:"Single sign-on section"}),(0,n.kt)("ol",{start:15},(0,n.kt)("li",{parentName:"ol"},"Choose SAML.")),(0,n.kt)("media-view",{src:a(73798),alt:"Select a Single sign-on method"}),(0,n.kt)("h3",{id:"basic-saml-configuration"},"Basic SAML Configuration"),(0,n.kt)("ol",{start:16},(0,n.kt)("li",{parentName:"ol"},"Configure ",(0,n.kt)("inlineCode",{parentName:"li"},"Basic SAML Configuration")," settings as follows:")),(0,n.kt)("media-view",{src:a(15055),alt:"Basic SAML Configuration"}),(0,n.kt)("h3",{id:"add-azure-attributes"},"Add Azure attributes"),(0,n.kt)("ol",{start:17},(0,n.kt)("li",{parentName:"ol"},"Edit ",(0,n.kt)("inlineCode",{parentName:"li"},"Attributes & Claims")," settings and add ",(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"email")),", ",(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"firstName"))," and ",(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"lastName"))," attributes (default Azure attributes have ugly format). Please follow the next screenshots:")),(0,n.kt)("media-view",{src:a(27503),alt:"Edit Attributes & Claims settings"}),(0,n.kt)("media-view",{src:a(36619),alt:"Add new claim"}),(0,n.kt)("media-view",{src:a(90745),alt:"Manage claim"}),(0,n.kt)("p",null,"SAML configuration is completed on Azure side after adding these attributes."),(0,n.kt)("p",null,"Lastly, configure SAML on ReportPortal side."),(0,n.kt)("h2",{id:"configure-saml-on-reportportal-side"},"Configure SAML on ReportPortal side"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Log in to ",(0,n.kt)("strong",{parentName:"p"},"ReportPortal")," as Admin.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Open Menu at the bottom and choose ",(0,n.kt)("inlineCode",{parentName:"p"},"Administrate")," section."))),(0,n.kt)("media-view",{src:a(84280),alt:"Administrate section in our test automation reporting platform"}),(0,n.kt)("ol",{start:3},(0,n.kt)("li",{parentName:"ol"},"Select ",(0,n.kt)("inlineCode",{parentName:"li"},"Plugins"),".")),(0,n.kt)("media-view",{src:a(67919),alt:"Plugins section in our continuous testing platform"}),(0,n.kt)("ol",{start:4},(0,n.kt)("li",{parentName:"ol"},"Open ",(0,n.kt)("inlineCode",{parentName:"li"},"SAML"),".")),(0,n.kt)("media-view",{src:a(6991),alt:"SAML plugin"}),(0,n.kt)("ol",{start:5},(0,n.kt)("li",{parentName:"ol"},"Click the ",(0,n.kt)("inlineCode",{parentName:"li"},"Add integration")," button.")),(0,n.kt)("media-view",{src:a(62772),alt:"Add integration"}),(0,n.kt)("h2",{id:"synchronize-azure-saml-and-reportportal"},"Synchronize Azure SAML and ReportPortal"),(0,n.kt)("ol",{start:6},(0,n.kt)("li",{parentName:"ol"},"Synchronize Azure SAML and ReportPortal as follows:")),(0,n.kt)("media-view",{src:a(57803),alt:"Configure Azure SAML in our test automation dashboard"}),(0,n.kt)("p",null,"Finally, you can log in to ReportPortal using Azure SAML."))}d.isMDXComponent=!0},86100:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML1-92b042929d4e97ced259a68ff9c48595.png"},67524:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML10-6a23fd3b721c2602c55c7ed2a0be6bbc.png"},57140:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML11-1004dc6e53af486ffca2d4e69c810f18.png"},31005:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML12-ef24287d428faf1c1225268f31276a06.png"},94962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML13-527d6583c9f0fc9663ad826bf699054f.png"},63431:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML14-8f34adbfd9f99384a1170e5ad3c1650e.png"},96260:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML15-43590b9488a24255e9c31db9384c3604.png"},73798:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML16-7de84a049daded06d2efc5e1aae1c09c.png"},15055:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML17-31dc030807624856b9769c82af7ac7da.png"},27503:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML18-5d4186bafc7685bbdb9838a38ff96393.png"},36619:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML19-e424d1bd6e85298967bb1680c6713643.png"},12181:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML2-b88ab5331da6850050d3bdc2e29e0224.png"},90745:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML20-78ea4fb5fe53ef4fb6c826517b218533.png"},84280:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML21-e96d50d6b9c587b71220461098459175.png"},67919:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML22-630e92e9c9422a3d516085766af00840.png"},6991:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML23-947d036a20b59253157372519c149f91.png"},62772:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML24-2ebfa04dfad9edff564ed1af0a0f1090.png"},79949:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML3-980285de43e221c4754358f0d095c165.png"},29962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML4-df61701732d7a04a632ae489776041de.png"},50747:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML5-e8e490ee53127d32e35266b27172df07.png"},52365:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML6-787a5dba2a61ba981a2f78b4e84318f1.png"},54383:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML7-93d6b3810967b1835920afcd3856c21a.png"},61512:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML8-798f0f507c461ecc20e7f40ec9825459.png"},98621:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML9-5a79b3928b71f7c1acb8e81c7d8fe07d.png"},57803:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/SAMLIntegration-ea71af4655807dc1ee2d23cdbef1ed6f.png"}}]); \ No newline at end of file diff --git a/assets/js/5668619f.3177252b.js b/assets/js/5668619f.3177252b.js new file mode 100644 index 000000000..2fccc17b2 --- /dev/null +++ b/assets/js/5668619f.3177252b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[225],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return a?n.createElement(h,r(r({ref:t},c),{},{components:a})):n.createElement(h,r({ref:t},c))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=a(87462),o=(a(67294),a(3905));const i={sidebar_position:3,sidebar_label:"Project configuration"},r="Project configuration",l={unversionedId:"reportportal-configuration/ProjectConfiguration",id:"reportportal-configuration/ProjectConfiguration",title:"Project configuration",description:"To see the list of available projects and open a project, click the drop-down list in the top of the left menu.",source:"@site/docs/reportportal-configuration/ProjectConfiguration.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/ProjectConfiguration",permalink:"/docs/reportportal-configuration/ProjectConfiguration",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/ProjectConfiguration.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Project configuration"},sidebar:"defaultSidebar",previous:{title:"Creation of project and adding users",permalink:"/docs/reportportal-configuration/CreationOfProjectAndAddingUsers"},next:{title:"ReportPortal jobs configuration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration"}},s={},p=[{value:"Project settings",id:"project-settings",level:2},{value:"General settings",id:"general-settings",level:3},{value:"Integrations",id:"integrations",level:3},{value:"E-mail notifications",id:"e-mail-notifications",level:3},{value:"Custom defect types",id:"custom-defect-types",level:3},{value:"Auto-analysis and Pattern analysis",id:"auto-analysis-and-pattern-analysis",level:3},{value:"Demo data",id:"demo-data",level:3},{value:"Management of users on the project",id:"management-of-users-on-the-project",level:2},{value:"Invite user on a project",id:"invite-user-on-a-project",level:3},{value:"Project role",id:"project-role",level:3},{value:"Edit project role",id:"edit-project-role",level:3},{value:"Unassign user from the project",id:"unassign-user-from-the-project",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(u,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"project-configuration"},"Project configuration"),(0,o.kt)("p",null,"To see the list of available projects and open a project, click the drop-down list in the top of the left menu."),(0,o.kt)("p",null,"ReportPortal supports customization of the default settings."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nUsers with the Administrator role can edit project settings on the project "Settings" page in Administrate section and on the Project space.\nUsers with the ',(0,o.kt)("inlineCode",{parentName:"p"},"PROJECT_MANAGER")," role can edit the settings on the project space only.\n",(0,o.kt)("inlineCode",{parentName:"p"},"MEMBER"),"/ ",(0,o.kt)("inlineCode",{parentName:"p"},"OPERATOR"),"/ ",(0,o.kt)("inlineCode",{parentName:"p"},"CUSTOMER")," can only view applied project settings."),(0,o.kt)("h2",{id:"project-settings"},"Project settings"),(0,o.kt)("p",null,'To go to the project settings page, click the "Project Settings" icon in the left menu.'),(0,o.kt)("p",null,"The project configuration page will be opened."),(0,o.kt)("p",null,'The project settings are divided into following tabs: "General", "Integrations", "Notifications", "Defect Types", "Analyzer", "Pattern Analysis", "Demo Data" and "Quality Gates" (if you have our ',(0,o.kt)("a",{parentName:"p",href:"/category/quality-gates"},"premium feature"),")."),(0,o.kt)("h3",{id:"general-settings"},"General settings"),(0,o.kt)("p",null,"Our test automation results dashboard allows you to control the amount of the stored data (launches, test items, logs and attachments) by removing outdated elements using Quartz jobs.\nFunctionality of data removing depends on two configurations. "),(0,o.kt)("p",null,"The first one is API service back-end environment variables that are described in ",(0,o.kt)("a",{parentName:"p",href:"./ReportPortalJobsConfiguration"},"ReportPortal jobs configuration")),(0,o.kt)("p",null,'The second one is the "General" tab you can configure parameter of data storage in ReportPortal for this project:'),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Name \u2013 is a disabled field as the project name cannot be changed.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Launch inactivity timeout")," - this parameter specifies the scheduled time for a job to interrupt inactive launches (launches which have the status 'in progress', but there is no any items during the chosen period). There are six options: "),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"1 hour, "),(0,o.kt)("li",{parentName:"ul"},"3 hours, "),(0,o.kt)("li",{parentName:"ul"},"6 hours, "),(0,o.kt)("li",{parentName:"ul"},"12 hours, "),(0,o.kt)("li",{parentName:"ul"},"1 day, "),(0,o.kt)("li",{parentName:"ul"},"7 days."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Keep launches")," - this parameter specifies how long the system will keep old launches in the data base. There are five options:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")))),(0,o.kt)("p",null,"After this period a launch will be deleted, and you can not see it in ReportPortal."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Keep logs")," - this parameter specifies how long the system will keep old logs in launches. Related launch structures will be saved, to keep statistics. There are five options:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Keep attachments")," - this parameter specifies how long to keep binary data (screenshots, files, video, and others attachments)\nin the system. There are five options:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")))),(0,o.kt)("media-view",{thumbnail:a(87194),src:"https://youtu.be/ih-ECyC29f0",alt:"Project settings in our real time dashboard open source",type:"video"}),(0,o.kt)("h3",{id:"integrations"},"Integrations"),(0,o.kt)("p",null,'The "Integration" tab can allow the project to connect ReportPortal with external systems or rewrite global configurations for third party systems.'),(0,o.kt)("p",null,"For more information on this topic, please refer to ",(0,o.kt)("a",{parentName:"p",href:"./IntegrationViaPlugin"},"Integration with external systems"),"."),(0,o.kt)("h3",{id:"e-mail-notifications"},"E-mail notifications"),(0,o.kt)("p",null,'The "Notifications" tab provides the administrator with the ability to activate e-mail notifications on the project.'),(0,o.kt)("p",null,"ReportPortal provides a way to add multiple rules with specific conditions. The Notification rule should be unique per project, have a unique parameter set, and specify recipients. For Example: In case, Launch names, attributes)."),(0,o.kt)("p",null,"Permissions:\nUsers with ",(0,o.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR"),' a role can configure "Notifications" in the Administrate section.\nUsers with ',(0,o.kt)("inlineCode",{parentName:"p"},"PROJECT_MANAGER")," roles can edit the settings on the project space only."),(0,o.kt)("p",null,"To do that, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login to the ReportPortal."),(0,o.kt)("li",{parentName:"ol"},"Navigate to the Project -",">",' Project "Settings" page.'),(0,o.kt)("li",{parentName:"ol"},'Open the "Notifications" tab and click on a button "Create new notification rule" '),(0,o.kt)("li",{parentName:"ol"},'Enter your email into the "From" field. This email will be used as a notification sender.'),(0,o.kt)("li",{parentName:"ol"},'Select recipients. To do that, start typing any symbols into the "Recipients" field.\nYou can select an item from the auto-complete tool-tip using the\nkeyboard (use the "Up" and "Down" arrows and "Enter" button). You can also enter a custom email into the "Recipients" field. To add a custom\nemail, just enter the email address and press "Enter".'),(0,o.kt)("li",{parentName:"ol"},'The "Launch owner" is selected by default. Uncheck "Launch owner" to exclude\nhim/her from the notification.'),(0,o.kt)("li",{parentName:"ol"},'Select the "In Case" setting. To do that, select one of the following options from the "In Case" drop-down.'),(0,o.kt)("li",{parentName:"ol"},'Select launches (optional). To do that, start typing any symbols into the "Launch names" field.\nYou can select an item from the auto-complete tool-tip using the "Up" and "Down" arrows and clicking "Enter" on the keyboard. This is an alternate way you can add a new launch name that does not exist on the project. Several launches names can be selected; the recipients will receive notifications when each of them finishes.'),(0,o.kt)("li",{parentName:"ol"},'Then Select attributes (optional). To do that, start typing any symbols into the "Attribute key" and "Attribute value" fields. The system will suggest the results in the drop-down, after at least 1 symbol is provided. It is also possible to add a new attribute (that does not exist on the project). Several attributes can be selected at once; the corresponding recipients will receive notifications about the launches that have all the specified attributes.'),(0,o.kt)("li",{parentName:"ol"},"Switch ON Notifications"),(0,o.kt)("li",{parentName:"ol"},'The system will activate the "Email notification" option. After the launch is finished, the recipients will receive a notification via email.'),(0,o.kt)("li",{parentName:"ol"},"Add more rules, if needed. Each Notification rule should be unique."),(0,o.kt)("li",{parentName:"ol"},"You can edit/ copy/enable/disable notification rule by clicking on the appropriate controls on the notification rule. ")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Users with a ",(0,o.kt)("inlineCode",{parentName:"p"},"MEMBER"),"/ ",(0,o.kt)("inlineCode",{parentName:"p"},"OPERATOR"),"/ ",(0,o.kt)("inlineCode",{parentName:"p"},"CUSTOMER")," project role will not have the capability to edit the project settings, however, they do have the permissions to view them.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"For using this functionality be sure that the E-mail server is configured.")),(0,o.kt)("h3",{id:"custom-defect-types"},"Custom defect types"),(0,o.kt)("p",null,'The "Defect Types" tab allows users with permissions to create custom defect types as subtypes of default defects on the project.'),(0,o.kt)("p",null,"After Installation the ReportPortal by default sets-up the following defect types groups:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"To investigate")," - means that no investigation was performed on this defect yet."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Product Bug")," - defect was investigated and a production bug was found as a cause for this test failure."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Automation Bug")," - defect was investigated and an automation test is not correct."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"System Issue")," - defect was investigated and it turns out that it is a system-level issue, like the app, crashed and caused the test to fail."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"No Defect")," - defect was investigated and defined as not a defect.")),(0,o.kt)("p",null,"ReportPortal allows the use of existing defect types (Product Bug, Automation Bug, System Issue, No Defect, To investigate) and or to create custom ones on the project settings page."),(0,o.kt)("p",null,"To create custom defect types, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login into the ReportPortal."),(0,o.kt)("li",{parentName:"ol"},"Navigate to Projects -",">",' Project "Settings" page.'),(0,o.kt)("li",{parentName:"ol"},'Open "Defect Types" tab '),(0,o.kt)("li",{parentName:"ol"},'Click "Add Defect Type" button under any default defect type'),(0,o.kt)("li",{parentName:"ol"},"Add new defect type form will appear "),(0,o.kt)("li",{parentName:"ol"},'Enter "Defect name" and "Abbreviation", select color for defect presentation on the launches grid and widgets. '),(0,o.kt)("li",{parentName:"ol"},"Submit form. You will see an added defect type on the chart preview.")),(0,o.kt)("p",null,"Add more custom defects, if you need it. The system allows us to add up to ten subtypes of each default defect type."),(0,o.kt)("p",null,"Now you can do bug triage and set defect types as default Product Bug/Automation Bug/System Issue/No Defect/TO investigate or custom defects. All of them will be available to select on the Defect Type editor.\nFor more information refer to the ",(0,o.kt)("a",{parentName:"p",href:"/work-with-reports/InvestigationOfFailure"},"Investigation of failure")," topic."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Default defects cannot be modified and or deleted from the system. Custom defect types can be deleted at any time."),(0,o.kt)("p",{parentName:"admonition"},"You can create up to 15 custom defect types for each group.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you have deleted a custom type from the system, all test executions with this deleted defect type get the parent type of the group in which deleted defect has belonged. Statistics updates in all launches where a deleted defect was present.",(0,o.kt)("br",{parentName:"p"}),"\n",'For example, if you create a custom "Product Bug-1" as a subtype of "Product Bugs" group and investigate a few\ndefects as "Product Bug-1", then remove "Product Bug-1" from your project, all investigated "Product Bug-1" defects\nwill be shown as "Product Bug".')),(0,o.kt)("media-view",{thumbnail:a(94410),src:"https://youtu.be/CcU2_dEu59k",alt:"Defect Type Configuration for clear test execution report",type:"video"}),(0,o.kt)("h3",{id:"auto-analysis-and-pattern-analysis"},"Auto-analysis and Pattern analysis"),(0,o.kt)("p",null,'The "Auto-Analysis" and "Pattern analysis" tabs can allow reducing test failure analysis routine on the project.'),(0,o.kt)("p",null,"For more information on this topic, please refer to ",(0,o.kt)("a",{parentName:"p",href:"/category/analysis"},"Analysis"),"."),(0,o.kt)("h3",{id:"demo-data"},"Demo data"),(0,o.kt)("p",null,'The "Demo Data" tab provides a way to generate demo data on the project.'),(0,o.kt)("p",null,"The generated data could demonstrate how the launches, filter, and dashboard will look. On the other hand, demo data could be\nmodified or removed without any effect of your real objects."),(0,o.kt)("media-view",{thumbnail:a(2422),src:"https://youtu.be/bXHY0_sXAF8",alt:"Generate Demo Data with test report&analytics dashboard",type:"video"}),(0,o.kt)("h2",{id:"management-of-users-on-the-project"},"Management of users on the project"),(0,o.kt)("p",null,'On the "Project Members" page users with the appropriate roles can invite new members.'),(0,o.kt)("p",null,"Permissions: "),(0,o.kt)("p",null,"User with ",(0,o.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," role and users with project role ",(0,o.kt)("inlineCode",{parentName:"p"},"PROJECT_MANAGER"),"."),(0,o.kt)("h3",{id:"invite-user-on-a-project"},"Invite user on a project"),(0,o.kt)("p",null,'To invite a user on the "Project Members" page, perform the following steps:'),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as with the PROJECT_MANAGER project role."),(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Project Members" page on the left menu.'),(0,o.kt)("li",{parentName:"ol"},'Click the "Invite User" tab.'),(0,o.kt)("li",{parentName:"ol"},"Enter the email address of the user in case he/she is not present in the ReportPortal database or enter his/her login name."),(0,o.kt)("li",{parentName:"ol"},"In case the user is already available in the ReportPortal, his/her name will appear in the suggestion list.\nIf not, the Admin should enter the correct email address."),(0,o.kt)("li",{parentName:"ol"},"Select an appropriate role."),(0,o.kt)("li",{parentName:"ol"},"Then click 'Invite'."),(0,o.kt)("li",{parentName:"ol"},"In case the user is already available in ReportPortal s/he will be assigned to the project\nIf not, the letter with an invitation link will be sent to the user email address."),(0,o.kt)("li",{parentName:"ol"},"The user will receive an email with the link to the registration.\nWhen the user clicks the link, he/she will see a registration form."),(0,o.kt)("li",{parentName:"ol"},'The user needs to fill in the registration form and click the "Register"\nbutton to complete the registration. '),(0,o.kt)("li",{parentName:"ol"},'The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT\nMANAGER project role. ')),(0,o.kt)("media-view",{thumbnail:a(37802),src:"https://youtu.be/VOk80XZHpWc",alt:"Invite User From Project Members Page",type:"video"}),(0,o.kt)("h3",{id:"project-role"},"Project role"),(0,o.kt)("p",null,"Every user is given a specific Project role within a specific project."),(0,o.kt)("p",null,'Depends on the role, the user is able or not able to perform some actions. For more details, please see the "Permissions map".'),(0,o.kt)("p",null,"There are 4 possible Project roles in ReportPortal:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"PROJECT MANAGER")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"MEMBER")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"OPERATOR")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"CUSTOMER"))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The ",(0,o.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," has all privileges on the project.")),(0,o.kt)("h3",{id:"edit-project-role"},"Edit project role"),(0,o.kt)("p",null,"To edit the project role, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login into the ReportPortal as a user with ",(0,o.kt)("inlineCode",{parentName:"li"},"PROJECT_MANAGER")," project role."),(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Project Members" page on the left menu.'),(0,o.kt)("li",{parentName:"ol"},'Select a new value from the "Project Role" drop-down for the user. - The new project role will be automatically saved.')),(0,o.kt)("media-view",{thumbnail:a(73787),src:"https://youtu.be/DF38BbE5vws",alt:"Edit Project Role From Project Members Page",type:"video"}),(0,o.kt)("h3",{id:"unassign-user-from-the-project"},"Unassign user from the project"),(0,o.kt)("p",null,"Depending on the project needs the assignment could be removed.\nTo unassign the assignment for the user on the project, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login into the ReportPortal as a user with ",(0,o.kt)("inlineCode",{parentName:"li"},"PROJECT_MANAGER")," project role."),(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Project Members" page on the left menu.'),(0,o.kt)("li",{parentName:"ol"},"Find the required member."),(0,o.kt)("li",{parentName:"ol"},"Click the 'Unassign' button for the user."),(0,o.kt)("li",{parentName:"ol"},"Confirm the action in the popup."),(0,o.kt)("li",{parentName:"ol"},"The user will be unassigned from the current project but will stay in the system.")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Invite user, Assign/Unassign internal user to/from the project, change user's role on a project action can be done for a user\nwith a similar and lower role only.")))}d.isMDXComponent=!0},94410:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/CustomDefectTypes-bf0065f64620b1ddd1c8d7f9ebb96978.png"},2422:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/DemoData-f9ebc1074ae52bb91fb962299c5f6ba2.png"},73787:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/EditProjectRole-511e7a213727f82d0387d78ac1dfd3c8.png"},37802:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/InviteUserProjectMembers-8e699a1dac0cbdb4c4b60bb32f4644ae.png"},87194:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/ProjectSettingsGeneral-20664c531eb7e0ad7aa63ff3d8126419.png"}}]); \ No newline at end of file diff --git a/assets/js/5668619f.72782681.js b/assets/js/5668619f.72782681.js deleted file mode 100644 index f6da1ae49..000000000 --- a/assets/js/5668619f.72782681.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[225],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return a?n.createElement(h,r(r({ref:t},c),{},{components:a})):n.createElement(h,r({ref:t},c))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=a(87462),o=(a(67294),a(3905));const i={sidebar_position:3,sidebar_label:"Project configuration"},r="Project configuration",l={unversionedId:"reportportal-configuration/ProjectConfiguration",id:"reportportal-configuration/ProjectConfiguration",title:"Project configuration",description:"To see the list of available projects and open a project, click the drop-down list in the top of the left menu.",source:"@site/docs/reportportal-configuration/ProjectConfiguration.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/ProjectConfiguration",permalink:"/docs/reportportal-configuration/ProjectConfiguration",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/ProjectConfiguration.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Project configuration"},sidebar:"defaultSidebar",previous:{title:"Creation of project and adding users",permalink:"/docs/reportportal-configuration/CreationOfProjectAndAddingUsers"},next:{title:"ReportPortal jobs configuration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration"}},s={},p=[{value:"Project settings",id:"project-settings",level:2},{value:"General settings",id:"general-settings",level:3},{value:"Integrations",id:"integrations",level:3},{value:"E-mail notifications",id:"e-mail-notifications",level:3},{value:"Custom defect types",id:"custom-defect-types",level:3},{value:"Auto-analysis and Pattern analysis",id:"auto-analysis-and-pattern-analysis",level:3},{value:"Demo data",id:"demo-data",level:3},{value:"Management of users on the project",id:"management-of-users-on-the-project",level:2},{value:"Invite user on a project",id:"invite-user-on-a-project",level:3},{value:"Project role",id:"project-role",level:3},{value:"Edit project role",id:"edit-project-role",level:3},{value:"Unassign user from the project",id:"unassign-user-from-the-project",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(u,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"project-configuration"},"Project configuration"),(0,o.kt)("p",null,"To see the list of available projects and open a project, click the drop-down list in the top of the left menu."),(0,o.kt)("p",null,"ReportPortal supports customization of the default settings."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nUsers with the Administrator role can edit project settings on the project "Settings" page in Administrate section and on the Project space.\nUsers with the PROJECT_MANAGER role can edit the settings on the project space only.\nMEMBER/ OPERATOR/ CUSTOMER can only view applied project settings.'),(0,o.kt)("h2",{id:"project-settings"},"Project settings"),(0,o.kt)("p",null,'To go to the project settings page, click the "Project Settings" icon in the left menu.'),(0,o.kt)("p",null,"The project configuration page will be opened."),(0,o.kt)("p",null,'The project settings are divided into following tabs: "General", "Integrations", "Notifications", "Defect Types", "Analyzer", "Pattern Analysis", "Demo Data" and "Quality Gates" (if you have our ',(0,o.kt)("a",{parentName:"p",href:"/category/quality-gates"},"premium feature"),")."),(0,o.kt)("h3",{id:"general-settings"},"General settings"),(0,o.kt)("p",null,"Our test automation results dashboard allows you to control the amount of the stored data (launches, test items, logs and attachments) by removing outdated elements using Quartz jobs.\nFunctionality of data removing depends on two configurations. "),(0,o.kt)("p",null,"The first one is API service back-end environment variables that are described in ",(0,o.kt)("a",{parentName:"p",href:"./ReportPortalJobsConfiguration"},"ReportPortal jobs configuration")),(0,o.kt)("p",null,'The second one is the "General" tab you can configure parameter of data storage in ReportPortal for this project:'),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Name \u2013 is a disabled field as the project name cannot be changed.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Launch inactivity timeout")," - this parameter specifies the scheduled time for a job to interrupt inactive launches (launches which have the status 'in progress', but there is no any items during the chosen period). There are six options: "))),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 hour, "),(0,o.kt)("li",{parentName:"ul"},"3 hours, "),(0,o.kt)("li",{parentName:"ul"},"6 hours, "),(0,o.kt)("li",{parentName:"ul"},"12 hours, "),(0,o.kt)("li",{parentName:"ul"},"1 day, "),(0,o.kt)("li",{parentName:"ul"},"7 days.")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Keep launches")," - this parameter specifies how long the system will keep old launches in the data base. There are five options:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")),(0,o.kt)("p",null,"After this period a launch will be deleted, and you can not see it in ReportPortal."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Keep logs")," - this parameter specifies how long the system will keep old logs in launches. Related launch structures will be saved, to keep statistics. There are five options:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Keep attachments")," - this parameter specifies how long to keep binary data (screenshots, files, video, and others attachments)\nin the system. There are five options:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")),(0,o.kt)("media-view",{thumbnail:a(87194),src:"https://youtu.be/ih-ECyC29f0",alt:"Project settings in our real time dashboard open source",type:"video"}),(0,o.kt)("h3",{id:"integrations"},"Integrations"),(0,o.kt)("p",null,'The "Integration" tab can allow the project to connect ReportPortal with external systems or rewrite global configurations for third party systems.'),(0,o.kt)("p",null,"For more information on this topic, please refer to ",(0,o.kt)("a",{parentName:"p",href:"./IntegrationViaPlugin"},"Integration with external systems"),"."),(0,o.kt)("h3",{id:"e-mail-notifications"},"E-mail notifications"),(0,o.kt)("p",null,'The "Notifications" tab provides the administrator with the ability to activate e-mail notifications on the project.'),(0,o.kt)("p",null,"ReportPortal provides a way to add multiple rules with specific conditions. The Notification rule should be unique per project, have a unique parameter set, and specify recipients. For Example: In case, Launch names, attributes)."),(0,o.kt)("p",null,'Permissions:\nUsers with Administrator a role can configure "Notifications" in the Administrate section.\nUsers with PROJECT_MANAGER roles can edit the settings on the project space only.'),(0,o.kt)("p",null,"To do that, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login to the ReportPortal.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Navigate to the Project -",">",' Project "Settings" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Open the "Notifications" tab and click on a button "Create new notification rule" ')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Enter your email into the "From" field. This email will be used as a notification sender.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select recipients. To do that, start typing any symbols into the "Recipients" field.\nYou can select an item from the auto-complete tool-tip using the\nkeyboard (use the "Up" and "Down" arrows and "Enter" button). You can also enter a custom email into the "Recipients" field. To add a custom\nemail, just enter the email address and press "Enter".')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Launch owner" is selected by default. Uncheck "Launch owner" to exclude\nhim/her from the notification.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select the "In Case" setting. To do that, select one of the following options from the "In Case" drop-down.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select launches (optional). To do that, start typing any symbols into the "Launch names" field.\nYou can select an item from the auto-complete tool-tip using the "Up" and "Down" arrows and clicking "Enter" on the keyboard. This is an alternate way you can add a new launch name that does not exist on the project. Several launches names can be selected; the recipients will receive notifications when each of them finishes.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Then Select attributes (optional). To do that, start typing any symbols into the "Attribute key" and "Attribute value" fields. The system will suggest the results in the drop-down, after at least 1 symbol is provided. It is also possible to add a new attribute (that does not exist on the project). Several attributes can be selected at once; the corresponding recipients will receive notifications about the launches that have all the specified attributes.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Switch ON Notifications")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The system will activate the "Email notification" option. After the launch is finished, the recipients will receive a notification via email.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add more rules, if needed. Each Notification rule should be unique.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"You can edit/ copy/enable/disable notification rule by clicking on the appropriate controls on the notification rule. "))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Users with a MEMBER/ OPERATOR/ CUSTOMER project role will not have the capability to edit the project settings, however, they do have the permissions to view them.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"For using this functionality be sure that the E-mail server is configured.")),(0,o.kt)("h3",{id:"custom-defect-types"},"Custom defect types"),(0,o.kt)("p",null,'The "Defect Types" tab allows users with permissions to create custom defect types as subtypes of default defects on the project.'),(0,o.kt)("p",null,"After Installation the ReportPortal by default sets-up the following defect types groups:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"To investigate")," - means that no investigation was performed on this defect\nyet.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"Product Bug")," - defect was investigated and a production bug was found as a\ncause for this test failure.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"Automation Bug")," - defect was investigated and an automation test is not\ncorrect.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"System Issue")," - defect was investigated and it turns out that it is a system-level\nissue, like the app, crashed and caused the test to fail.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"No Defect")," - defect was investigated and defined as not a defect.")),(0,o.kt)("p",null,"ReportPortal allows the use of existing defect types (Product Bug, Automation Bug, System Issue, No Defect, To investigate) and or to create custom ones on the project settings page."),(0,o.kt)("p",null,"To create custom defect types, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into the ReportPortal.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Navigate to Projects -",">",' Project "Settings" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Open "Defect Types" tab ')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click "Add Defect Type" button under any default defect type')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add new defect type form will appear ")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Enter "Defect name" and "Abbreviation", select color for defect presentation on the launches grid and widgets. ')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Submit form. You will see an added defect type on the chart preview."))),(0,o.kt)("p",null,"Add more custom defects, if you need it. The system allows us to add up to ten subtypes of each default defect type."),(0,o.kt)("p",null,"Now you can do bug triage and set defect types as default Product Bug/Automation Bug/System Issue/No Defect/TO investigate or custom defects. All of them will be available to select on the Defect Type editor.\nFor more information refer to the ",(0,o.kt)("a",{parentName:"p",href:"/work-with-reports/InvestigationOfFailure"},"Investigation of failure")," topic."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Default defects cannot be modified and or deleted from the system. Custom defect types can be deleted at any time."),(0,o.kt)("p",{parentName:"admonition"},"You can create up to 15 custom defect types for each group.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you have deleted a custom type from the system, all test executions with this deleted defect type get the parent type of the group in which deleted defect has belonged. Statistics updates in all launches where a deleted defect was present.",(0,o.kt)("br",{parentName:"p"}),"\n",'For example, if you create a custom "Product Bug-1" as a subtype of "Product Bugs" group and investigate a few\ndefects as "Product Bug-1", then remove "Product Bug-1" from your project, all investigated "Product Bug-1" defects\nwill be shown as "Product Bug".')),(0,o.kt)("media-view",{thumbnail:a(94410),src:"https://youtu.be/CcU2_dEu59k",alt:"Defect Type Configuration for clear test execution report",type:"video"}),(0,o.kt)("h3",{id:"auto-analysis-and-pattern-analysis"},"Auto-analysis and Pattern analysis"),(0,o.kt)("p",null,'The "Auto-Analysis" and "Pattern analysis" tabs can allow reducing test failure analysis routine on the project.'),(0,o.kt)("p",null,"For more information on this topic, please refer to ",(0,o.kt)("a",{parentName:"p",href:"/category/analysis"},"Analysis"),"."),(0,o.kt)("h3",{id:"demo-data"},"Demo data"),(0,o.kt)("p",null,'The "Demo Data" tab provides a way to generate demo data on the project.'),(0,o.kt)("p",null,"The generated data could demonstrate how the launches, filter, and dashboard will look. On the other hand, demo data could be\nmodified or removed without any effect of your real objects."),(0,o.kt)("media-view",{thumbnail:a(2422),src:"https://youtu.be/bXHY0_sXAF8",alt:"Generate Demo Data with test report&analytics dashboard",type:"video"}),(0,o.kt)("h2",{id:"management-of-users-on-the-project"},"Management of users on the project"),(0,o.kt)("p",null,'On the "Project Members" page users with the appropriate roles can invite new members.'),(0,o.kt)("p",null,"Permissions: "),(0,o.kt)("p",null,"User with Administrator role and users with project role PROJECT_MANAGER."),(0,o.kt)("h3",{id:"invite-user-on-a-project"},"Invite user on a project"),(0,o.kt)("p",null,'To invite a user on the "Project Members" page, perform the following steps:'),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as with the PROJECT_MANAGER project role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Project Members" page on the left menu.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Invite User" tab.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Enter the email address of the user in case he/she is not present in the ReportPortal database or enter his/her login name.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In case the user is already available in the ReportPortal, his/her name will appear in the suggestion list.\nIf not, the Admin should enter the correct email address.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select an appropriate role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Then click 'Invite'.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In case the user is already available in ReportPortal s/he will be assigned to the project\nIf not, the letter with an invitation link will be sent to the user email address.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"The user will receive an email with the link to the registration.\nWhen the user clicks the link, he/she will see a registration form.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The user needs to fill in the registration form and click the "Register"\nbutton to complete the registration. ')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT\nMANAGER project role. '))),(0,o.kt)("media-view",{thumbnail:a(37802),src:"https://youtu.be/VOk80XZHpWc",alt:"Invite User From Project Members Page",type:"video"}),(0,o.kt)("h3",{id:"project-role"},"Project role"),(0,o.kt)("p",null,"Every user is given a specific Project role within a specific project."),(0,o.kt)("p",null,'Depends on the role, the user is able or not able to perform some actions. For more details, please see the "Permissions map".'),(0,o.kt)("p",null,"There are 4 possible Project roles in ReportPortal:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"PROJECT MANAGER"),(0,o.kt)("li",{parentName:"ul"},"MEMBER"),(0,o.kt)("li",{parentName:"ul"},"OPERATOR"),(0,o.kt)("li",{parentName:"ul"},"CUSTOMER")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The administrator has all privileges on the project.")),(0,o.kt)("h3",{id:"edit-project-role"},"Edit project role"),(0,o.kt)("p",null,"To edit the project role, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into the ReportPortal as a user with PROJECT_MANAGER project role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Project Members" page on the left menu.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select a new value from the "Project Role" drop-down for the user. - The new project role will be automatically saved.'))),(0,o.kt)("media-view",{thumbnail:a(73787),src:"https://youtu.be/DF38BbE5vws",alt:"Edit Project Role From Project Members Page",type:"video"}),(0,o.kt)("h3",{id:"unassign-user-from-the-project"},"Unassign user from the project"),(0,o.kt)("p",null,"Depending on the project needs the assignment could be removed.\nTo unassign the assignment for the user on the project, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into the ReportPortal as a user with PROJECT_MANAGER project role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Project Members" page on the left menu.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Find the required member.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click the 'Unassign' button for the user.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Confirm the action in the popup.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"The user will be unassigned from the current project but will stay in the system."))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Invite user, Assign/Unassign internal user to/from the project, change user's role on a project action can be done for a user\nwith a similar and lower role only.")))}d.isMDXComponent=!0},94410:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/CustomDefectTypes-bf0065f64620b1ddd1c8d7f9ebb96978.png"},2422:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/DemoData-f9ebc1074ae52bb91fb962299c5f6ba2.png"},73787:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/EditProjectRole-511e7a213727f82d0387d78ac1dfd3c8.png"},37802:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/InviteUserProjectMembers-8e699a1dac0cbdb4c4b60bb32f4644ae.png"},87194:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/ProjectSettingsGeneral-20664c531eb7e0ad7aa63ff3d8126419.png"}}]); \ No newline at end of file diff --git a/assets/js/6ef1a459.3ffd4a9b.js b/assets/js/6ef1a459.3ffd4a9b.js new file mode 100644 index 000000000..b5b69bbcd --- /dev/null +++ b/assets/js/6ef1a459.3ffd4a9b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6027],{3905:(t,e,r)=>{r.d(e,{Zo:()=>c,kt:()=>f});var n=r(67294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var p=n.createContext({}),u=function(t){var e=n.useContext(p),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},c=function(t){var e=u(t.components);return n.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(t,e){var r=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=u(r),m=a,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return r?n.createElement(f,i(i({ref:e},c),{},{components:r})):n.createElement(f,i({ref:e},c))}));function f(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:a,i[1]=l;for(var u=2;u{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_label:"Okta SAML"},i="Okta SAML",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/OktaSAML",id:"reportportal-configuration/authorization/SAMLProvider/OktaSAML",title:"Okta SAML",description:"SAML plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/OktaSAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"Okta SAML"},sidebar:"defaultSidebar",previous:{title:"Azure SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML"},next:{title:"User account",permalink:"/docs/category/user-account"}},p={},u=[],c={toc:u},s="wrapper";function d(t){let{components:e,...o}=t;return(0,a.kt)(s,(0,n.Z)({},c,o,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"okta-saml"},"Okta SAML"),(0,a.kt)("p",null,"SAML plugin is available in ReportPortal on the Plugins page."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,a.kt)("media-view",{thumbnail:r(23799),src:"https://youtu.be/ljXvCVWG4mQ",alt:"Okta SAML authorization in our open source test reporting tool",type:"video"}),(0,a.kt)("p",null,"To set up access with SAML:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,a.kt)("li",{parentName:"ol"},"Then open the list on the right of the user's image."),(0,a.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,a.kt)("li",{parentName:"ol"},"Click the 'Plugins' from the left-hand sidebar"),(0,a.kt)("li",{parentName:"ol"},"Click on the'SAML' tab."),(0,a.kt)("li",{parentName:"ol"},"Click on Add new integration"),(0,a.kt)("li",{parentName:"ol"},"The next fields should be present:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Identity provider name ID*': text\n'Provider name*': text\n'Metadata URL*': URL\n'RP callback URL': URL - RP host/uat\n'Email attribute*': text\n'Name attributes mode' : \n'Last name attribute' text\n'First name attribute' text\nor\n'Full name attribute' : text\n")),(0,a.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of SAML will have access to the ReportPortal instance.",(0,a.kt)("br",{parentName:"p"}),"\n","Just click on the button 'Login with SAML' and choose a needed integration from the drop-down"),(0,a.kt)("p",null,"On Octa side you should to specify SSO url. The format for url is the next:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},"https://your domain adress/uat/saml/sp/SSO/alias/report-portal-sp\n")),(0,a.kt)("p",null,"\u201cRP callback URL\u201d field is an optional field to provide a redirect base path right in SAML integration settings. Fill in the field in format \u201cRP host/uat\u201d. The format for url is the next:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"https://reportportal.com/uat\n")),(0,a.kt)("p",null,"Once you have submitted an integration with \u201cRP callback URL\u201d, the URL will be applied to all SAML integrations."))}d.isMDXComponent=!0},23799:(t,e,r)=>{r.r(e),r.d(e,{default:()=>n});const n=r.p+"assets/images/OktaSAML-a3676ee795f60d4b46db48703329889a.png"}}]); \ No newline at end of file diff --git a/assets/js/6ef1a459.8a6685fe.js b/assets/js/6ef1a459.8a6685fe.js deleted file mode 100644 index 1443d6878..000000000 --- a/assets/js/6ef1a459.8a6685fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6027],{3905:(t,e,r)=>{r.d(e,{Zo:()=>c,kt:()=>f});var a=r(67294);function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,a)}return r}function i(t){for(var e=1;e=0||(n[r]=t[r]);return n}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}var p=a.createContext({}),u=function(t){var e=a.useContext(p),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},c=function(t){var e=u(t.components);return a.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var r=t.components,n=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=u(r),m=n,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return r?a.createElement(f,i(i({ref:e},c),{},{components:r})):a.createElement(f,i({ref:e},c))}));function f(t,e){var r=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:n,i[1]=l;for(var u=2;u{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=r(87462),n=(r(67294),r(3905));const o={sidebar_label:"Okta SAML"},i="Okta SAML",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/OktaSAML",id:"reportportal-configuration/authorization/SAMLProvider/OktaSAML",title:"Okta SAML",description:"SAML plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/OktaSAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"Okta SAML"},sidebar:"defaultSidebar",previous:{title:"Azure SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML"},next:{title:"User account",permalink:"/docs/category/user-account"}},p={},u=[],c={toc:u},s="wrapper";function d(t){let{components:e,...o}=t;return(0,n.kt)(s,(0,a.Z)({},c,o,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"okta-saml"},"Okta SAML"),(0,n.kt)("p",null,"SAML plugin is available in ReportPortal on the Plugins page."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,n.kt)("media-view",{thumbnail:r(23799),src:"https://youtu.be/ljXvCVWG4mQ",alt:"Okta SAML authorization in our open source test reporting tool",type:"video"}),(0,n.kt)("p",null,"To set up access with SAML:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Log in to the ReportPortal as an ADMIN user")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Then open the list on the right of the user's image.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click the 'Administrative' link")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click the 'Plugins' from the left-hand sidebar")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click on the'SAML' tab.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click on Add new integration")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The next fields should be present:"))),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-javascript"},"'Identity provider name ID*': text\n'Provider name*': text\n'Metadata URL*': URL\n'RP callback URL': URL - RP host/uat\n'Email attribute*': text\n'Name attributes mode' : \n'Last name attribute' text\n'First name attribute' text\nor\n'Full name attribute' : text\n")),(0,n.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of SAML will have access to the ReportPortal instance.",(0,n.kt)("br",{parentName:"p"}),"\n","Just click on the button 'Login with SAML' and choose a needed integration from the drop-down"),(0,n.kt)("p",null,"On Octa side you should to specify SSO url. The format for url is the next:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"https://your domain adress/uat/saml/sp/SSO/alias/report-portal-sp\n")),(0,n.kt)("p",null,"\u201cRP callback URL\u201d field is an optional field to provide a redirect base path right in SAML integration settings. Fill in the field in format \u201cRP host/uat\u201d. The format for url is the next:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"https://reportportal.com/uat\n")),(0,n.kt)("p",null,"Once you have submitted an integration with \u201cRP callback URL\u201d, the URL will be applied to all SAML integrations."))}d.isMDXComponent=!0},23799:(t,e,r)=>{r.r(e),r.d(e,{default:()=>a});const a=r.p+"assets/images/OktaSAML-a3676ee795f60d4b46db48703329889a.png"}}]); \ No newline at end of file diff --git a/assets/js/7bd95ec4.12b719e2.js b/assets/js/7bd95ec4.12b719e2.js new file mode 100644 index 000000000..544488b0e --- /dev/null +++ b/assets/js/7bd95ec4.12b719e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3360],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>k});var n=r(67294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var c=n.createContext({}),p=function(t){var e=n.useContext(c),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=p(t.components);return n.createElement(c.Provider,{value:e},t.children)},d="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(t,e){var r=t.components,a=t.mdxType,o=t.originalType,c=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),d=p(r),m=a,k=d["".concat(c,".").concat(m)]||d[m]||s[m]||o;return r?n.createElement(k,i(i({ref:e},u),{},{components:r})):n.createElement(k,i({ref:e},u))}));function k(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=t,l[d]="string"==typeof t?t:a,i[1]=l;for(var p=2;p{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>s,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_label:"Active Directory"},i="Active Directory",l={unversionedId:"reportportal-configuration/authorization/ActiveDirectory",id:"reportportal-configuration/authorization/ActiveDirectory",title:"Active Directory",description:"Active Directory plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/ActiveDirectory.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/ActiveDirectory",permalink:"/docs/reportportal-configuration/authorization/ActiveDirectory",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/ActiveDirectory.md",tags:[],version:"current",frontMatter:{sidebar_label:"Active Directory"},sidebar:"defaultSidebar",previous:{title:"Authorization",permalink:"/docs/reportportal-configuration/authorization/"},next:{title:"GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub"}},c={},p=[],u={toc:p},d="wrapper";function s(t){let{components:e,...r}=t;return(0,a.kt)(d,(0,n.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"active-directory"},"Active Directory"),(0,a.kt)("p",null,"Active Directory plugin is available in ReportPortal on the Plugins page."),(0,a.kt)("p",null,"To set up access with Active Directory:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,a.kt)("li",{parentName:"ol"},"Then open the list on the right of the user's image."),(0,a.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,a.kt)("li",{parentName:"ol"},"Click the 'Plugins' from the left-hand sidebar"),(0,a.kt)("li",{parentName:"ol"},"Click on the'Activate Directory' tab."),(0,a.kt)("li",{parentName:"ol"},"Click on Add new integration"),(0,a.kt)("li",{parentName:"ol"},"The next fields should be present:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Domain*': text\n'URL*': text\n'Base DN*': text\n'Email attribute*': text\n'Full name attribute' : text\n'Photo attribute' : text\n'UserSearchFilter' (the same as for LDAP): text \n")),(0,a.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of Active Directory will have access to the ReportPortal instance.",(0,a.kt)("br",{parentName:"p"}),"\n","For entrance to ReportPortal, the user should use their domain credentials (Login and password)."),(0,a.kt)("p",null,"Please find the example with configurations for Microsoft Active Directory that worked successfully provided by our user:"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Table with properties and values for LDAP Microsoft Active Directory")),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:"center"},"Property"),(0,a.kt)("th",{parentName:"tr",align:"center"},"Value"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Url"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"auth-servers.domain.org.int:3358"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Base DN"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"OU=MAIN,DC=DOMAIN,DC=ORG,DC=INT"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Manager DN"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"cn=Service UserBind,ou=Service Accounts,ou=Colombia,ou=America,ou=ServiceAccounts,dc=DOMAIN,dc=ORG,dc=INT"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"User search filter"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"(&(objectClass=user)(sAMAccountName={0}))"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Password encoder type"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"NO"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Email attribute"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"mail"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Full name attribute"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"displayName"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Photo attribute"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"thumbnailPhoto"))))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7bd95ec4.9bd7a5e4.js b/assets/js/7bd95ec4.9bd7a5e4.js deleted file mode 100644 index 1043deaf0..000000000 --- a/assets/js/7bd95ec4.9bd7a5e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3360],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>k});var a=r(67294);function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,a)}return r}function i(t){for(var e=1;e=0||(n[r]=t[r]);return n}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}var c=a.createContext({}),p=function(t){var e=a.useContext(c),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=p(t.components);return a.createElement(c.Provider,{value:e},t.children)},s="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},d=a.forwardRef((function(t,e){var r=t.components,n=t.mdxType,o=t.originalType,c=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),s=p(r),d=n,k=s["".concat(c,".").concat(d)]||s[d]||m[d]||o;return r?a.createElement(k,i(i({ref:e},u),{},{components:r})):a.createElement(k,i({ref:e},u))}));function k(t,e){var r=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var o=r.length,i=new Array(o);i[0]=d;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=t,l[s]="string"==typeof t?t:n,i[1]=l;for(var p=2;p{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=r(87462),n=(r(67294),r(3905));const o={sidebar_label:"Active Directory"},i="Active Directory",l={unversionedId:"reportportal-configuration/authorization/ActiveDirectory",id:"reportportal-configuration/authorization/ActiveDirectory",title:"Active Directory",description:"Active Directory plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/ActiveDirectory.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/ActiveDirectory",permalink:"/docs/reportportal-configuration/authorization/ActiveDirectory",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/ActiveDirectory.md",tags:[],version:"current",frontMatter:{sidebar_label:"Active Directory"},sidebar:"defaultSidebar",previous:{title:"Authorization",permalink:"/docs/reportportal-configuration/authorization/"},next:{title:"GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub"}},c={},p=[],u={toc:p},s="wrapper";function m(t){let{components:e,...r}=t;return(0,n.kt)(s,(0,a.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"active-directory"},"Active Directory"),(0,n.kt)("p",null,"Active Directory plugin is available in ReportPortal on the Plugins page."),(0,n.kt)("p",null,"To set up access with Active Directory:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Log in to the ReportPortal as an ADMIN user")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Then open the list on the right of the user's image.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click the 'Administrative' link")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click the 'Plugins' from the left-hand sidebar")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click on the'Activate Directory' tab.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click on Add new integration")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The next fields should be present:"))),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-javascript"},"'Domain*': text\n'URL*': text\n'Base DN*': text\n'Email attribute*': text\n'Full name attribute' : text\n'Photo attribute' : text\n'UserSearchFilter' (the same as for LDAP): text \n")),(0,n.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of Active Directory will have access to the ReportPortal instance.",(0,n.kt)("br",{parentName:"p"}),"\n","For entrance to ReportPortal, the user should use their domain credentials (Login and password)."),(0,n.kt)("p",null,"Please find the example with configurations for Microsoft Active Directory that worked successfully provided by our user:"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Table with properties and values for LDAP Microsoft Active Directory")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"center"},"Property"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Value"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Url"),(0,n.kt)("td",{parentName:"tr",align:"center"},"auth-servers.domain.org.int:3358")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Base DN"),(0,n.kt)("td",{parentName:"tr",align:"center"},"OU=MAIN,DC=DOMAIN,DC=ORG,DC=INT")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Manager DN"),(0,n.kt)("td",{parentName:"tr",align:"center"},"cn=Service UserBind,ou=Service Accounts,ou=Colombia,ou=America,ou=ServiceAccounts,dc=DOMAIN,dc=ORG,dc=INT")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"User search filter"),(0,n.kt)("td",{parentName:"tr",align:"center"},"(&(objectClass=user)(sAMAccountName={0}))")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Password encoder type"),(0,n.kt)("td",{parentName:"tr",align:"center"},"NO")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Email attribute"),(0,n.kt)("td",{parentName:"tr",align:"center"},"mail")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Full name attribute"),(0,n.kt)("td",{parentName:"tr",align:"center"},"displayName")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Photo attribute"),(0,n.kt)("td",{parentName:"tr",align:"center"},"thumbnailPhoto")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/98a1fcd9.2d13f844.js b/assets/js/98a1fcd9.494f8b22.js similarity index 84% rename from assets/js/98a1fcd9.2d13f844.js rename to assets/js/98a1fcd9.494f8b22.js index 5f996df5f..943b1fa06 100644 --- a/assets/js/98a1fcd9.2d13f844.js +++ b/assets/js/98a1fcd9.494f8b22.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2516],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>h});var a=i(67294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function o(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var s=a.createContext({}),l=function(e){var t=a.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},c=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},g="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var i=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),g=l(i),u=n,h=g["".concat(s,".").concat(u)]||g[u]||p[u]||r;return i?a.createElement(h,o(o({ref:t},c),{},{components:i})):a.createElement(h,o({ref:t},c))}));function h(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=i.length,o=new Array(r);o[0]=u;var d={};for(var s in t)hasOwnProperty.call(t,s)&&(d[s]=t[s]);d.originalType=e,d[g]="string"==typeof e?e:n,o[1]=d;for(var l=2;l{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var a=i(87462),n=(i(67294),i(3905));const r={sidebar_position:4,sidebar_label:"Manage Widgets"},o="Manage Widgets",d={unversionedId:"dashboards-and-widgets/ManageWidgets",id:"dashboards-and-widgets/ManageWidgets",title:"Manage Widgets",description:"Customize widget",source:"@site/docs/dashboards-and-widgets/ManageWidgets.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/ManageWidgets",permalink:"/docs/dashboards-and-widgets/ManageWidgets",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/ManageWidgets.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_label:"Manage Widgets"},sidebar:"defaultSidebar",previous:{title:"Widget Creation",permalink:"/docs/dashboards-and-widgets/WidgetCreation"},next:{title:"Launch statistics chart",permalink:"/docs/dashboards-and-widgets/LaunchStatisticsChart"}},s={},l=[{value:"Customize widget",id:"customize-widget",level:2},{value:"Edit widget",id:"edit-widget",level:2},{value:"View widgets in full-screen mode",id:"view-widgets-in-full-screen-mode",level:2},{value:"Delete widget",id:"delete-widget",level:2}],c={toc:l},g="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(g,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"manage-widgets"},"Manage Widgets"),(0,n.kt)("h2",{id:"customize-widget"},"Customize widget"),(0,n.kt)("p",null,"When you create a widget in our test automation dashboard, it has a basic size. Afterward, you may change the widget size."),(0,n.kt)("p",null,"To resize widget the user can hover the mouse cursor over the widget. The system will show resizing arrows."),(0,n.kt)("p",null,"Grab the arrow with the cursor and drag it to the desired width and height."),(0,n.kt)("p",null,"You can maintain the existing aspect ratio or set a new one when resizing the widget."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Widgets have a minimum and maximum mean of width and height defined within the application.")),(0,n.kt)("p",null,"Another way you can customize your dashboard is by changing the widgets' placement within the dashboard canvas area."),(0,n.kt)("p",null,"To change a widget placement on the dashboard, perform the following: grab a widget with the cursor by clicking and dragging it to the selected position, holding down the mouse button."),(0,n.kt)("p",null,"When you move the widget to the area with sufficient space, the system highlights this place.\nThe widgets located in this space, are moved to the relocatable widget place. Using this option the user can configure the desired location of the widgets on a dashboard."),(0,n.kt)("media-view",{thumbnail:i(69623),src:"https://youtu.be/6nPsNI2v_po",alt:"Customize widgets in our qa automation dashboard",type:"video"}),(0,n.kt)("h2",{id:"edit-widget"},"Edit widget"),(0,n.kt)("p",null,"To create a new widget for data visualization, perform the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Edit" icon in the right corner of the widget header.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'After the "Edit Widget" window is opened, you can edit any widget settings except the template itself.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Make the necessary changes and click the "Save" button. The widget will be updated.'))),(0,n.kt)("media-view",{thumbnail:i(79608),src:"https://youtu.be/VlpvP7IIEoY",alt:"Edit Widget",type:"video"}),(0,n.kt)("h2",{id:"view-widgets-in-full-screen-mode"},"View widgets in full-screen mode"),(0,n.kt)("p",null,"To view widgets on the whole screen, click the 'Full Screen' button in the right top corner of the dashboard."),(0,n.kt)("p",null,"Widgets are shown in the same order as for standard view."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Clickable areas or elements are disabled for the full-screen mode selected, therefore it will not be possible to create a new widget, update, or delete available widgets in this mode.")),(0,n.kt)("p",null,"The auto-refresh timeout for widgets in full-screen mode is 30 sec."),(0,n.kt)("h2",{id:"delete-widget"},"Delete widget"),(0,n.kt)("p",null,"To delete the widget: "),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Delete" icon (X) in the right corner of the widget header.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Delete" button on the confirmation popup.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The widget will be deleted from the system."))),(0,n.kt)("media-view",{thumbnail:i(86870),src:"https://youtu.be/BrY6BnW7aAE",alt:"Delete Widget",type:"video"}),(0,n.kt)("p",null,'If you delete a shared widget, the deleted widget will be displayed for other\nusers as "Widget not found".'))}p.isMDXComponent=!0},69623:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/CustomizeWidget-372a06c18d9aa15b6c80bef0a03c0828.png"},86870:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/DeleteWidget-14fae75ee085ca966504213d5ba8cb09.png"},79608:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/EditWidget-df992198bf7499a6180883f83b489330.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2516],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>h});var a=i(67294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function o(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var s=a.createContext({}),l=function(e){var t=a.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},c=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var i=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),p=l(i),u=n,h=p["".concat(s,".").concat(u)]||p[u]||g[u]||r;return i?a.createElement(h,o(o({ref:t},c),{},{components:i})):a.createElement(h,o({ref:t},c))}));function h(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=i.length,o=new Array(r);o[0]=u;var d={};for(var s in t)hasOwnProperty.call(t,s)&&(d[s]=t[s]);d.originalType=e,d[p]="string"==typeof e?e:n,o[1]=d;for(var l=2;l{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>g,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var a=i(87462),n=(i(67294),i(3905));const r={sidebar_position:4,sidebar_label:"Manage Widgets"},o="Manage Widgets",d={unversionedId:"dashboards-and-widgets/ManageWidgets",id:"dashboards-and-widgets/ManageWidgets",title:"Manage Widgets",description:"Customize widget",source:"@site/docs/dashboards-and-widgets/ManageWidgets.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/ManageWidgets",permalink:"/docs/dashboards-and-widgets/ManageWidgets",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/ManageWidgets.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_label:"Manage Widgets"},sidebar:"defaultSidebar",previous:{title:"Widget Creation",permalink:"/docs/dashboards-and-widgets/WidgetCreation"},next:{title:"Launch statistics chart",permalink:"/docs/dashboards-and-widgets/LaunchStatisticsChart"}},s={},l=[{value:"Customize widget",id:"customize-widget",level:2},{value:"Edit widget",id:"edit-widget",level:2},{value:"View widgets in full-screen mode",id:"view-widgets-in-full-screen-mode",level:2},{value:"Delete widget",id:"delete-widget",level:2}],c={toc:l},p="wrapper";function g(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"manage-widgets"},"Manage Widgets"),(0,n.kt)("h2",{id:"customize-widget"},"Customize widget"),(0,n.kt)("p",null,"When you create a widget in our test automation dashboard, it has a basic size. Afterward, you may change the widget size."),(0,n.kt)("p",null,"To resize widget the user can hover the mouse cursor over the widget. The system will show resizing arrows."),(0,n.kt)("p",null,"Grab the arrow with the cursor and drag it to the desired width and height."),(0,n.kt)("p",null,"You can maintain the existing aspect ratio or set a new one when resizing the widget."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Widgets have a minimum and maximum mean of width and height defined within the application.")),(0,n.kt)("p",null,"Another way you can customize your dashboard is by changing the widgets' placement within the dashboard canvas area."),(0,n.kt)("p",null,"To change a widget placement on the dashboard, perform the following: grab a widget with the cursor by clicking and dragging it to the selected position, holding down the mouse button."),(0,n.kt)("p",null,"When you move the widget to the area with sufficient space, the system highlights this place.\nThe widgets located in this space, are moved to the relocatable widget place. Using this option the user can configure the desired location of the widgets on a dashboard."),(0,n.kt)("media-view",{thumbnail:i(69623),src:"https://youtu.be/icuOipeRtAU",alt:"Customize widgets in our qa automation dashboard",type:"video"}),(0,n.kt)("h2",{id:"edit-widget"},"Edit widget"),(0,n.kt)("p",null,"To create a new widget for data visualization, perform the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Edit" icon in the right corner of the widget header.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'After the "Edit Widget" window is opened, you can edit any widget settings except the template itself.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Make the necessary changes and click the "Save" button. The widget will be updated.'))),(0,n.kt)("media-view",{thumbnail:i(79608),src:"https://youtu.be/F-K0sM66lhY",alt:"Edit Widget",type:"video"}),(0,n.kt)("h2",{id:"view-widgets-in-full-screen-mode"},"View widgets in full-screen mode"),(0,n.kt)("p",null,"To view widgets on the whole screen, click the 'Full Screen' button in the right top corner of the dashboard."),(0,n.kt)("p",null,"Widgets are shown in the same order as for standard view."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Clickable areas or elements are disabled for the full-screen mode selected, therefore it will not be possible to create a new widget, update, or delete available widgets in this mode.")),(0,n.kt)("p",null,"The auto-refresh timeout for widgets in full-screen mode is 30 sec."),(0,n.kt)("h2",{id:"delete-widget"},"Delete widget"),(0,n.kt)("p",null,"To delete the widget: "),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Delete" icon (X) in the right corner of the widget header.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Delete" button on the confirmation popup.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The widget will be deleted from the system."))),(0,n.kt)("media-view",{thumbnail:i(86870),src:"https://youtu.be/pACkyeSH5mc",alt:"Delete Widget",type:"video"}))}g.isMDXComponent=!0},69623:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/CustomizeWidget-029599e6fed04ca6071d96980828538f.png"},86870:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/DeleteWidget-1bed7f83ff7701a4798a05e6c16a8c68.png"},79608:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/EditWidget-3ba0f4537b2c0f83f581b256a71fa0bf.png"}}]); \ No newline at end of file diff --git a/assets/js/a68ea571.295d7694.js b/assets/js/a68ea571.295d7694.js deleted file mode 100644 index 10b87db83..000000000 --- a/assets/js/a68ea571.295d7694.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6636],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=u(r),k=a,f=c["".concat(s,".").concat(k)]||c[k]||m[k]||l;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[c]="string"==typeof e?e:a,o[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var n=r(87462),a=(r(67294),r(3905));const l={},o="ReportPortal 23.1 File storage options",i={unversionedId:"installation-steps/ReportPortal23.1FileStorageOptions",id:"installation-steps/ReportPortal23.1FileStorageOptions",title:"ReportPortal 23.1 File storage options",description:"In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins.",source:"@site/docs/installation-steps/ReportPortal23.1FileStorageOptions.md",sourceDirName:"installation-steps",slug:"/installation-steps/ReportPortal23.1FileStorageOptions",permalink:"/docs/installation-steps/ReportPortal23.1FileStorageOptions",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/installation-steps/ReportPortal23.1FileStorageOptions.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Deploy with AWS ECS Fargate",permalink:"/docs/installation-steps/DeployWithAWSECSFargate"},next:{title:"ReportPortal Configuration",permalink:"/docs/category/reportportal-configuration"}},s={},u=[{value:"AWS S3",id:"aws-s3",level:2},{value:"MinIO",id:"minio",level:2},{value:"Container's File system",id:"containers-file-system",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"reportportal-231-file-storage-options"},"ReportPortal 23.1 File storage options"),(0,a.kt)("p",null,"In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS S3"),(0,a.kt)("li",{parentName:"ul"},"MinIO distributed object storage"),(0,a.kt)("li",{parentName:"ul"},"Container's File system")),(0,a.kt)("p",null,"Currently we have 2 file storage systems: ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," and ",(0,a.kt)("strong",{parentName:"p"},"single-bucket"),"."),(0,a.kt)("p",null,"In the multi-bucket system structure of buckets looks like this:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix")," + \u2018keystore\u2019 (bucket for storing integration secrets)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix")," + \u2018users\u2019 (bucket for storing user data)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"defaultBucketName")," (bucket for storing plugins)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix + projectId")," (bucket for storing project attachments)")),(0,a.kt)("p",null,"In the single-bucket system structure of single-bucket is the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"integration-secrets/ (prefix for integration secrets)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"user-data/ (prefix for user data)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"plugins/ (prefix for plugins)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"project-data/projectId (prefix for project attachments)")),(0,a.kt)("h2",{id:"aws-s3"},"AWS S3"),(0,a.kt)("p",null,"Amazon Simple Storage Service (Amazon S3) is an object storage service offering industry-leading scalability, data availability, security, and performance. Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition. A partition is a grouping of ",(0,a.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/general/latest/gr/s3.html"},"Regions"),"."),(0,a.kt)("p",null,"To set up AWS S3 in API, UAT & Jobs services use the following variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: s3"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ACCESSKEY for AWS S3 AccessKey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_SECRETKEY for AWS S3 SecretKey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_REGION for AWS region")),(0,a.kt)("p",null,"To set up the ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_BUCKETPREFIX for prefix of bucket name (\u2018prj-\u2018 by default)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (\u2018rp-bucket\u2019 by default)")),(0,a.kt)("p",null,"To set up the ",(0,a.kt)("strong",{parentName:"p"},"single-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for single-bucket name"),(0,a.kt)("li",{parentName:"ul"},"RP_FEATURE_FLAGS: singleBucket")),(0,a.kt)("h2",{id:"minio"},"MinIO"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://min.io/"},"MinIO")," is a high-performance distributed object storage server. It stays on top of S3 or any other cloud storage and allows to have a shared FS for several API, UAT & Jobs pods in Kubernetes."),(0,a.kt)("p",null,"To set up MinIO in services, use the following variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: minio"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ENDPOINT for endpoint (address)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ACCESSKEY for accesskey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_SECRETKEY for secretkey")),(0,a.kt)("p",null,"To set the ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_BUCKETPREFIX for prefix of bucket name (\u2018prj-\u2018 by default)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (\u2018rp-bucket\u2019 by default)")),(0,a.kt)("p",null,"To set the ",(0,a.kt)("strong",{parentName:"p"},"single-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for single-bucket name"),(0,a.kt)("li",{parentName:"ul"},"RP_FEATURE_FLAGS : singleBucket")),(0,a.kt)("h2",{id:"containers-file-system"},"Container's File system"),(0,a.kt)("p",null,"The container's file system option is used when you want to store this data in a mounted folder in the service-api or/and service-uat containers."),(0,a.kt)("p",null,"To use this option, set up environment variables like this:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: filesystem"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_PATH for path in filesystem to store files.")),(0,a.kt)("p",null,"It can be done in both Docker and Kubernetes ReportPortal versions."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a68ea571.85917d12.js b/assets/js/a68ea571.85917d12.js new file mode 100644 index 000000000..8c71af80a --- /dev/null +++ b/assets/js/a68ea571.85917d12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6636],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=u(r),k=a,f=c["".concat(s,".").concat(k)]||c[k]||m[k]||l;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[c]="string"==typeof e?e:a,o[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var n=r(87462),a=(r(67294),r(3905));const l={},o="ReportPortal 23.1 File storage options",i={unversionedId:"installation-steps/ReportPortal23.1FileStorageOptions",id:"installation-steps/ReportPortal23.1FileStorageOptions",title:"ReportPortal 23.1 File storage options",description:"In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins.",source:"@site/docs/installation-steps/ReportPortal23.1FileStorageOptions.md",sourceDirName:"installation-steps",slug:"/installation-steps/ReportPortal23.1FileStorageOptions",permalink:"/docs/installation-steps/ReportPortal23.1FileStorageOptions",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/installation-steps/ReportPortal23.1FileStorageOptions.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Deploy with AWS ECS Fargate",permalink:"/docs/installation-steps/DeployWithAWSECSFargate"},next:{title:"ReportPortal Configuration",permalink:"/docs/category/reportportal-configuration"}},s={},u=[{value:"AWS S3",id:"aws-s3",level:2},{value:"MinIO",id:"minio",level:2},{value:"File system",id:"file-system",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"reportportal-231-file-storage-options"},"ReportPortal 23.1 File storage options"),(0,a.kt)("p",null,"In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS S3"),(0,a.kt)("li",{parentName:"ul"},"MinIO distributed object storage"),(0,a.kt)("li",{parentName:"ul"},"File system")),(0,a.kt)("p",null,"Currently we have 2 file storage systems: ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," and ",(0,a.kt)("strong",{parentName:"p"},"single-bucket"),"."),(0,a.kt)("p",null,"In the multi-bucket system structure of buckets looks like this:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix")," + \u2018keystore\u2019 (bucket for storing integration secrets)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix")," + \u2018users\u2019 (bucket for storing user data)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"defaultBucketName")," (bucket for storing plugins)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix + projectId")," (bucket for storing project attachments)")),(0,a.kt)("p",null,"In the single-bucket system structure of single-bucket is the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"integration-secrets/ (prefix for integration secrets)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"user-data/ (prefix for user data)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"plugins/ (prefix for plugins)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"project-data/projectId (prefix for project attachments)")),(0,a.kt)("h2",{id:"aws-s3"},"AWS S3"),(0,a.kt)("p",null,"Amazon Simple Storage Service (Amazon S3) is an object storage service offering industry-leading scalability, data availability, security, and performance. Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition. A partition is a grouping of ",(0,a.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/general/latest/gr/s3.html"},"Regions"),"."),(0,a.kt)("p",null,"To set up AWS S3 in API, UAT & Jobs services use the following variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: s3"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ACCESSKEY for AWS S3 AccessKey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_SECRETKEY for AWS S3 SecretKey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_REGION for AWS region")),(0,a.kt)("p",null,"To set up the ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_BUCKETPREFIX for prefix of bucket name (\u2018prj-\u2018 by default)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (\u2018rp-bucket\u2019 by default)")),(0,a.kt)("p",null,"To set up the ",(0,a.kt)("strong",{parentName:"p"},"single-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for single-bucket name"),(0,a.kt)("li",{parentName:"ul"},"RP_FEATURE_FLAGS: singleBucket")),(0,a.kt)("h2",{id:"minio"},"MinIO"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://min.io/"},"MinIO")," is a high-performance distributed object storage server. It stays on top of S3 or any other cloud storage and allows to have a shared FS for several API, UAT & Jobs pods in Kubernetes."),(0,a.kt)("p",null,"To set up MinIO in services, use the following variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: minio"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ENDPOINT for endpoint (address)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ACCESSKEY for accesskey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_SECRETKEY for secretkey")),(0,a.kt)("p",null,"To set the ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_BUCKETPREFIX for prefix of bucket name (\u2018prj-\u2018 by default)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (\u2018rp-bucket\u2019 by default)")),(0,a.kt)("p",null,"To set the ",(0,a.kt)("strong",{parentName:"p"},"single-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for single-bucket name"),(0,a.kt)("li",{parentName:"ul"},"RP_FEATURE_FLAGS : singleBucket")),(0,a.kt)("h2",{id:"file-system"},"File system"),(0,a.kt)("p",null,"The file system option is used when you want to store this data in a mounted folder in the service-api or/and service-uat."),(0,a.kt)("p",null,"To use this option, set up environment variables like this:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: filesystem"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_PATH for path in filesystem to store files.")),(0,a.kt)("p",null,"It can be done in both Docker and Kubernetes ReportPortal versions."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a76ff2eb.25258038.js b/assets/js/a76ff2eb.25258038.js deleted file mode 100644 index 805b4353e..000000000 --- a/assets/js/a76ff2eb.25258038.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1904],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),f=r,h=c["".concat(l,".").concat(f)]||c[f]||d[f]||a;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=n(87462),r=(n(67294),n(3905));const a={},i="How to get an access token in ReportPortal",s={unversionedId:"reportportal-configuration/HowToGetAnAccessTokenInReportPortal",id:"reportportal-configuration/HowToGetAnAccessTokenInReportPortal",title:"How to get an access token in ReportPortal",description:"There are two ways to authorize in the ReportPortal API:",source:"@site/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/HowToGetAnAccessTokenInReportPortal",permalink:"/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal.mdx",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Integration via plugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin"},next:{title:"Authorization",permalink:"/docs/reportportal-configuration/authorization/"}},l={},p=[{value:"1. Authorization with user\u2019s login and password",id:"1-authorization-with-users-login-and-password",level:2},{value:"2. Authorization with user's API Key (for agents)",id:"2-authorization-with-users-api-key-for-agents",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"how-to-get-an-access-token-in-reportportal"},"How to get an access token in ReportPortal"),(0,r.kt)("p",null,"There are two ways to authorize in the ReportPortal API:"),(0,r.kt)("h2",{id:"1-authorization-with-users-login-and-password"},"1. Authorization with user\u2019s login and password"),(0,r.kt)("p",null,"This is the main and ",(0,r.kt)("strong",{parentName:"p"},"recommended way")," to get access to ReportPortal API."),(0,r.kt)("p",null,"Make the following HTTP request to get user's access token using login and password:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"POST /uat/sso/oauth/token\n\nBODY with parameters:\ngrant_type: password\nusername: \npassword: \n")),(0,r.kt)("media-view",{src:n(46786),alt:"Authorization to ReportPortal Testops with user\u2019s login and password"}),(0,r.kt)("p",null,"Or you can use the following curl request:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'curl --header "Content-Type: application/x-www-form-urlencoded" \\\n--request POST \\\n--data "grant_type=password&username=&password=" \\\n--user "ui:uiman" \\\n/uat/sso/oauth/token\n')),(0,r.kt)("p",null,"Then you will receive a response with an access token:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'{\n"access_token": ,\n"token_type": "bearer",\n"expires_in": ,\n"refresh_token": ,\n...\n}\n')),(0,r.kt)("p",null,"Now you can use \u201caccess_token\u201d with any request to API by sending it as HTTP Authorization header:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"HTTP Header:\nAuthorization: Bearer \n\n")),(0,r.kt)("h2",{id:"2-authorization-with-users-api-key-for-agents"},"2. Authorization with user's API Key (for agents)"),(0,r.kt)("p",null,"Another method involves using the API Key found on the user's Profile page."),(0,r.kt)("p",null,"The API Key is a unique token that grants access to the ReportPortal REST API."),(0,r.kt)("p",null,"To use it, log in and navigate to the Profile page, then find the API Keys tab. If you've previously created a token, it now has been converted to a Legacy API Key at the moment of migration to newest version and it remains valid and operational."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"It will continue to work even if you generate new API Keys.")),(0,r.kt)("p",null,"Thus, you can use several API keys at the same time. And revoke unused, expired or publicly exposed keys."),(0,r.kt)("media-view",{src:n(53486),alt:"Authorization with user's API Key (for agents)"}),(0,r.kt)("p",null,'To generate a new API key in the ReportPortal app, click on the "Generate API Key" button.'),(0,r.kt)("p",null,"You are free to assign any name to this API key, as long as it is unique and consists of 1 to 40 characters. Keep in mind that duplicate API key names are not allowed."),(0,r.kt)("p",null,"The system will automatically prefix the generated API key with its assigned name for easy identification. If the API key name contains spaces or underscores, these will be replaced by hyphens in the API key prefix."),(0,r.kt)("p",null,"It's crucial to understand that the API key will be visible only at the point of creation. We strongly recommend copying and securely storing it for future use, as it will be impossible to retrieve later. This practice aligns with stringent security measures and standards."),(0,r.kt)("media-view",{src:n(85344),alt:"API Keys"}),(0,r.kt)("p",null,"You have the ability to create multiple API keys for various purposes, such as for automation or for integration with third-party services. However, it's important to note that all API keys generated from the user's Profile page are functionally equivalent from the permissions standpoint."),(0,r.kt)("p",null,"Users can also revoke an API key at any time. Upon revocation, all related information will be removed from the database, and the revoked API key will no longer be usable."),(0,r.kt)("p",null,"An API key functions similarly to a regular token. When making requests to the ReportPortal API, simply include it in the HTTP Authorization header as follows:"),(0,r.kt)("p",null,"HTTP Header:",(0,r.kt)("br",null),"\nAuthorization: Bearer "),(0,r.kt)("media-view",{src:n(76842),alt:"How to use API Key"}),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please be aware that this type of token is specifically designed for use by ReportPortal client tools (agents). We do not recommend using it to provide direct access to API endpoints.")))}d.isMDXComponent=!0},76842:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/APIKeyUsing-5c6d31aa71abaafa8c7b7cf2f0478b81.png"},46786:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/AccessToken1-3532d99465a7eab2f5324de85f65597b.png"},53486:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/LegacyAPIKey-1a2f0785ac76880fe940d4947e2f6652.png"},85344:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/NewAPIKeys-897a3764fc447092a383e01afd2152e1.png"}}]); \ No newline at end of file diff --git a/assets/js/a76ff2eb.6b79db18.js b/assets/js/a76ff2eb.6b79db18.js new file mode 100644 index 000000000..b555a7c8e --- /dev/null +++ b/assets/js/a76ff2eb.6b79db18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1904],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(n),h=r,f=c["".concat(l,".").concat(h)]||c[h]||d[h]||a;return n?o.createElement(f,s(s({ref:t},u),{},{components:n})):o.createElement(f,s({ref:t},u))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,s=new Array(a);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:r,s[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var o=n(87462),r=(n(67294),n(3905));const a={},s="How to get an access token in ReportPortal",i={unversionedId:"reportportal-configuration/HowToGetAnAccessTokenInReportPortal",id:"reportportal-configuration/HowToGetAnAccessTokenInReportPortal",title:"How to get an access token in ReportPortal",description:"There are two ways to authorize in the ReportPortal API:",source:"@site/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/HowToGetAnAccessTokenInReportPortal",permalink:"/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal.mdx",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Integration via plugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin"},next:{title:"Authorization",permalink:"/docs/reportportal-configuration/authorization/"}},l={},p=[{value:"1. Authorization with user\u2019s login and password",id:"1-authorization-with-users-login-and-password",level:2},{value:"2. Authorization with user's API Key (for agents)",id:"2-authorization-with-users-api-key-for-agents",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"how-to-get-an-access-token-in-reportportal"},"How to get an access token in ReportPortal"),(0,r.kt)("p",null,"There are two ways to authorize in the ReportPortal API:"),(0,r.kt)("h2",{id:"1-authorization-with-users-login-and-password"},"1. Authorization with user\u2019s login and password"),(0,r.kt)("p",null,"This is the main and ",(0,r.kt)("strong",{parentName:"p"},"recommended way")," to get access to ReportPortal API."),(0,r.kt)("p",null,"Make the following HTTP request to get user's access token using login and password:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"POST /uat/sso/oauth/token\n\nBODY with parameters:\ngrant_type: password\nusername: \npassword: \n")),(0,r.kt)("media-view",{src:n(46786),alt:"Authorization to ReportPortal Testops with user\u2019s login and password"}),(0,r.kt)("p",null,"Or you can use the following curl request:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-curl"},'curl --header "Content-Type: application/x-www-form-urlencoded" \\\n --request POST \\\n --data "grant_type=password&username=&password=" \\\n --user "ui:uiman" \\\n /uat/sso/oauth/token\n')),(0,r.kt)("p",null,"Then you will receive a response with an access token:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "access_token": ,\n "token_type": "bearer",\n "expires_in": ,\n "refresh_token": ,\n ...\n}\n')),(0,r.kt)("p",null,"Now you can use \u201caccess_token\u201d with any request to API by sending it as HTTP Authorization header:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-http"},"HTTP Header:\nAuthorization: Bearer \n\n")),(0,r.kt)("h2",{id:"2-authorization-with-users-api-key-for-agents"},"2. Authorization with user's API Key (for agents)"),(0,r.kt)("p",null,"Another method involves using the API Key found on the user's Profile page."),(0,r.kt)("p",null,"The API Key is a unique token that grants access to the ReportPortal REST API."),(0,r.kt)("p",null,"To use it, log in and navigate to the Profile page, then find the API Keys tab. If you've previously created a token, it now has been converted to a Legacy API Key at the moment of migration to newest version and it remains valid and operational."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"It will continue to work even if you generate new API Keys.")),(0,r.kt)("p",null,"Thus, you can use several API keys at the same time. And revoke unused, expired or publicly exposed keys."),(0,r.kt)("media-view",{src:n(53486),alt:"Authorization with user's API Key (for agents)"}),(0,r.kt)("p",null,'To generate a new API key in the ReportPortal app, click on the "Generate API Key" button.'),(0,r.kt)("p",null,"You are free to assign any name to this API key, as long as it is unique and consists of 1 to 40 characters. Keep in mind that duplicate API key names are not allowed."),(0,r.kt)("p",null,"The system will automatically prefix the generated API key with its assigned name for easy identification. If the API key name contains spaces or underscores, these will be replaced by hyphens in the API key prefix."),(0,r.kt)("p",null,"It's crucial to understand that the API key will be visible only at the point of creation. We strongly recommend copying and securely storing it for future use, as it will be impossible to retrieve later. This practice aligns with stringent security measures and standards."),(0,r.kt)("media-view",{src:n(85344),alt:"API Keys"}),(0,r.kt)("p",null,"You have the ability to create multiple API keys for various purposes, such as for automation or for integration with third-party services. However, it's important to note that all API keys generated from the user's Profile page are functionally equivalent from the permissions standpoint."),(0,r.kt)("p",null,"Users can also revoke an API key at any time. Upon revocation, all related information will be removed from the database, and the revoked API key will no longer be usable."),(0,r.kt)("p",null,"An API key functions similarly to a regular token. When making requests to the ReportPortal API, simply include it in the HTTP Authorization header as follows:"),(0,r.kt)("p",null,"HTTP Header:",(0,r.kt)("br",null),"\nAuthorization: Bearer "),(0,r.kt)("media-view",{src:n(76842),alt:"How to use API Key"}),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please be aware that this type of token is specifically designed for use by ReportPortal client tools (agents). We do not recommend using it to provide direct access to API endpoints.")))}d.isMDXComponent=!0},76842:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/APIKeyUsing-5c6d31aa71abaafa8c7b7cf2f0478b81.png"},46786:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/AccessToken1-3532d99465a7eab2f5324de85f65597b.png"},53486:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/LegacyAPIKey-1a2f0785ac76880fe940d4947e2f6652.png"},85344:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/NewAPIKeys-897a3764fc447092a383e01afd2152e1.png"}}]); \ No newline at end of file diff --git a/assets/js/a830598a.376dedc8.js b/assets/js/a830598a.376dedc8.js new file mode 100644 index 000000000..1974a8166 --- /dev/null +++ b/assets/js/a830598a.376dedc8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5414],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),f=o,m=u["".concat(s,".").concat(f)]||u[f]||b[f]||a;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>b,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:4,sidebar_label:"ReportPortal jobs configuration"},i="ReportPortal jobs configuration",l={unversionedId:"reportportal-configuration/ReportPortalJobsConfiguration",id:"reportportal-configuration/ReportPortalJobsConfiguration",title:"ReportPortal jobs configuration",description:"Currently, ReportPortal has 5 configurable jobs for data removing:",source:"@site/docs/reportportal-configuration/ReportPortalJobsConfiguration.md",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/ReportPortalJobsConfiguration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/ReportPortalJobsConfiguration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_label:"ReportPortal jobs configuration"},sidebar:"defaultSidebar",previous:{title:"Project configuration",permalink:"/docs/reportportal-configuration/ProjectConfiguration"},next:{title:"Integration via plugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin"}},s={},p=[{value:"Clean launches job",id:"clean-launches-job",level:2},{value:"Clean logs job",id:"clean-logs-job",level:2},{value:"Clean attachments info job",id:"clean-attachments-info-job",level:2},{value:"Clean attachments binaries job",id:"clean-attachments-binaries-job",level:2},{value:"Project binary storage size recalculation job",id:"project-binary-storage-size-recalculation-job",level:2}],c={toc:p},u="wrapper";function b(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"reportportal-jobs-configuration"},"ReportPortal jobs configuration"),(0,o.kt)("p",null,"Currently, ReportPortal has 5 configurable jobs for data removing:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Clean launches"),(0,o.kt)("li",{parentName:"ul"},"Clean logs"),(0,o.kt)("li",{parentName:"ul"},"Clean attachments info"),(0,o.kt)("li",{parentName:"ul"},"Clean attachments binaries"),(0,o.kt)("li",{parentName:"ul"},"Project binary storage size recalculation")),(0,o.kt)("p",null,"Job execution period can be configured using environment variables, where period value should be provided as ",(0,o.kt)("a",{parentName:"p",href:"https://www.baeldung.com/cron-syntax-linux-vs-spring"},(0,o.kt)("strong",{parentName:"a"},"spring cron"))," expression:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"*/30 * * * * *")," - every 30 seconds"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"0 */2 * * * *")," - every 2 minutes"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"0 0 */24 * * *")," - every 24 hours (every day)")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://github.com/reportportal/reportportal/blob/2b22c61f87674aaf2efc7a973af38004c2517680/docker-compose.yml#L237-L241"},"Job environment variables example for docker")),(0,o.kt)("h2",{id:"clean-launches-job"},"Clean launches job"),(0,o.kt)("p",null,"Clean launches job removes launches, their test items and logs.\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON=0 */10 * * * *")," - specifies how often job will be started (every 10 minutes)")),(0,o.kt)("h2",{id:"clean-logs-job"},"Clean logs job"),(0,o.kt)("p",null,"Clean logs job removes logs.\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON=0 */5 * * * *")," - specifies how often job will be started (every 5 minutes)")),(0,o.kt)("h2",{id:"clean-attachments-info-job"},"Clean attachments info job"),(0,o.kt)("p",null,"Clean attachments info job removes attachments data from main ",(0,o.kt)("strong",{parentName:"p"},"database")," storage and puts into ",(0,o.kt)("strong",{parentName:"p"},"temporary table")," to remove binaries from the ",(0,o.kt)("strong",{parentName:"p"},"file storage"),"\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON=0 */2 * * * *")," - specifies how often job will be started (every 2 minutes)")),(0,o.kt)("h2",{id:"clean-attachments-binaries-job"},"Clean attachments binaries job"),(0,o.kt)("p",null,"Clean attachments binaries job uses data from the ",(0,o.kt)("strong",{parentName:"p"},"temporary table")," (filled by previous job)\nand removes binaries from the ",(0,o.kt)("strong",{parentName:"p"},"file storage"),"\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON=*/30 * * * * *")," - specifies how often job will be started (every 30 seconds)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSize=1000")," - specifies the size of the batch to be selected from the ",(0,o.kt)("strong",{parentName:"li"},"temporary table")," to be removed")),(0,o.kt)("h2",{id:"project-binary-storage-size-recalculation-job"},"Project binary storage size recalculation job"),(0,o.kt)("p",null,"Project binary storage size recalculation job updates ",(0,o.kt)("strong",{parentName:"p"},"allocated storage")," value of the ",(0,o.kt)("strong",{parentName:"p"},"project")," based on the existing attachments at the moment.\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON=0 */1 * * * *")," - specifies how often job will be started (every minute)")))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a830598a.4fd1d6d5.js b/assets/js/a830598a.4fd1d6d5.js deleted file mode 100644 index 24ff641b7..000000000 --- a/assets/js/a830598a.4fd1d6d5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5414],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),b=a,f=u["".concat(s,".").concat(b)]||u[b]||m[b]||o;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=b;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:4,sidebar_label:"ReportPortal jobs configuration"},i="ReportPortal jobs configuration",l={unversionedId:"reportportal-configuration/ReportPortalJobsConfiguration",id:"reportportal-configuration/ReportPortalJobsConfiguration",title:"ReportPortal jobs configuration",description:"Currently, ReportPortal has 5 configurable jobs for data removing:",source:"@site/docs/reportportal-configuration/ReportPortalJobsConfiguration.md",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/ReportPortalJobsConfiguration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/ReportPortalJobsConfiguration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_label:"ReportPortal jobs configuration"},sidebar:"defaultSidebar",previous:{title:"Project configuration",permalink:"/docs/reportportal-configuration/ProjectConfiguration"},next:{title:"Integration via plugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin"}},s={},p=[{value:"Clean launches job",id:"clean-launches-job",level:2},{value:"Clean logs job",id:"clean-logs-job",level:2},{value:"Clean attachments info job",id:"clean-attachments-info-job",level:2},{value:"Clean attachments binaries job",id:"clean-attachments-binaries-job",level:2},{value:"Project binary storage size recalculation job",id:"project-binary-storage-size-recalculation-job",level:2}],c={toc:p},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"reportportal-jobs-configuration"},"ReportPortal jobs configuration"),(0,a.kt)("p",null,"Currently, ReportPortal has 5 configurable jobs for data removing:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Clean launches"),(0,a.kt)("li",{parentName:"ul"},"Clean logs"),(0,a.kt)("li",{parentName:"ul"},"Clean attachments info"),(0,a.kt)("li",{parentName:"ul"},"Clean attachments binaries"),(0,a.kt)("li",{parentName:"ul"},"Project binary storage size recalculation")),(0,a.kt)("p",null,"Job execution period can be configured using environment variables, where period value should be provided as ",(0,a.kt)("a",{parentName:"p",href:"https://www.baeldung.com/cron-syntax-linux-vs-spring"},(0,a.kt)("strong",{parentName:"a"},"spring cron"))," expression:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"/30 ")," * * * * - every 30 seconds"),(0,a.kt)("li",{parentName:"ul"},"0 ",(0,a.kt)("em",{parentName:"li"},"/2 ")," * * * - every 2 minutes"),(0,a.kt)("li",{parentName:"ul"},"0 0 ",(0,a.kt)("em",{parentName:"li"},"/24 ")," * * - every 24 hours (every day)")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://github.com/reportportal/reportportal/blob/2b22c61f87674aaf2efc7a973af38004c2517680/docker-compose.yml#L237-L241"},"Job environment variables example for docker")),(0,a.kt)("h2",{id:"clean-launches-job"},"Clean launches job"),(0,a.kt)("p",null,"Clean launches job removes launches, their test items and logs.\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON=0 ",(0,a.kt)("em",{parentName:"li"},"/10 ")," * * * - specifies how often job will be started (every 10 minutes)")),(0,a.kt)("h2",{id:"clean-logs-job"},"Clean logs job"),(0,a.kt)("p",null,"Clean logs job removes logs.\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON=0 ",(0,a.kt)("em",{parentName:"li"},"/5 ")," * * * - specifies how often job will be started (every 5 minutes)")),(0,a.kt)("h2",{id:"clean-attachments-info-job"},"Clean attachments info job"),(0,a.kt)("p",null,"Clean attachments info job removes attachments data from main ",(0,a.kt)("strong",{parentName:"p"},"database")," storage and puts into ",(0,a.kt)("strong",{parentName:"p"},"temporary table")," to remove binaries from the ",(0,a.kt)("strong",{parentName:"p"},"file storage"),"\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON=0 ",(0,a.kt)("em",{parentName:"li"},"/2 ")," * * * - specifies how often job will be started (every 2 minutes)")),(0,a.kt)("h2",{id:"clean-attachments-binaries-job"},"Clean attachments binaries job"),(0,a.kt)("p",null,"Clean attachments binaries job uses data from the ",(0,a.kt)("strong",{parentName:"p"},"temporary table")," (filled by previous job)\nand removes binaries from the ",(0,a.kt)("strong",{parentName:"p"},"file storage"),"\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON=",(0,a.kt)("em",{parentName:"li"},"/30 ")," * * * * - specifies how often job will be started (every 30 seconds)"),(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSize=1000 - specifies the size of the batch to be selected from the ",(0,a.kt)("strong",{parentName:"li"},"temporary table")," to be removed")),(0,a.kt)("h2",{id:"project-binary-storage-size-recalculation-job"},"Project binary storage size recalculation job"),(0,a.kt)("p",null,"Project binary storage size recalculation job updates ",(0,a.kt)("strong",{parentName:"p"},"allocated storage")," value of the ",(0,a.kt)("strong",{parentName:"p"},"project")," based on the existing attachments at the moment.\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON=0 ",(0,a.kt)("em",{parentName:"li"},"/1 ")," * * * - specifies how often job will be started (every minute)")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bdb17ab6.03e80846.js b/assets/js/bdb17ab6.03e80846.js new file mode 100644 index 000000000..e51315a3d --- /dev/null +++ b/assets/js/bdb17ab6.03e80846.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5792],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>h});var r=a(67294);function n(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function l(t){for(var e=1;e=0||(n[a]=t[a]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(n[a]=t[a])}return n}var d=r.createContext({}),s=function(t){var e=r.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},p=function(t){var e=s(t.components);return r.createElement(d.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var a=t.components,n=t.mdxType,i=t.originalType,d=t.parentName,p=o(t,["components","mdxType","originalType","parentName"]),u=s(a),m=n,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||i;return a?r.createElement(h,l(l({ref:e},p),{},{components:a})):r.createElement(h,l({ref:e},p))}));function h(t,e){var a=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=a.length,l=new Array(i);l[0]=m;var o={};for(var d in e)hasOwnProperty.call(e,d)&&(o[d]=e[d]);o.originalType=t,o[u]="string"==typeof t?t:n,l[1]=o;for(var s=2;s{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_position:3,sidebar_label:"Widget Creation"},l="Widget Creation",o={unversionedId:"dashboards-and-widgets/WidgetCreation",id:"dashboards-and-widgets/WidgetCreation",title:"Widget Creation",description:"In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and",source:"@site/docs/dashboards-and-widgets/WidgetCreation.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/WidgetCreation",permalink:"/docs/dashboards-and-widgets/WidgetCreation",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/WidgetCreation.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Widget Creation"},sidebar:"defaultSidebar",previous:{title:"Work with dashboards",permalink:"/docs/dashboards-and-widgets/WorkWithDashboards"},next:{title:"Manage Widgets",permalink:"/docs/dashboards-and-widgets/ManageWidgets"}},d={},s=[{value:"Create widget",id:"create-widget",level:2},{value:"Predefined widgets types",id:"predefined-widgets-types",level:2}],p={toc:s},u="wrapper";function c(t){let{components:e,...i}=t;return(0,n.kt)(u,(0,r.Z)({},p,i,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"widget-creation"},"Widget Creation"),(0,n.kt)("p",null,"In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and\neasy-to-use way of displaying and analyzing your automation trends and data."),(0,n.kt)("p",null,'The widgets can be added to dashboards on the "Dashboards" tab. Widgets will be visible within the project, they are created.'),(0,n.kt)("h2",{id:"create-widget"},"Create widget"),(0,n.kt)("p",null,"To create a new widget, perform the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Navigate to the "All Dashboards" page and create a new dashboard or choose the existing one.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Add New Widget" button.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The Widget Wizard will be opened. To add a new widget, you need to pass all the required steps."),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 1. Select the template of the widget (detailed description is below)."),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 2. Select a filter from the list below or create a new filter. Search functionality helps to find the filter quicker. Select other widget options: Criteria, Items, Launch or Timeline mode (if applicable for selected widget template)"),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 3. Enter a widget name and description.\nA widget name should be unique for a user on the project.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'After you have completed all steps, click the "Save" button. The new widget will be added to the dashboard on the top.'))),(0,n.kt)("p",null,"Widgets are automatically refreshed every minute."),(0,n.kt)("media-view",{thumbnail:a(40227),src:"https://youtu.be/GdyAM_6Nz10",alt:"Create widget for test report&analytics dashboard",type:"video"}),(0,n.kt)("h2",{id:"predefined-widgets-types"},"Predefined widgets types"),(0,n.kt)("p",null,"There are 15 widget templates in ReportPortal for tracking different KPI:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"KPI"),(0,n.kt)("th",{parentName:"tr",align:null},"Widget template"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the reasons of failures"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchStatisticsChart"},"Launch statistics chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Passing rate for filter summary, and structure of problems"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./OverallStatistics"},"Overall statistics"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the longest launch in the filter"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchesDurationChart"},"Launches duration chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the passing rate and structure of problems of the latest run in the system"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchExecutionAndIssueStatistic"},"Launch execution and issue statistic"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the activity of your QA team"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./ProjectActivityPanel"},"Project activity panel"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the growth of new test cases in your build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./TestCasesGrowthTrendChart"},"Test-cases growth trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the speed of test failure analysis"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./InvestigatedPercentageOfLaunches"},"Investigated percentage of launches"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Follow up information about only important launches for your team"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchesTable"},"Launches table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track new BTS issues in your run"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./UniqueBugsTable"},"Unique bugs table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the most unstable test cases in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostFailedTestCasesTableTop20"},"Most failed test-cases table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"See the trend of the number of failed test cases from build to build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./FailedCasesTrendChart"},"Failed cases trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"See the trend of the number of failed and skipped test cases from build to build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./NonPassedTestCasesTrendChart"},"Non-passed test-cases trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Compare two launches together"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./DifferentLaunchesComparisonChart"},"Different launches comparison chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track passing rate for one launch"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./PassingRatePerLaunch"},"Passing rate per launch"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track passing rate for the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./PassingRateSummary"},"Passing rate summary"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Find the most flakiest test in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./FlakyTestCasesTableTop20"},"Flaky test cases table (TOP-20)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Compare statistics for different builds on one graph"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./CumulativeTrendChart"},"Cumulative trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the most popular failure reasons in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostPopularPatternTableTop20"},"Most popular pattern table (TOP-20)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the passing rate of different components of your application"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./ComponentHealthCheck"},"Component health check"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the statistics of different components of your application"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./TableComponentHealthCheck"},"Component health check (table)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the top-20 tests with longest execution time"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostTimeConsumingTestCasesWidgetTop20"},"Most time-consuming test cases widget (TOP-20)"))))))}c.isMDXComponent=!0},40227:(t,e,a)=>{a.r(e),a.d(e,{default:()=>r});const r=a.p+"assets/images/CreateWidget-f596ab25c80ea89a250a68dfcff3f53d.png"}}]); \ No newline at end of file diff --git a/assets/js/bdb17ab6.fbdff6bb.js b/assets/js/bdb17ab6.fbdff6bb.js deleted file mode 100644 index adae36fa9..000000000 --- a/assets/js/bdb17ab6.fbdff6bb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5792],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>h});var r=a(67294);function n(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function l(t){for(var e=1;e=0||(n[a]=t[a]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(n[a]=t[a])}return n}var d=r.createContext({}),s=function(t){var e=r.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},p=function(t){var e=s(t.components);return r.createElement(d.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var a=t.components,n=t.mdxType,i=t.originalType,d=t.parentName,p=o(t,["components","mdxType","originalType","parentName"]),u=s(a),m=n,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||i;return a?r.createElement(h,l(l({ref:e},p),{},{components:a})):r.createElement(h,l({ref:e},p))}));function h(t,e){var a=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=a.length,l=new Array(i);l[0]=m;var o={};for(var d in e)hasOwnProperty.call(e,d)&&(o[d]=e[d]);o.originalType=t,o[u]="string"==typeof t?t:n,l[1]=o;for(var s=2;s{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_position:3,sidebar_label:"Widget Creation"},l="Widget Creation",o={unversionedId:"dashboards-and-widgets/WidgetCreation",id:"dashboards-and-widgets/WidgetCreation",title:"Widget Creation",description:"In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and",source:"@site/docs/dashboards-and-widgets/WidgetCreation.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/WidgetCreation",permalink:"/docs/dashboards-and-widgets/WidgetCreation",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/WidgetCreation.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Widget Creation"},sidebar:"defaultSidebar",previous:{title:"Work with dashboards",permalink:"/docs/dashboards-and-widgets/WorkWithDashboards"},next:{title:"Manage Widgets",permalink:"/docs/dashboards-and-widgets/ManageWidgets"}},d={},s=[{value:"Create widget",id:"create-widget",level:2},{value:"Predefined widgets types",id:"predefined-widgets-types",level:2}],p={toc:s},u="wrapper";function c(t){let{components:e,...i}=t;return(0,n.kt)(u,(0,r.Z)({},p,i,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"widget-creation"},"Widget Creation"),(0,n.kt)("p",null,"In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and\neasy-to-use way of displaying and analyzing your automation trends and data."),(0,n.kt)("p",null,'The widgets can be added to dashboards on the "Dashboards" tab. Widgets will be visible within the project, they are created.'),(0,n.kt)("h2",{id:"create-widget"},"Create widget"),(0,n.kt)("p",null,"To create a new widget, perform the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Navigate to the "All Dashboards" page and create a new dashboard or choose the existing one.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Add New Widget" button.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The Widget Wizard will be opened. To add a new widget, you need to pass all the required steps."),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 1. Select the template of the widget (detailed description is below)."),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 2. Select a filter from the list below or create a new filter. Search functionality helps to find the filter quicker. Select other widget options: Criteria, Items, Launch or Timeline mode (if applicable for selected widget template)"),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 3. Enter a widget name, description and share a widget (if need).\nA widget name should be unique for a user on the project.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'After you have completed all steps, click the "Save" button. The new widget will be added to the dashboard on the top.'))),(0,n.kt)("p",null,"Widgets are automatically refreshed every minute."),(0,n.kt)("media-view",{thumbnail:a(40227),src:"https://youtu.be/uRY_ihUe_oU",alt:"Create widget for test report&analytics dashboard",type:"video"}),(0,n.kt)("h2",{id:"predefined-widgets-types"},"Predefined widgets types"),(0,n.kt)("p",null,"There are 15 widget templates in ReportPortal for tracking different KPI:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"KPI"),(0,n.kt)("th",{parentName:"tr",align:null},"Widget template"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the reasons of failures"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchStatisticsChart"},"Launch statistics chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Passing rate for filter summary, and structure of problems"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./OverallStatistics"},"Overall statistics"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the longest launch in the filter"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchesDurationChart"},"Launches duration chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the passing rate and structure of problems of the latest run in the system"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchExecutionAndIssueStatistic"},"Launch execution and issue statistic"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the activity of your QA team"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./ProjectActivityPanel"},"Project activity panel"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the growth of new test cases in your build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./TestCasesGrowthTrendChart"},"Test-cases growth trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the speed of test failure analysis"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./InvestigatedPercentageOfLaunches"},"Investigated percentage of launches"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Follow up information about only important launches for your team"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchesTable"},"Launches table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track new BTS issues in your run"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./UniqueBugsTable"},"Unique bugs table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the most unstable test cases in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostFailedTestCasesTableTop20"},"Most failed test-cases table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"See the trend of the number of failed test cases from build to build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./FailedCasesTrendChart"},"Failed cases trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"See the trend of the number of failed and skipped test cases from build to build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./NonPassedTestCasesTrendChart"},"Non-passed test-cases trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Compare two launches together"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./DifferentLaunchesComparisonChart"},"Different launches comparison chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track passing rate for one launch"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./PassingRatePerLaunch"},"Passing rate per launch"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track passing rate for the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./PassingRateSummary"},"Passing rate summary"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Find the most flakiest test in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./FlakyTestCasesTableTop20"},"Flaky test cases table (TOP-20)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Compare statistics for different builds on one graph"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./CumulativeTrendChart"},"Cumulative trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the most popular failure reasons in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostPopularPatternTableTop20"},"Most popular pattern table (TOP-20)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the passing rate of different components of your application"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./ComponentHealthCheck"},"Component health check"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the statistics of different components of your application"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./TableComponentHealthCheck"},"Component health check (table)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the top-20 tests with longest execution time"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostTimeConsumingTestCasesWidgetTop20"},"Most time-consuming test cases widget (TOP-20)"))))))}c.isMDXComponent=!0},40227:(t,e,a)=>{a.r(e),a.d(e,{default:()=>r});const r=a.p+"assets/images/CreateWidget-25ed2492b3e2a2abc0b915d59d695542.png"}}]); \ No newline at end of file diff --git a/assets/js/bf477335.c38ae492.js b/assets/js/bf477335.c38ae492.js deleted file mode 100644 index 36b6af04a..000000000 --- a/assets/js/bf477335.c38ae492.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[963],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(h,i(i({ref:t},c),{},{components:n})):r.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:2,sidebar_label:"Creation of project and adding users"},i="Creation of project and adding users",s={unversionedId:"reportportal-configuration/CreationOfProjectAndAddingUsers",id:"reportportal-configuration/CreationOfProjectAndAddingUsers",title:"Creation of project and adding users",description:"The main question of how you can organize your working space in ReportPortal.",source:"@site/docs/reportportal-configuration/CreationOfProjectAndAddingUsers.md",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/CreationOfProjectAndAddingUsers",permalink:"/docs/reportportal-configuration/CreationOfProjectAndAddingUsers",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/CreationOfProjectAndAddingUsers.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"Creation of project and adding users"},sidebar:"defaultSidebar",previous:{title:"Components Overview",permalink:"/docs/reportportal-configuration/ComponentsOverview"},next:{title:"Project configuration",permalink:"/docs/reportportal-configuration/ProjectConfiguration"}},l={},p=[{value:"Create a project",id:"create-a-project",level:2},{value:"Add users to project",id:"add-users-to-project",level:2},{value:"Invite a user to a project",id:"invite-a-user-to-a-project",level:2},{value:"Assign user to the project",id:"assign-user-to-the-project",level:2},{value:"Edit project role",id:"edit-project-role",level:2},{value:"Unassign user from the project",id:"unassign-user-from-the-project",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"creation-of-project-and-adding-users"},"Creation of project and adding users"),(0,o.kt)("p",null,"The main question of how you can organize your working space in ReportPortal.\nLet's see two use cases which can help you to make a decision."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use Case 1"),": "),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Situation:")," We have a small team. Everybody can see everything. We need one dashboard which shows information about the whole project."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Solution:")," Create one project. Assign all users on the created project. View all types of test cases (UI, API, Unit and so on) on this project. Divide executions by custom filters. Create a dashboard with a widget based on filters."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Pros:")," You have a dashboard that can combine all results needed for your team. You need to configure only one project."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Cons:")," All team members can see all results, you can not configure permissions rules.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use Case 2"),": "),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Situation:")," We have a big team with a difficult permission structure and nested streams. Only persons with granted permissions can see results of a certain stream. "),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Solution:")," Create separate projects for different streams. Assign users to appropriate projects. Create a dashboard with a widget based on filters for each project."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Pros:")," Security, only users with granted permission will have access to the data."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Cons:")," You can not see a single dashboard for several dashboards. ")),(0,o.kt)("p",null,"If you choose a strategy, it is time to create your first project."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section ADMINISTRATOR can create, configure, delete projects and add/invite/assign/unassign users on/to the projects. '),(0,o.kt)("h2",{id:"create-a-project"},"Create a project"),(0,o.kt)("p",null,"To create a project for a team:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Login to the ReportPortal as an ADMIN user"),(0,o.kt)("li",{parentName:"ul"},"Open menu at the bottom."),(0,o.kt)("li",{parentName:"ul"},"Click the 'Administrate' link "),(0,o.kt)("li",{parentName:"ul"},"Select 'Projects' from the left-hand sidebar"),(0,o.kt)("li",{parentName:"ul"},"Click the 'Add New Project' button in the right top corner"),(0,o.kt)("li",{parentName:"ul"},"Then enter a name of the project"),(0,o.kt)("li",{parentName:"ul"},"Click the 'Add' button.")),(0,o.kt)("p",null,"A confirmation message in the status bar should appear."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The name of the project should contain between 3-256 symbols.\nIt can include Latin and numeric characters, as well as underscores and dashes.\nThe name should be unique and cannot be changed after saving.")),(0,o.kt)("p",null,"An Admin can configure the project settings or leave them as the default.\nProject members with PROJECT_MANAGER roles are able to set up the project settings.\nTo know how project settings could be updated, go to the ",(0,o.kt)("a",{parentName:"p",href:"./ProjectConfiguration"},"ProjectConfiguration")," section."),(0,o.kt)("p",null,'To know more about the project\'s management, go to "Administrate" section > "All Projects" page.'),(0,o.kt)("p",null,"You have a project, now add your team members to it. You can create a new user and send credentials for them - ",(0,o.kt)("strong",{parentName:"p"},"Add user")," or you can send them an invite link - ",(0,o.kt)("strong",{parentName:"p"},"Invite user"),"."),(0,o.kt)("h2",{id:"add-users-to-project"},"Add users to project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ADMINISTRATOR can add users.'),(0,o.kt)("p",null,"To add a user, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as Administrator.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click "Add User" button.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Fill all fields with valid data in the "Add user" form and click on the "Add" button.'))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"'login': \n'Full Name': \n'Email': \n'Account role': USER (by default)\n'Project Role': MEMBER (by default)\n'Password': could be entered manually (at least 6 symbols required) or generated via the link under the field.\n")),(0,o.kt)("p",null,"Example of user creation:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"Enter the user's login: Demo\nEnter the user's full name: Demo user\nEnter the user's email: demo_user@example.com\n'Account role': USER (by default)\n'Project Role': MEMBER (by default)\nAdd password: 1q2w3e \n")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},'This is the only place in the system where an Administrator can be created\nfrom. "Project role" is disabled, if "Administrator" value has been selected in the "Account role" field. The "ProjectRole" parameter is not specified for\nAdministrator, the Administrator has full privileges on the project.')),(0,o.kt)("p",null,"Submit the form."),(0,o.kt)("p",null,"A confirmation message in the status bar should appear."),(0,o.kt)("p",null,"The notification email letter is sent to the email address of the new user."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.")),(0,o.kt)("p",null,'By default, the system creates a personal project for new users. All new users which have been added to the ReportPortal will have a personal project along with the project where they have been assigned on. The user will be assigned to "Personal Project" with the PROJECT MANAGER project role.'),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"If you do not need a personal project, ADMINISTRATOR can delete it. This project will be removed from the instance. But if the user is unassigned from all projects in the system, and he/she will log in to the ReportPortal after that - the deleted personal project will be created once more time.")),(0,o.kt)("p",null,'If you wish to know more about adding user options, go to "Administrate" section > "All Users" page.'),(0,o.kt)("h2",{id:"invite-a-user-to-a-project"},"Invite a user to a project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),"\nVia Administrate section, only ADMINISTRATOR can invite users.\nVia Project Space, ADMINISTRATOR and PROJECT MANAGER can invite users."),(0,o.kt)("p",null,'To invite a user on the "All Users" page, perform the following steps:'),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as Administrator.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click on the "Invite User" button.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Fill all fields with valid data in the "Invite user" form and click on the "Invite" button. - The invitation\nhas been sent. You can copy the link to the invitation from the "Link to\ninvitation" field.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"The user will receive an email with the link to the invitation. Registration\nlink will be active until the user registers in the system by this reference,\nbut not more than 24 hours. When the user clicks the link, he/she will see a registration form.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The user needs to fill in the registration form and click the "Register" button to complete the registration.\nThe user will be assigned to the project that was specified by you during the invitation,\nand to "Personal Project" with the PROJECT MANAGER project role.'))),(0,o.kt)("h2",{id:"assign-user-to-the-project"},"Assign user to the project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ADMINISTRATOR can assign users.\nVia Project Space ADMINISTRATOR and PROJECT MANAGER can assign users.'),(0,o.kt)("p",null,"Perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as Administrator.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All Users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Find a user and click "+ Assign to project" button.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fill the name of project.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select a project role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click on the "Tick" button. - The user will be assigned to the project.'))),(0,o.kt)("h2",{id:"edit-project-role"},"Edit project role"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ADMINISTRATOR can edit the project role.\nVia Project Space ADMINISTRATOR and PROJECT MANAGER can edit the project role.'),(0,o.kt)("p",null,"To edit the project role, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as Administrator.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All Users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Find a user and their project in the "Projects and roles" column.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click on the name of project.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select a new value from the "Project Role" drop-down.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click on the "Tick" icon.'))),(0,o.kt)("h2",{id:"unassign-user-from-the-project"},"Unassign user from the project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ADMINISTRATOR can unassign users.\nVia Project Space ADMINISTRATOR and PROJECT MANAGER can unassign users.'),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.")),(0,o.kt)("p",null,"Depending on the project needs the assignment could be removed.\nTo unassign the assignment for the user on the project, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All Users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Find a user and their project in the "Projects and roles" column.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click on the name of project.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click on "Cross" icon near the needed project.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Confirm the action. - The user will be unassigned from the current project but will stay in the system."))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Users can not be unassign from their own personal projects.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bf477335.dbaea5ba.js b/assets/js/bf477335.dbaea5ba.js new file mode 100644 index 000000000..9db5fcc4e --- /dev/null +++ b/assets/js/bf477335.dbaea5ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[963],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,h=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return n?o.createElement(h,i(i({ref:t},c),{},{components:n})):o.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=n(87462),r=(n(67294),n(3905));const a={sidebar_position:2,sidebar_label:"Creation of project and adding users"},i="Creation of project and adding users",s={unversionedId:"reportportal-configuration/CreationOfProjectAndAddingUsers",id:"reportportal-configuration/CreationOfProjectAndAddingUsers",title:"Creation of project and adding users",description:"The main question of how you can organize your working space in ReportPortal.",source:"@site/docs/reportportal-configuration/CreationOfProjectAndAddingUsers.md",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/CreationOfProjectAndAddingUsers",permalink:"/docs/reportportal-configuration/CreationOfProjectAndAddingUsers",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/CreationOfProjectAndAddingUsers.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"Creation of project and adding users"},sidebar:"defaultSidebar",previous:{title:"Components Overview",permalink:"/docs/reportportal-configuration/ComponentsOverview"},next:{title:"Project configuration",permalink:"/docs/reportportal-configuration/ProjectConfiguration"}},l={},p=[{value:"Create a project",id:"create-a-project",level:2},{value:"Add users to project",id:"add-users-to-project",level:2},{value:"Invite a user to a project",id:"invite-a-user-to-a-project",level:2},{value:"Assign user to the project",id:"assign-user-to-the-project",level:2},{value:"Edit project role",id:"edit-project-role",level:2},{value:"Unassign user from the project",id:"unassign-user-from-the-project",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"creation-of-project-and-adding-users"},"Creation of project and adding users"),(0,r.kt)("p",null,"The main question of how you can organize your working space in ReportPortal.\nLet's see two use cases which can help you to make a decision."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Use Case 1"),": "),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Situation:")," We have a small team. Everybody can see everything. We need one dashboard which shows information about the whole project."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Solution:")," Create one project. Assign all users on the created project. View all types of test cases (UI, API, Unit and so on) on this project. Divide executions by custom filters. Create a dashboard with a widget based on filters."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Pros:")," You have a dashboard that can combine all results needed for your team. You need to configure only one project."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Cons:")," All team members can see all results, you can not configure permissions rules.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Use Case 2"),": "),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Situation:")," We have a big team with a difficult permission structure and nested streams. Only persons with granted permissions can see results of a certain stream. "),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Solution:")," Create separate projects for different streams. Assign users to appropriate projects. Create a dashboard with a widget based on filters for each project."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Pros:")," Security, only users with granted permission will have access to the data."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Cons:")," You can not see a single dashboard for several dashboards. ")),(0,r.kt)("p",null,"If you choose a strategy, it is time to create your first project."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can create, configure, delete projects and add/invite/assign/unassign users on/to the projects. "),(0,r.kt)("h2",{id:"create-a-project"},"Create a project"),(0,r.kt)("p",null,"To create a project for a team:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Login to the ReportPortal as an ADMIN user"),(0,r.kt)("li",{parentName:"ul"},"Open menu at the bottom."),(0,r.kt)("li",{parentName:"ul"},"Click the 'Administrate' link "),(0,r.kt)("li",{parentName:"ul"},"Select 'Projects' from the left-hand sidebar"),(0,r.kt)("li",{parentName:"ul"},"Click the 'Add New Project' button in the right top corner"),(0,r.kt)("li",{parentName:"ul"},"Then enter a name of the project"),(0,r.kt)("li",{parentName:"ul"},"Click the 'Add' button.")),(0,r.kt)("p",null,"A confirmation message in the status bar should appear."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The name of the project should contain between 3-256 symbols.\nIt can include Latin and numeric characters, as well as underscores and dashes.\nThe name should be unique and cannot be changed after saving.")),(0,r.kt)("p",null,"An Admin can configure the project settings or leave them as the default.\nProject members with PROJECT_MANAGER roles are able to set up the project settings.\nTo know how project settings could be updated, go to the ",(0,r.kt)("a",{parentName:"p",href:"./ProjectConfiguration"},"ProjectConfiguration")," section."),(0,r.kt)("p",null,'To know more about the project\'s management, go to "Administrate" section > "All Projects" page.'),(0,r.kt)("p",null,"You have a project, now add your team members to it. You can create a new user and send credentials for them - ",(0,r.kt)("strong",{parentName:"p"},"Add user")," or you can send them an invite link - ",(0,r.kt)("strong",{parentName:"p"},"Invite user"),"."),(0,r.kt)("h2",{id:"add-users-to-project"},"Add users to project"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can add users."),(0,r.kt)("p",null,"To add a user, perform the following steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as Administrator."),(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All users" page.'),(0,r.kt)("li",{parentName:"ol"},'Click "Add User" button.'),(0,r.kt)("li",{parentName:"ol"},'Fill all fields with valid data in the "Add user" form and click on the "Add" button.')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"'login': \n'Full Name': \n'Email': \n'Account role': USER (by default)\n'Project Role': MEMBER (by default)\n'Password': could be entered manually (at least 6 symbols required) or generated via the link under the field.\n")),(0,r.kt)("p",null,"Example of user creation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"Enter the user's login: Demo\nEnter the user's full name: Demo user\nEnter the user's email: demo_user@example.com\n'Account role': USER (by default)\n'Project Role': MEMBER (by default)\nAdd password: 1q2w3e \n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},'This is the only place in the system where an Administrator can be created\nfrom. "Project role" is disabled, if "Administrator" value has been selected in the "Account role" field. The "ProjectRole" parameter is not specified for\nAdministrator, the Administrator has full privileges on the project.')),(0,r.kt)("p",null,"Submit the form."),(0,r.kt)("p",null,"A confirmation message in the status bar should appear."),(0,r.kt)("p",null,"The notification email letter is sent to the email address of the new user."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.")),(0,r.kt)("p",null,'By default, the system creates a personal project for new users. All new users which have been added to the ReportPortal will have a personal project along with the project where they have been assigned on. The user will be assigned to "Personal Project" with the ',(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," project role."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you do not need a personal project, ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can delete it. This project will be removed from the instance. But if the user is unassigned from all projects in the system, and he/she will log in to the ReportPortal after that - the deleted personal project will be created once more time.")),(0,r.kt)("p",null,'If you wish to know more about adding user options, go to "Administrate" section > "All Users" page.'),(0,r.kt)("h2",{id:"invite-a-user-to-a-project"},"Invite a user to a project"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),"\nVia Administrate section, only ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can invite users.\nVia Project Space, ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," can invite users."),(0,r.kt)("p",null,'To invite a user on the "All Users" page, perform the following steps:'),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as Administrator."),(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All users" page.'),(0,r.kt)("li",{parentName:"ol"},'Click on the "Invite User" button.'),(0,r.kt)("li",{parentName:"ol"},'Fill all fields with valid data in the "Invite user" form and click on the "Invite" button. - The invitation\nhas been sent. You can copy the link to the invitation from the "Link to\ninvitation" field.'),(0,r.kt)("li",{parentName:"ol"},"The user will receive an email with the link to the invitation. Registration\nlink will be active until the user registers in the system by this reference,\nbut not more than 24 hours. When the user clicks the link, he/she will see a registration form."),(0,r.kt)("li",{parentName:"ol"},'The user needs to fill in the registration form and click the "Register" button to complete the registration.\nThe user will be assigned to the project that was specified by you during the invitation,\nand to "Personal Project" with the ',(0,r.kt)("inlineCode",{parentName:"li"},"PROJECT MANAGER")," project role.")),(0,r.kt)("h2",{id:"assign-user-to-the-project"},"Assign user to the project"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can assign users.\nVia Project Space ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," can assign users."),(0,r.kt)("p",null,"Perform the following steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as Administrator."),(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All Users" page.'),(0,r.kt)("li",{parentName:"ol"},'Find a user and click "+ Assign to project" button.'),(0,r.kt)("li",{parentName:"ol"},"Fill the name of project."),(0,r.kt)("li",{parentName:"ol"},"Select a project role."),(0,r.kt)("li",{parentName:"ol"},'Click on the "Tick" button. - The user will be assigned to the project.')),(0,r.kt)("h2",{id:"edit-project-role"},"Edit project role"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can edit the project role.\nVia Project Space ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," can edit the project role."),(0,r.kt)("p",null,"To edit the project role, perform the following steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as Administrator."),(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All Users" page.'),(0,r.kt)("li",{parentName:"ol"},'Find a user and their project in the "Projects and roles" column.'),(0,r.kt)("li",{parentName:"ol"},"Click on the name of project."),(0,r.kt)("li",{parentName:"ol"},'Select a new value from the "Project Role" drop-down.'),(0,r.kt)("li",{parentName:"ol"},'Click on the "Tick" icon.')),(0,r.kt)("h2",{id:"unassign-user-from-the-project"},"Unassign user from the project"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can unassign users.\nVia Project Space ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," can unassign users."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.")),(0,r.kt)("p",null,"Depending on the project needs the assignment could be removed.\nTo unassign the assignment for the user on the project, perform the following steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All Users" page.'),(0,r.kt)("li",{parentName:"ol"},'Find a user and their project in the "Projects and roles" column.'),(0,r.kt)("li",{parentName:"ol"},"Click on the name of project."),(0,r.kt)("li",{parentName:"ol"},'Click on "Cross" icon near the needed project.'),(0,r.kt)("li",{parentName:"ol"},"Confirm the action. - The user will be unassigned from the current project but will stay in the system.")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Users can not be unassign from their own personal projects.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c3038888.8ba87a9d.js b/assets/js/c3038888.8ba87a9d.js deleted file mode 100644 index 73bae930c..000000000 --- a/assets/js/c3038888.8ba87a9d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7100],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>d});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},s=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},c="mdxType",g={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,s=l(t,["components","mdxType","originalType","parentName"]),c=u(n),f=a,d=c["".concat(p,".").concat(f)]||c[f]||g[f]||o;return n?r.createElement(d,i(i({ref:e},s),{},{components:n})):r.createElement(d,i({ref:e},s))}));function d(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=n.length,i=new Array(o);i[0]=f;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[c]="string"==typeof t?t:a,i[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:6,sidebar_label:"Integration via plugin"},i="Integration via plugin",l={unversionedId:"reportportal-configuration/IntegrationViaPlugin",id:"reportportal-configuration/IntegrationViaPlugin",title:"Integration via plugin",description:"Users can reinforce ReportPortal with adding additional integrtions with:",source:"@site/docs/reportportal-configuration/IntegrationViaPlugin.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/IntegrationViaPlugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/IntegrationViaPlugin.mdx",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,sidebar_label:"Integration via plugin"},sidebar:"defaultSidebar",previous:{title:"ReportPortal jobs configuration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration"},next:{title:"How to get an access token in ReportPortal",permalink:"/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal"}},p={},u=[],s={toc:u},c="wrapper";function g(t){let{components:e,...o}=t;return(0,a.kt)(c,(0,r.Z)({},s,o,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"integration-via-plugin"},"Integration via plugin"),(0,a.kt)("p",null,"Users can reinforce ReportPortal with adding additional integrtions with:"),(0,a.kt)("media-view",{src:n(54753),alt:"Integrations with our test automation results dashboard"}),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/JiraServer"},"Jira Server")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/JiraCloud"},"Jira Cloud")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/Rally"},"Rally")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/AzureDevOpsBTS"},"Azure DevOps")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/SauceLabs"},"Sauce Labs")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/EmailServer"},"E-mail server")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/LDAP"},"LDAP")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/ActiveDirectory"},"Active Directory")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/SAMLProvider/OktaSAML"},"Okta SAML")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/SAMLProvider/AzureSAML"},"Azure SAML"))),(0,a.kt)("p",null,"If you want to integrate ReportPortal with these external systems, and you can not find a needed tab on the Project Settings, please check the section in documentation ",(0,a.kt)("a",{parentName:"p",href:"/category/plugins"},"Plugins"),"."),(0,a.kt)("p",null,"Integration configurations can be added on the global level (for all projects on the instance) in the Administrate section or the project level (only for one project) on Project Settings."),(0,a.kt)("p",null,"If you have another configuration than other projects have or you want to integrate only your project with an external system, you should perform the next actions:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Log in to ReportPortal as PROJECT MANAGER or ADMIN")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Go to Project settings > Integrations")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click on one of the integration panels")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},'And click the button "Unlink and setup manually"'))),(0,a.kt)("p",null,"By this action, you unlink the current project from the global settings and configure your integration."),(0,a.kt)("media-view",{src:n(97524),alt:"Unlink Global Jira Integration"}),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"If you unlink project setting and ADMIN changes global settings for the whole instance, your project will use your project settings.")),(0,a.kt)("p",null,'To return global settings, you need to click a button "Reset to global settings".\nIn this case, your settings will be deleted, and integration will use global settings.'),(0,a.kt)("p",null,"You can always reset to the global settings."))}g.isMDXComponent=!0},54753:(t,e,n)=>{n.r(e),n.d(e,{default:()=>r});const r=n.p+"assets/images/Integrations-939c7351871dea98250271244a1ae0ae.png"},97524:(t,e,n)=>{n.r(e),n.d(e,{default:()=>r});const r=n.p+"assets/images/UnlinkGlobalIntegration-472618f9a893b44147f1ab1544498eb5.png"}}]); \ No newline at end of file diff --git a/assets/js/c3038888.fa2c8662.js b/assets/js/c3038888.fa2c8662.js new file mode 100644 index 000000000..b12fab06a --- /dev/null +++ b/assets/js/c3038888.fa2c8662.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7100],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>d});var r=n(67294);function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},s=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},c="mdxType",g={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var n=t.components,o=t.mdxType,a=t.originalType,p=t.parentName,s=l(t,["components","mdxType","originalType","parentName"]),c=u(n),f=o,d=c["".concat(p,".").concat(f)]||c[f]||g[f]||a;return n?r.createElement(d,i(i({ref:e},s),{},{components:n})):r.createElement(d,i({ref:e},s))}));function d(t,e){var n=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[c]="string"==typeof t?t:o,i[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>g,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,sidebar_label:"Integration via plugin"},i="Integration via plugin",l={unversionedId:"reportportal-configuration/IntegrationViaPlugin",id:"reportportal-configuration/IntegrationViaPlugin",title:"Integration via plugin",description:"Users can reinforce ReportPortal with adding additional integrtions with:",source:"@site/docs/reportportal-configuration/IntegrationViaPlugin.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/IntegrationViaPlugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/IntegrationViaPlugin.mdx",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,sidebar_label:"Integration via plugin"},sidebar:"defaultSidebar",previous:{title:"ReportPortal jobs configuration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration"},next:{title:"How to get an access token in ReportPortal",permalink:"/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal"}},p={},u=[],s={toc:u},c="wrapper";function g(t){let{components:e,...a}=t;return(0,o.kt)(c,(0,r.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"integration-via-plugin"},"Integration via plugin"),(0,o.kt)("p",null,"Users can reinforce ReportPortal with adding additional integrtions with:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/JiraServer"},"Jira Server")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/JiraCloud"},"Jira Cloud")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/Rally"},"Rally")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/AzureDevOpsBTS"},"Azure DevOps")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/SauceLabs"},"Sauce Labs")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/EmailServer"},"E-mail server")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/LDAP"},"LDAP")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/ActiveDirectory"},"Active Directory")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/SAMLProvider/OktaSAML"},"Okta SAML")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/SAMLProvider/AzureSAML"},"Azure SAML"))),(0,o.kt)("media-view",{src:n(54753),alt:"Integrations with our test automation results dashboard"}),(0,o.kt)("p",null,"If you want to integrate ReportPortal with these external systems, and you can not find a needed tab on the Project Settings, please check the section in documentation ",(0,o.kt)("a",{parentName:"p",href:"/category/plugins"},"Plugins"),"."),(0,o.kt)("p",null,"Integration configurations can be added on the global level (for all projects on the instance) in the Administrate section or the project level (only for one project) on Project Settings."),(0,o.kt)("p",null,"If you have another configuration than other projects have or you want to integrate only your project with an external system, you should perform the next actions:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Log in to ReportPortal as ",(0,o.kt)("inlineCode",{parentName:"li"},"PROJECT MANAGER")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"ADMINISTRATOR")),(0,o.kt)("li",{parentName:"ol"},"Go to Project settings > Integrations"),(0,o.kt)("li",{parentName:"ol"},"Click on one of the integration panels"),(0,o.kt)("li",{parentName:"ol"},'And click the button "Unlink and setup manually"')),(0,o.kt)("p",null,"By this action, you unlink the current project from the global settings and configure your integration."),(0,o.kt)("media-view",{src:n(97524),alt:"Unlink Global Jira Integration"}),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"If you unlink project setting and ADMIN changes global settings for the whole instance, your project will use your project settings.")),(0,o.kt)("p",null,'To return global settings, you need to click a button "Reset to global settings".\nIn this case, your settings will be deleted, and integration will use global settings.'),(0,o.kt)("p",null,"You can always reset to the global settings."))}g.isMDXComponent=!0},54753:(t,e,n)=>{n.r(e),n.d(e,{default:()=>r});const r=n.p+"assets/images/Integrations-939c7351871dea98250271244a1ae0ae.png"},97524:(t,e,n)=>{n.r(e),n.d(e,{default:()=>r});const r=n.p+"assets/images/UnlinkGlobalIntegration-472618f9a893b44147f1ab1544498eb5.png"}}]); \ No newline at end of file diff --git a/assets/js/c60355ff.66645129.js b/assets/js/c60355ff.66645129.js new file mode 100644 index 000000000..3d85ffa2c --- /dev/null +++ b/assets/js/c60355ff.66645129.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9063],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var r=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function d(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var i=r.createContext({}),l=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):d(d({},t),e)),a},p=function(e){var t=l(e.components);return r.createElement(i.Provider,{value:t},e.children)},h="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},b=r.forwardRef((function(e,t){var a=e.components,o=e.mdxType,n=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=l(a),b=o,u=h["".concat(i,".").concat(b)]||h[b]||c[b]||n;return a?r.createElement(u,d(d({ref:t},p),{},{components:a})):r.createElement(u,d({ref:t},p))}));function u(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=a.length,d=new Array(n);d[0]=b;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[h]="string"==typeof e?e:o,d[1]=s;for(var l=2;l{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>d,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=a(87462),o=(a(67294),a(3905));const n={sidebar_position:2,sidebar_label:"Work with dashboards"},d="Work with dashboards",s={unversionedId:"dashboards-and-widgets/WorkWithDashboards",id:"dashboards-and-widgets/WorkWithDashboards",title:"Work with dashboards",description:"Dashboards on our continuous testing platform are special containers, where users can create widgets.",source:"@site/docs/dashboards-and-widgets/WorkWithDashboards.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/WorkWithDashboards",permalink:"/docs/dashboards-and-widgets/WorkWithDashboards",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/WorkWithDashboards.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"Work with dashboards"},sidebar:"defaultSidebar",previous:{title:"Possible Dashboards in ReportPortal",permalink:"/docs/dashboards-and-widgets/PossibleDashboardsInReportPortal"},next:{title:"Widget Creation",permalink:"/docs/dashboards-and-widgets/WidgetCreation"}},i={},l=[{value:"Create dashboard",id:"create-dashboard",level:2},{value:"Edit dashboard",id:"edit-dashboard",level:2},{value:"Delete dashboard",id:"delete-dashboard",level:2}],p={toc:l},h="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(h,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"work-with-dashboards"},"Work with dashboards"),(0,o.kt)("p",null,"Dashboards on our continuous testing platform are special containers, where users can create widgets."),(0,o.kt)("p",null,'To create and use dashboards, navigate to the "Dashboards" tab.'),(0,o.kt)("p",null,"You can create a dashboard that will be visible on the current project."),(0,o.kt)("h2",{id:"create-dashboard"},"Create dashboard"),(0,o.kt)("p",null,"To create a new dashboard, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Dashboards" page and click "Add New\nDashboard" button in the top right corner of the page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Add New Dashboard" popup will be opened.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Enter a name for a new dashboard. The\nname should be between 3 to 55 characters long and unique for the user per the\nproject. You can add the description for your dashboard as well.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click "Add" button. The new dashboard will be created.'))),(0,o.kt)("p",null,"Now you can add widgets to the dashboard."),(0,o.kt)("media-view",{thumbnail:a(44218),src:"https://youtu.be/dP_AqeWWu7w",alt:"Create test execution dashboard",type:"video"}),(0,o.kt)("h2",{id:"edit-dashboard"},"Edit dashboard"),(0,o.kt)("p",null,"To edit a dashboard, perform the following steps: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to "All Dashboards" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click the \"Edit\" icon in the top corner of the dashboard or\nclick the name of the dashboard and click 'Edit' button in the header of the dashboard.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Edit Dashboard" popup will be opened.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Make the necessary changes and click "Update" button. The dashboard will\nbe displayed with updates.'))),(0,o.kt)("media-view",{thumbnail:a(35852),src:"https://youtu.be/BuzggC_kKcs",alt:"Edit dashboard",type:"video"}),(0,o.kt)("h2",{id:"delete-dashboard"},"Delete dashboard"),(0,o.kt)("p",null,"To remove a dashboard from the project, perform the following steps: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Delete" button in the top right corner of the dashboard.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Delete" button on confirmation pop-up.'))),(0,o.kt)("p",null,"The dashboard and related widgets will be deleted from the system."),(0,o.kt)("media-view",{thumbnail:a(22940),src:"https://youtu.be/ICqrwD5rRLU",alt:"Delete dashboard",type:"video"}))}c.isMDXComponent=!0},44218:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/CreateDashboard-2e25ca8b7611c63c5cd7f605b2b3cb3d.png"},22940:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/DeleteDashboard-de6c2f781a84e327df0f8a29fd761374.png"},35852:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/EditDashboard-931c64aa1443a24eb4f7ca8390714030.png"}}]); \ No newline at end of file diff --git a/assets/js/c60355ff.e76f313e.js b/assets/js/c60355ff.e76f313e.js deleted file mode 100644 index e5e7c6a2d..000000000 --- a/assets/js/c60355ff.e76f313e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9063],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>u});var r=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function d(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function n(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var i=r.createContext({}),l=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):n(n({},t),e)),a},h=function(e){var t=l(e.components);return r.createElement(i.Provider,{value:t},e.children)},b="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,o=e.mdxType,d=e.originalType,i=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),b=l(a),c=o,u=b["".concat(i,".").concat(c)]||b[c]||p[c]||d;return a?r.createElement(u,n(n({ref:t},h),{},{components:a})):r.createElement(u,n({ref:t},h))}));function u(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var d=a.length,n=new Array(d);n[0]=c;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[b]="string"==typeof e?e:o,n[1]=s;for(var l=2;l{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>n,default:()=>p,frontMatter:()=>d,metadata:()=>s,toc:()=>l});var r=a(87462),o=(a(67294),a(3905));const d={sidebar_position:2,sidebar_label:"Work with dashboards"},n="Work with dashboards",s={unversionedId:"dashboards-and-widgets/WorkWithDashboards",id:"dashboards-and-widgets/WorkWithDashboards",title:"Work with dashboards",description:"Dashboards on our continuous testing platform are special containers, where users can create widgets.",source:"@site/docs/dashboards-and-widgets/WorkWithDashboards.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/WorkWithDashboards",permalink:"/docs/dashboards-and-widgets/WorkWithDashboards",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/WorkWithDashboards.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"Work with dashboards"},sidebar:"defaultSidebar",previous:{title:"Possible Dashboards in ReportPortal",permalink:"/docs/dashboards-and-widgets/PossibleDashboardsInReportPortal"},next:{title:"Widget Creation",permalink:"/docs/dashboards-and-widgets/WidgetCreation"}},i={},l=[{value:"Create dashboard",id:"create-dashboard",level:2},{value:"Edit own dashboard",id:"edit-own-dashboard",level:2},{value:"Delete dashboard",id:"delete-dashboard",level:2},{value:"Shared dashboard",id:"shared-dashboard",level:2}],h={toc:l},b="wrapper";function p(e){let{components:t,...d}=e;return(0,o.kt)(b,(0,r.Z)({},h,d,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"work-with-dashboards"},"Work with dashboards"),(0,o.kt)("p",null,"Dashboards on our continuous testing platform are special containers, where users can create widgets."),(0,o.kt)("p",null,'To create and use dashboards, navigate to the "Dashboards" tab.'),(0,o.kt)("p",null,"You can create a dashboard that will be visible on the current project. If you share dashboard on the project, it will be available to all users of the project the dashboard is created in."),(0,o.kt)("h2",{id:"create-dashboard"},"Create dashboard"),(0,o.kt)("p",null,"To create a new dashboard, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Dashboards" page and click "Add New\nDashboard" button in the top right corner of the page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Add New Dashboard" popup will be opened.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Enter a name for a new dashboard. The\nname should be between 3 to 55 characters long and unique for the user per the\nproject. You can add the description for your dashboard as well.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select Share mode ON \u2013 if you want your dashboard to be shared. Leave\nShare mode OFF \u2013 if you do not want to share your dashboard.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click "Add" button. The new dashboard will be created.'))),(0,o.kt)("p",null,"Now you can add widgets to the dashboard."),(0,o.kt)("media-view",{thumbnail:a(44218),src:"https://youtu.be/-3JkuMxiGE4",alt:"Create test execution dashboard",type:"video"}),(0,o.kt)("h2",{id:"edit-own-dashboard"},"Edit own dashboard"),(0,o.kt)("p",null,"To edit a dashboard, perform the following steps: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to "All Dashboards" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click the \"Edit\" icon in the top corner of the dashboard or\nclick the name of the dashboard and click 'Edit' button in the header of the dashboard.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Edit Dashboard" popup will be opened.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Make the necessary changes and click "Update" button. The dashboard will\nbe displayed with updates.'))),(0,o.kt)("media-view",{thumbnail:a(35852),src:"https://youtu.be/649Zk8awSM0",alt:"Edit dashboard",type:"video"}),(0,o.kt)("h2",{id:"delete-dashboard"},"Delete dashboard"),(0,o.kt)("p",null,"To remove a dashboard from the project, perform the following steps: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Delete" button in the top right corner of the dashboard.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Delete" button on confirmation pop-up.'))),(0,o.kt)("p",null,"The dashboard and related widgets will be deleted from the system."),(0,o.kt)("media-view",{thumbnail:a(22940),src:"https://youtu.be/vvO09XrBFCs",alt:"Delete dashboard",type:"video"}),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"A user with a PROJECT MANAGER role can delete a dashboard shared by other members by clicking on the \u2018Delete\u2019 button\nin the top right corner of the dashboard tile. The dashboard will be deleted from the system.")),(0,o.kt)("h2",{id:"shared-dashboard"},"Shared dashboard"),(0,o.kt)("p",null,"Dashboards that were created and shared by another project member are stored in Shared Dashboards."),(0,o.kt)("p",null,"You can open and see the data on such dashboards, but you are not able to modify or delete them."),(0,o.kt)("p",null,"Our test reporting tool allows project members to see shared dashboards by other project members dashboards by a direct link."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"A user with an ADMIN account role / PROJECT MANAGER project role can delete a dashboard shared by other members by clicking on \u2018Delete\u2019 icon.\nThe dashboard and widgets on the dashboard will be deleted from the system.")))}p.isMDXComponent=!0},44218:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/CreateDashboard-4f7bc94f27a9ffb36b7b5f8c81fb3d75.png"},22940:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/DeleteDashboard-94ed5725252069d9c2565d1b56f7c5bb.png"},35852:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/EditDashboard-65933356245c0ff0557897065a20848e.png"}}]); \ No newline at end of file diff --git a/assets/js/d09084ee.449dca62.js b/assets/js/d09084ee.c6557d0f.js similarity index 56% rename from assets/js/d09084ee.449dca62.js rename to assets/js/d09084ee.c6557d0f.js index 8cfd0e087..df3eb58fa 100644 --- a/assets/js/d09084ee.449dca62.js +++ b/assets/js/d09084ee.c6557d0f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3653],{3905:(t,e,n)=>{n.d(e,{Zo:()=>c,kt:()=>f});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},c=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=u(n),m=a,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return n?r.createElement(f,i(i({ref:e},c),{},{components:n})):r.createElement(f,i({ref:e},c))}));function f(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:a,i[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_label:"GitHub"},i="GitHub",l={unversionedId:"reportportal-configuration/authorization/GitHub",id:"reportportal-configuration/authorization/GitHub",title:"GitHub",description:"Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow.",source:"@site/docs/reportportal-configuration/authorization/GitHub.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/GitHub.md",tags:[],version:"current",frontMatter:{sidebar_label:"GitHub"},sidebar:"defaultSidebar",previous:{title:"Active Directory",permalink:"/docs/reportportal-configuration/authorization/ActiveDirectory"},next:{title:"LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP"}},p={},u=[{value:"Presequences",id:"presequences",level:3},{value:"ReportPortal configuration",id:"reportportal-configuration",level:3}],c={toc:u},s="wrapper";function d(t){let{components:e,...n}=t;return(0,a.kt)(s,(0,r.Z)({},c,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"github"},"GitHub"),(0,a.kt)("p",null,"Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow."),(0,a.kt)("h3",{id:"presequences"},"Presequences"),(0,a.kt)("p",null,"To enable this feature you need to ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/settings/applications/new"},"register new application in Github")),(0,a.kt)("p",null,"Fill the following fields:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Value"),(0,a.kt)("th",{parentName:"tr",align:null},"Description"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Application name"),(0,a.kt)("td",{parentName:"tr",align:null},"Report Portal"),(0,a.kt)("td",{parentName:"tr",align:null},"Just something which allow you recognize what's this.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Homepage URL"),(0,a.kt)("td",{parentName:"tr",align:null},"https://{HOST}:{PORT}/uat/sso/user"),(0,a.kt)("td",{parentName:"tr",align:null},"Replace with ",(0,a.kt)("inlineCode",{parentName:"td"},"{HOST}")," and ",(0,a.kt)("inlineCode",{parentName:"td"},"{PORT}")," with appropriate values of your instance. Naturally you can omit ",(0,a.kt)("inlineCode",{parentName:"td"},":{PORT}")," if it's default port for HTTPS protocol.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Authorization callback URL"),(0,a.kt)("td",{parentName:"tr",align:null},"https://{HOST}:{PORT}/uat/sso/login/github"),(0,a.kt)("td",{parentName:"tr",align:null},"As in the previous field replace with ",(0,a.kt)("inlineCode",{parentName:"td"},"{HOST}")," and ",(0,a.kt)("inlineCode",{parentName:"td"},"{PORT}")," with your appropriate values.")))),(0,a.kt)("p",null,'Once new application is created, you will have Client ID. Click on "Generate a new client secret" to get Client Secret, but do not close the window until you configure the Authorization on RP, since it will never show you the Secret again.'),(0,a.kt)("h3",{id:"reportportal-configuration"},"ReportPortal configuration"),(0,a.kt)("p",null,"To setup access with GitHub auth on ReportPortal:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,a.kt)("li",{parentName:"ol"},"Open the list on the right of the user's image."),(0,a.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,a.kt)("li",{parentName:"ol"},"Click the 'Server Settings' from the left-hand sidebar"),(0,a.kt)("li",{parentName:"ol"},"Go to the 'Authorization Configuration' tab"),(0,a.kt)("li",{parentName:"ol"},"Then change the switcher position of 'Activate GitHub Authorization' to ON"),(0,a.kt)("li",{parentName:"ol"},"The Next fields should appear:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Client ID': \n'Client Secret': \n'Add GitHub Organization' button-link: (optional)\n")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"In case the 'Organization Name' is not added, all GitHub users will have access to the ReportPortal instance.",(0,a.kt)("br",null),"\nIf the 'Organization Name' is specified, only users of this organization will have an access to ReportPortal instance.",(0,a.kt)("br",null),"\nIf the Name of GitHub organization is not validated, verify that the name is correct.")),(0,a.kt)("p",null,"Example of GitHub auth configuration:\nFill in the form:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Client Id': 8767988c424a0e7a2640\n'Client Secret': ef22c9f804257afaf399a2dada7c8f22dee5fd1b\n'Organization Name': reportportal\n")),(0,a.kt)("p",null,"Click on 'Submit' button.\nA confirmation message in status bar should be shown.\nA 'Login with GitHub' button will appear on login form."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3653],{3905:(t,e,n)=>{n.d(e,{Zo:()=>c,kt:()=>f});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},c=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=u(n),m=a,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return n?r.createElement(f,i(i({ref:e},c),{},{components:n})):r.createElement(f,i({ref:e},c))}));function f(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:a,i[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_label:"GitHub"},i="GitHub",l={unversionedId:"reportportal-configuration/authorization/GitHub",id:"reportportal-configuration/authorization/GitHub",title:"GitHub",description:"Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow.",source:"@site/docs/reportportal-configuration/authorization/GitHub.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/GitHub.md",tags:[],version:"current",frontMatter:{sidebar_label:"GitHub"},sidebar:"defaultSidebar",previous:{title:"Active Directory",permalink:"/docs/reportportal-configuration/authorization/ActiveDirectory"},next:{title:"LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP"}},p={},u=[{value:"Presequences",id:"presequences",level:3},{value:"ReportPortal configuration",id:"reportportal-configuration",level:3}],c={toc:u},s="wrapper";function d(t){let{components:e,...n}=t;return(0,a.kt)(s,(0,r.Z)({},c,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"github"},"GitHub"),(0,a.kt)("p",null,"Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow."),(0,a.kt)("h3",{id:"presequences"},"Presequences"),(0,a.kt)("p",null,"To enable this feature you need to ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/settings/applications/new"},"register new application in Github")),(0,a.kt)("p",null,"Fill the following fields:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Value"),(0,a.kt)("th",{parentName:"tr",align:null},"Description"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Application name"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Report Portal")),(0,a.kt)("td",{parentName:"tr",align:null},"Just something which allow you recognize what's this.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Homepage URL"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"https://{HOST}:{PORT}/uat/sso/user")),(0,a.kt)("td",{parentName:"tr",align:null},"Replace with ",(0,a.kt)("inlineCode",{parentName:"td"},"{HOST}")," and ",(0,a.kt)("inlineCode",{parentName:"td"},"{PORT}")," with appropriate values of your instance. Naturally you can omit ",(0,a.kt)("inlineCode",{parentName:"td"},":{PORT}")," if it's default port for HTTPS protocol.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Authorization callback URL"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"https://{HOST}:{PORT}/uat/sso/login/github")),(0,a.kt)("td",{parentName:"tr",align:null},"As in the previous field replace with ",(0,a.kt)("inlineCode",{parentName:"td"},"{HOST}")," and ",(0,a.kt)("inlineCode",{parentName:"td"},"{PORT}")," with your appropriate values.")))),(0,a.kt)("p",null,'Once new application is created, you will have Client ID. Click on "Generate a new client secret" to get Client Secret, but do not close the window until you configure the Authorization on RP, since it will never show you the Secret again.'),(0,a.kt)("h3",{id:"reportportal-configuration"},"ReportPortal configuration"),(0,a.kt)("p",null,"To setup access with GitHub auth on ReportPortal:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,a.kt)("li",{parentName:"ol"},"Open the list on the right of the user's image."),(0,a.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,a.kt)("li",{parentName:"ol"},"Click the 'Server Settings' from the left-hand sidebar"),(0,a.kt)("li",{parentName:"ol"},"Go to the 'Authorization Configuration' tab"),(0,a.kt)("li",{parentName:"ol"},"Then change the switcher position of 'Activate GitHub Authorization' to ON"),(0,a.kt)("li",{parentName:"ol"},"The Next fields should appear:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Client ID': \n'Client Secret': \n'Add GitHub Organization' button-link: (optional)\n")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"In case the 'Organization Name' is not added, all GitHub users will have access to the ReportPortal instance.",(0,a.kt)("br",null),"\nIf the 'Organization Name' is specified, only users of this organization will have an access to ReportPortal instance.",(0,a.kt)("br",null),"\nIf the Name of GitHub organization is not validated, verify that the name is correct.")),(0,a.kt)("p",null,"Example of GitHub auth configuration:\nFill in the form:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Client Id': 8767988c424a0e7a2640\n'Client Secret': ef22c9f804257afaf399a2dada7c8f22dee5fd1b\n'Organization Name': reportportal\n")),(0,a.kt)("p",null,"Click on 'Submit' button.\nA confirmation message in status bar should be shown.\nA 'Login with GitHub' button will appear on login form."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dc2f4bb3.011105a8.js b/assets/js/dc2f4bb3.011105a8.js new file mode 100644 index 000000000..e998510eb --- /dev/null +++ b/assets/js/dc2f4bb3.011105a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4415],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>d});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},h=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,h=i(e,["components","mdxType","originalType","parentName"]),c=u(a),m=o,d=c["".concat(l,".").concat(m)]||c[m]||p[m]||s;return a?n.createElement(d,r(r({ref:t},h),{},{components:a})):n.createElement(d,r({ref:t},h))}));function d(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=a.length,r=new Array(s);r[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:o,r[1]=i;for(var u=2;u{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var n=a(87462),o=(a(67294),a(3905));const s={sidebar_position:5,sidebar_label:"History of launches"},r="History of launches",i={unversionedId:"work-with-reports/HistoryOfLaunches",id:"work-with-reports/HistoryOfLaunches",title:"History of launches",description:"Historical trend of executions",source:"@site/docs/work-with-reports/HistoryOfLaunches.mdx",sourceDirName:"work-with-reports",slug:"/work-with-reports/HistoryOfLaunches",permalink:"/docs/work-with-reports/HistoryOfLaunches",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/work-with-reports/HistoryOfLaunches.mdx",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,sidebar_label:"History of launches"},sidebar:"defaultSidebar",previous:{title:"Investigation of failure",permalink:"/docs/work-with-reports/InvestigationOfFailure"},next:{title:"Test case ID",permalink:"/docs/work-with-reports/TestCaseId"}},l={},u=[{value:"Historical trend of executions",id:"historical-trend-of-executions",level:2},{value:"History table based on Test Case Hash",id:"history-table-based-on-test-case-hash",level:3},{value:"Unique ID history",id:"unique-id-history",level:3},{value:"Test Case Hash history",id:"test-case-hash-history",level:3},{value:"History table",id:"history-table",level:2},{value:"History for all launches",id:"history-for-all-launches",level:3},{value:"History table for launches with the same name",id:"history-table-for-launches-with-the-same-name",level:3},{value:"Actions",id:"actions",level:3},{value:"Compare launch results with the filter",id:"compare-launch-results-with-the-filter",level:4},{value:"Historical line of executions",id:"historical-line-of-executions",level:4},{value:"History across All launches",id:"history-across-all-launches",level:4},{value:"Duration fluctuation",id:"duration-fluctuation",level:4},{value:"Load more History",id:"load-more-history",level:4},{value:"Test Item actions history",id:"test-item-actions-history",level:3}],h={toc:u},c="wrapper";function p(e){let{components:t,...s}=e;return(0,o.kt)(c,(0,n.Z)({},h,s,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"history-of-launches"},"History of launches"),(0,o.kt)("h2",{id:"historical-trend-of-executions"},"Historical trend of executions"),(0,o.kt)("p",null,"The historical trend of executions represents your history view for the list of test items in our test execution dashboard. This feature can help you to find\nthe most unstable test cases in your suites/ launches/ builds."),(0,o.kt)("p",null,'To see a table of the historical trend of executions, navigate to the "Launches" page and drill down to launch structure/ or launch statistics.'),(0,o.kt)("h3",{id:"history-table-based-on-test-case-hash"},"History table based on Test Case Hash"),(0,o.kt)("p",null,"Test case hash is a parameter that is automatically generated based on the Test Case ID (if specified) or the full path to the test."),(0,o.kt)("p",null,"You can read about the Test Case ID ",(0,o.kt)("a",{parentName:"p",href:"/work-with-reports/TestCaseId"},"here"),"."),(0,o.kt)("h3",{id:"unique-id-history"},"Unique ID history"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)"))),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Take the ReportPortal release version 5.2.2 or higher. docker-compose.yml")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add an environment variable to the service-API service:"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"RP_ENVIRONMENT_VARIABLE_HISTORY_OLD=true\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Redeploy ReportPortal")),(0,o.kt)("h3",{id:"test-case-hash-history"},"Test Case Hash history"),(0,o.kt)("p",null,"Run ReportPortal without env variable."),(0,o.kt)("h2",{id:"history-table"},"History table"),(0,o.kt)("p",null,"Where you can find History table."),(0,o.kt)("p",null,"Drill down to the Step view (test executions list). "),(0,o.kt)("p",null,'Click the "History" button.'),(0,o.kt)("p",null,"You will see a historical trend in a table."),(0,o.kt)("p",null,"History trends have the following color scheme:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Red - indicates the launches with failed or interrupted cases")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Green - indicates passed launches")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Yellow \u2013 indicates the launches with several equal test items present within a required level")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Grey - indicates the test item with no descendants in this run.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Animated - still without state ","[in progress]"))),(0,o.kt)("p",null,'You can select the depth of history: 3, 5, 10, 15, 20, 25 or 30 launches from the "History\nDepth" drop-down menu. '),(0,o.kt)("p",null,"There are two options for a History table:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"history for all launches"),(0,o.kt)("li",{parentName:"ul"},"history for launches with the same name")),(0,o.kt)("p",null,'If your are using History table based on Test Case Hash, you will be able to use both of this options.\nIn case you use a history table based on UID, a history table will show you results in mode: "History for launches with the same name".'),(0,o.kt)("h3",{id:"history-for-all-launches"},"History for all launches"),(0,o.kt)("p",null,"If you have configured ReportPortal with ",(0,o.kt)("a",{parentName:"p",href:"./HistoryOfLaunches#history-table"},"TestCase History table"),".\nThis option is for you."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"How you can open a history table with execution from all launches?")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open All launches tab"),(0,o.kt)("li",{parentName:"ul"},"Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics"),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'History'"),(0,o.kt)("li",{parentName:"ul"},"Choose the option '",(0,o.kt)("strong",{parentName:"li"},"All launches'")," in the drop-down 'BASE'")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"What information is shown on the table based on Test Case Hash?")),(0,o.kt)("p",null,"On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from all launches on the project.\nEach column on the history table is equaled to a number of the execution."),(0,o.kt)("p",null,"Let's see an example."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux.\nAfter test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),".\nIf you click on the Total statistic for the launch ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS")," and click on the 'History' button, you will see a History table with all test cases in the suite and their 10 last executions from all launches on the project (e.g. from ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),")"),(0,o.kt)("table",{parentName:"blockquote"},(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Test case name"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #3"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #2"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #1"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 1"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 2"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 3"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")))),(0,o.kt)("p",{parentName:"blockquote"},"When you hover one of the cells on the table, you will be able to see to what launch this execution belongs to.")),(0,o.kt)("media-view",{thumbnail:a(30665),src:"https://youtu.be/m_SkXKgc6NE",alt:"History Table of launches in our test execution dashboard",type:"video"}),(0,o.kt)("h3",{id:"history-table-for-launches-with-the-same-name"},"History table for launches with the same name"),(0,o.kt)("p",null,"If you have configured ReportPortal with ",(0,o.kt)("a",{parentName:"p",href:"./HistoryOfLaunches#history-table"},"TestCase History table")," or with Unique ID ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)")),".\nThis option is for you."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"How you can open a history table with execution launches with the same name?")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open All launches tab"),(0,o.kt)("li",{parentName:"ul"},"Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics"),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'History'"),(0,o.kt)("li",{parentName:"ul"},"Choose the option ",(0,o.kt)("strong",{parentName:"li"},"'Launches with the same name'")," in the drop-down 'BASE'")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},'What information is shown on the table based on Unique ID (deprecated) or Test Case Hash (with option "Launches with the same name"?)')),(0,o.kt)("p",null,"On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from only launches with the same name on the project.\nEach column on the history table is equaled to a number of the execution."),(0,o.kt)("p",null,"Let's see an example."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux.\nAfter test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),".\nIf you click on the Total statistic for the launch ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS")," and click on the 'History' button and you choose the option ",(0,o.kt)("strong",{parentName:"p"},"'Launches with the same name'"),", you will see executions only from launches with name ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS"),"."),(0,o.kt)("table",{parentName:"blockquote"},(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Test case name"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #2"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 1"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 2"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 3"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"))))),(0,o.kt)("media-view",{thumbnail:a(8548),src:"https://youtu.be/DoKW0jFBELo",alt:"History Table launches with the same name",type:"video"}),(0,o.kt)("h3",{id:"actions"},"Actions"),(0,o.kt)("p",null,"From the History table you will be able to perform the next actions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"edit items"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/work-with-reports/InvestigationOfFailure#set-defect-type"},"edit defect")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/work-with-reports/InvestigationOfFailure#post-bug-to-bug-tracking-system"},"post issue")),(0,o.kt)("li",{parentName:"ul"},"link / unlink issue"),(0,o.kt)("li",{parentName:"ul"},"delete items")),(0,o.kt)("p",null,"For that:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Hover the cell on the history table"),(0,o.kt)("li",{parentName:"ul"},"Click on the checkbox"),(0,o.kt)("li",{parentName:"ul"},"Check needed item "),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'Action'"),(0,o.kt)("li",{parentName:"ul"},"Choose needed action")),(0,o.kt)("h4",{id:"compare-launch-results-with-the-filter"},"Compare launch results with the filter"),(0,o.kt)("p",null,"You can add a custom column with the latest filter results to the History table. "),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You run this suite for different versions (version 1, version2, version 3).\nWhen you run tests for the new version you need to find out if new bugs appeared in it in comparison with the previous version.\nYou can create a filter that includes test executions for the previous version (version 2).\nThen you can open a history table for the launch with results for version 3 and add a custom column with the filter 'Version 2'.\nThe system adds the latest executions from filter 'Version 2' and you will be able to compare the latest results for version 2 and version 3.")),(0,o.kt)("media-view",{thumbnail:a(97487),src:"https://youtu.be/trv2f5g62Is",alt:"Compare results of a launch with the filter",type:"video"}),(0,o.kt)("h4",{id:"historical-line-of-executions"},"Historical line of executions"),(0,o.kt)("p",null,"The historical line of executions represents the statuses of the current test case in history."),(0,o.kt)("p",null,"You can see the historical line of executions at the Log level. History is shown only for the\ncurrent item and there are 30 items max in history.\nYou can click on the item in the history and check the results in previous executions, read\nthe comments, find the bugs, posted to this fail.\nThis feature will save you time and help you to understand the reason for your failure."),(0,o.kt)("p",null,"History line has the following color scheme:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Red - failed or interrupted. Contains a link to a related bug (it has it)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Grey - skipped. Contains a link to a related bug (it has it)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Green - passed. Contains only execution number")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Animated - still without state ","[in progress]"))),(0,o.kt)("p",null,"You can mark the current method or case with a defect type, and write a comment\nusing the defect editor block."),(0,o.kt)("p",null,"To come into a certain execution of an appropriate launch, hit a launch number\nabove the item."),(0,o.kt)("p",null,'Also on a History line, you can see an "i" label, it means that the item with this label has a defect comment or/and a link to the Bug Tracking System.'),(0,o.kt)("h4",{id:"history-across-all-launches"},"History across All launches"),(0,o.kt)("p",null,"By default system shows history across Launches with the same name."),(0,o.kt)("p",null,'But you can choose option "History across All Launches" and system will show you executions of the test cases which have been executed in launches with different names.'),(0,o.kt)("p",null,"On hover user can find launch name of test and all launch attributes."),(0,o.kt)("media-view",{thumbnail:a(51948),src:"https://youtu.be/YFzorxQO_S0",alt:"History Line ToolTip in our real time dashboard open source",type:"video"}),(0,o.kt)("h4",{id:"duration-fluctuation"},"Duration fluctuation"),(0,o.kt)("p",null,"If test execution has duration growth in comparison with previous run, the system marks such items with red triangles:"),(0,o.kt)("p",null,"No duration growth - 0 triangles"),(0,o.kt)("p",null,"duration growh from 0 to 20% - 1 triangles"),(0,o.kt)("p",null,"duration growh from 21% - 50% - 2 trianges "),(0,o.kt)("p",null,"duration growh from 51% - 100% - 3 trianges "),(0,o.kt)("p",null,"duration growh from 101% and higher - 4 trianges "),(0,o.kt)("h4",{id:"load-more-history"},"Load more History"),(0,o.kt)("p",null,'By default the system shows 12 latest executions. If you need more history you can click on the button "Load more 9 items and the system loaded more executions on history line. Max number of items on History line is 30 executions. '),(0,o.kt)("p",null,"User can move on History line using horizontal scroll."),(0,o.kt)("h3",{id:"test-item-actions-history"},"Test Item actions history"),(0,o.kt)("p",null,"Test Item actions history will show you the history of actions, which have been made to a\ncertain test item. You can see the kind of activity, and who performed it."),(0,o.kt)("p",null,"The following actions are shown on the history of actions:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user changed defect type of test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user posted a comment to the test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user posted a bug to the Bug Tracking System or added a link to the existing in Bug Tracking System issue.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},' analyzer changed defect type of test item based on the item (where "item" is a link to a log view of an item which has been chosen by Analyzer as the most relevant result)')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," analyzer posted a comment to the test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," analyzer posted a bug to the Bug Tracking System or added a link to the existing in the Bug Tracking System issue. ")),(0,o.kt)("p",null,"To see the history of actions, navigate to a certain child item. By default you\nwill see the last action in one line."),(0,o.kt)("p",null,"Use spoiler to maximize actions history:"),(0,o.kt)("media-view",{thumbnail:a(79483),src:"https://youtu.be/X5u_6rI5V8k",alt:"Action History",type:"video"}))}p.isMDXComponent=!0},97487:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/CompareLaunchResults-7e6d164b1290375ac9dff3661d0a8913.png"},51948:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoricalLineOfExecutions-6a0bc293523fa70ad1cd710608488537.png"},30665:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoryTable-d9c0fdceb236c5b4ec837ea4cb74b0e1.png"},8548:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoryTableSameName-7c814f249742a7d86f447f932fd9b153.png"},79483:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/TestItemActionsHistory-3d029b1afdd281035f285ce1cf2bd8cc.png"}}]); \ No newline at end of file diff --git a/assets/js/dc2f4bb3.e775a227.js b/assets/js/dc2f4bb3.e775a227.js deleted file mode 100644 index 4e79b83b1..000000000 --- a/assets/js/dc2f4bb3.e775a227.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4415],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>d});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},h=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),c=u(a),m=o,d=c["".concat(l,".").concat(m)]||c[m]||p[m]||r;return a?n.createElement(d,i(i({ref:t},h),{},{components:a})):n.createElement(d,i({ref:t},h))}));function d(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var n=a(87462),o=(a(67294),a(3905));const r={sidebar_position:5,sidebar_label:"History of launches"},i="History of launches",s={unversionedId:"work-with-reports/HistoryOfLaunches",id:"work-with-reports/HistoryOfLaunches",title:"History of launches",description:"Historical trend of executions",source:"@site/docs/work-with-reports/HistoryOfLaunches.mdx",sourceDirName:"work-with-reports",slug:"/work-with-reports/HistoryOfLaunches",permalink:"/docs/work-with-reports/HistoryOfLaunches",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/work-with-reports/HistoryOfLaunches.mdx",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,sidebar_label:"History of launches"},sidebar:"defaultSidebar",previous:{title:"Investigation of failure",permalink:"/docs/work-with-reports/InvestigationOfFailure"},next:{title:"Test case ID",permalink:"/docs/work-with-reports/TestCaseId"}},l={},u=[{value:"Historical trend of executions",id:"historical-trend-of-executions",level:2},{value:"History table: Test Case ID or Unique ID",id:"history-table-test-case-id-or-unique-id",level:3},{value:"Difference between Test Case ID and Unique ID",id:"difference-between-test-case-id--and-unique-id",level:3},{value:"Unique ID history",id:"unique-id-history",level:3},{value:"Test Case ID history",id:"test-case-id-history",level:3},{value:"History table",id:"history-table",level:2},{value:"History for all launches",id:"history-for-all-launches",level:3},{value:"History table for launches with the same name",id:"history-table-for-launches-with-the-same-name",level:3},{value:"Actions",id:"actions",level:3},{value:"Compare launch results with the filter",id:"compare-launch-results-with-the-filter",level:4},{value:"Historical line of executions",id:"historical-line-of-executions",level:4},{value:"History across All launches",id:"history-across-all-launches",level:4},{value:"Duration fluctuation",id:"duration-fluctuation",level:4},{value:"Load more History",id:"load-more-history",level:4},{value:"Test Item actions history",id:"test-item-actions-history",level:3}],h={toc:u},c="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},h,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"history-of-launches"},"History of launches"),(0,o.kt)("h2",{id:"historical-trend-of-executions"},"Historical trend of executions"),(0,o.kt)("p",null,"The historical trend of executions represents your history view for the list of test items in our test execution dashboard. This feature can help you to find\nthe most unstable test cases in your suites/ launches/ builds."),(0,o.kt)("p",null,'To see a table of the historical trend of executions, navigate to the "Launches" page and drill down to launch structure/ or launch statistics.'),(0,o.kt)("h3",{id:"history-table-test-case-id-or-unique-id"},"History table: Test Case ID or Unique ID"),(0,o.kt)("p",null,"ReportPortal acquires a lot of real-time test results and you can choose by which parameter you want the history of test results to get defined.\nThere are 2 options:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"by ",(0,o.kt)("a",{parentName:"li",href:"./UniqueId"},"Unique ID")," ",(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"(deprecated/ will be replaced by Test Case ID gradually)"))),(0,o.kt)("li",{parentName:"ul"},"by ",(0,o.kt)("a",{parentName:"li",href:"./TestCaseId"},"Test Case ID")," ")),(0,o.kt)("h3",{id:"difference-between-test-case-id--and-unique-id"},"Difference between Test Case ID and Unique ID"),(0,o.kt)("p",null,"Please find the description of what Test Case ID and Unique by the links:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"./UniqueId"},"UUID")," ",(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"(deprecated/ will be replaced by Test Case ID gradually)"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"./TestCaseId"},"Test Case ID")," ")),(0,o.kt)("p",null,"They are both a unique identifiers of executions uniquness."),(0,o.kt)("p",null,"But Unique ID ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)"))," generates on the base of a launch name where test execution is situated.\nAnd Test Case ID usually doesn't contain a launch name. "),(0,o.kt)("p",null,"So that the main difference between a history table based on Unique ID ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)"))," and Test Case ID is that:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"History on Unique ID ",(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)"))," shows only executions from launches with the same name"),(0,o.kt)("li",{parentName:"ul"},"History on Test Case ID shows executions from all launches.")),(0,o.kt)("h3",{id:"unique-id-history"},"Unique ID history"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated/ will be replaced by Test Case ID gradually)"))),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Take the ReportPortal release version 5.2.2 or higher. docker-compose.yml")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add an environment variable to the service-API service:"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"RP_ENVIRONMENT_VARIABLE_HISTORY_OLD=true\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Redeploy ReportPortal")),(0,o.kt)("h3",{id:"test-case-id-history"},"Test Case ID history"),(0,o.kt)("p",null,"Run ReportPortal without env variable."),(0,o.kt)("h2",{id:"history-table"},"History table"),(0,o.kt)("p",null,"Where you can find History table."),(0,o.kt)("p",null,"Drill down to the Step view (test executions list). "),(0,o.kt)("p",null,'Click the "History" button.'),(0,o.kt)("p",null,"You will see a historical trend in a table."),(0,o.kt)("p",null,"History trends have the following color scheme:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Red - indicates the launches with failed or interrupted cases")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Green - indicates passed launches")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Yellow \u2013 indicates the launches with several equal test items present within a required level")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Grey - indicates the test item with no descendants in this run.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Animated - still without state ","[in progress]"))),(0,o.kt)("p",null,'You can select the depth of history: 3, 5, 10, 15, 20, 25 or 30 launches from the "History\nDepth" drop-down menu. '),(0,o.kt)("p",null,"There are two options for a History table:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"history for all launches"),(0,o.kt)("li",{parentName:"ul"},"history for launches with the same name")),(0,o.kt)("p",null,'If your are using History table based on Test Case ID, you will be able to use both of this options.\nIn case you use a history table based on UID, a history table will show you results in mode: "History for launches with the same name".'),(0,o.kt)("h3",{id:"history-for-all-launches"},"History for all launches"),(0,o.kt)("p",null,"If you have configured ReportPortal with ",(0,o.kt)("a",{parentName:"p",href:"./HistoryOfLaunches#history-table"},"TestCase History table"),".\nThis option is for you."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"How you can open a history table with execution from all launches?")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open All launches tab"),(0,o.kt)("li",{parentName:"ul"},"Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics"),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'History'"),(0,o.kt)("li",{parentName:"ul"},"Choose the option '",(0,o.kt)("strong",{parentName:"li"},"All launches'")," in the drop-down 'BASE'")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"What information is shown on the table based on Test Case ID?")),(0,o.kt)("p",null,"On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from all launches on the project.\nEach column on the history table is equaled to a number of the execution."),(0,o.kt)("p",null,"Let's see an example."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux.\nAfter test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),".\nIf you click on the Total statistic for the launch ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS")," and click on the 'History' button, you will see a History table with all test cases in the suite and their 10 last executions from all launches on the project (e.g. from ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),")"),(0,o.kt)("table",{parentName:"blockquote"},(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Test case name"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #3"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #2"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #1"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 1"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 2"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 3"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")))),(0,o.kt)("p",{parentName:"blockquote"},"When you hover one of the cells on the table, you will be able to see to what launch this execution belongs to.")),(0,o.kt)("media-view",{thumbnail:a(30665),src:"https://youtu.be/m_SkXKgc6NE",alt:"History Table of launches in our test execution dashboard",type:"video"}),(0,o.kt)("h3",{id:"history-table-for-launches-with-the-same-name"},"History table for launches with the same name"),(0,o.kt)("p",null,"If you have configured ReportPortal with ",(0,o.kt)("a",{parentName:"p",href:"./HistoryOfLaunches#history-table"},"TestCase History table")," or with Unique ID ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)")),".\nThis option is for you."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"How you can open a history table with execution launches with the same name?")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open All launches tab"),(0,o.kt)("li",{parentName:"ul"},"Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics"),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'History'"),(0,o.kt)("li",{parentName:"ul"},"Choose the option ",(0,o.kt)("strong",{parentName:"li"},"'Launches with the same name'")," in the drop-down 'BASE'")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},'What information is shown on the table based on Unique ID (deprecated) ot Test Case ID (with option "Launches with the same name"?)')),(0,o.kt)("p",null,"On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from only launches with the same name on the project.\nEach column on the history table is equaled to a number of the execution."),(0,o.kt)("p",null,"Let's see an example."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux.\nAfter test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),".\nIf you click on the Total statistic for the launch ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS")," and click on the 'History' button and you choose the option ",(0,o.kt)("strong",{parentName:"p"},"'Launches with the same name'"),", you will see executions only from launches with name ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS"),"."),(0,o.kt)("table",{parentName:"blockquote"},(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Test case name"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #2"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 1"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 2"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 3"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"))))),(0,o.kt)("media-view",{thumbnail:a(8548),src:"https://youtu.be/DoKW0jFBELo",alt:"History Table launches with the same name",type:"video"}),(0,o.kt)("h3",{id:"actions"},"Actions"),(0,o.kt)("p",null,"From the History table you will be able to perform the next actions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"edit items"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/work-with-reports/InvestigationOfFailure#set-defect-type"},"edit defect")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/work-with-reports/InvestigationOfFailure#post-bug-to-bug-tracking-system"},"post issue")),(0,o.kt)("li",{parentName:"ul"},"link / unlink issue"),(0,o.kt)("li",{parentName:"ul"},"delete items")),(0,o.kt)("p",null,"For that:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Hover the cell on the history table"),(0,o.kt)("li",{parentName:"ul"},"Click on the checkbox"),(0,o.kt)("li",{parentName:"ul"},"Check needed item "),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'Action'"),(0,o.kt)("li",{parentName:"ul"},"Choose needed action")),(0,o.kt)("h4",{id:"compare-launch-results-with-the-filter"},"Compare launch results with the filter"),(0,o.kt)("p",null,"You can add a custom column with the latest filter results to the History table. "),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You run this suite for different versions (version 1, version2, version 3).\nWhen you run tests for the new version you need to find out if new bugs appeared in it in comparison with the previous version.\nYou can create a filter that includes test executions for the previous version (version 2).\nThen you can open a history table for the launch with results for version 3 and add a custom column with the filter 'Version 2'.\nThe system adds the latest executions from filter 'Version 2' and you will be able to compare the latest results for version 2 and version 3.")),(0,o.kt)("media-view",{thumbnail:a(97487),src:"https://youtu.be/trv2f5g62Is",alt:"Compare results of a launch with the filter",type:"video"}),(0,o.kt)("h4",{id:"historical-line-of-executions"},"Historical line of executions"),(0,o.kt)("p",null,"The historical line of executions represents the statuses of the current test case in history."),(0,o.kt)("p",null,"You can see the historical line of executions at the Log level. History is shown only for the\ncurrent item and there are 30 items max in history.\nYou can click on the item in the history and check the results in previous executions, read\nthe comments, find the bugs, posted to this fail.\nThis feature will save you time and help you to understand the reason for your failure."),(0,o.kt)("p",null,"History line has the following color scheme:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Red - failed or interrupted. Contains a link to a related bug (it has it)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Grey - skipped. Contains a link to a related bug (it has it)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Green - passed. Contains only execution number")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Animated - still without state ","[in progress]"))),(0,o.kt)("p",null,"You can mark the current method or case with a defect type, and write a comment\nusing the defect editor block."),(0,o.kt)("p",null,"To come into a certain execution of an appropriate launch, hit a launch number\nabove the item."),(0,o.kt)("p",null,'Also on a History line, you can see an "i" label, it means that the item with this label has a defect comment or/and a link to the Bug Tracking System.'),(0,o.kt)("h4",{id:"history-across-all-launches"},"History across All launches"),(0,o.kt)("p",null,"By default system shows history across Launches with the same name."),(0,o.kt)("p",null,'But you can choose option "History across All Launches" and system will show you executions of the test cases which have been executed in launches with different names.'),(0,o.kt)("p",null,"On hover user can find launch name of test and all launch attributes."),(0,o.kt)("media-view",{thumbnail:a(51948),src:"https://youtu.be/YFzorxQO_S0",alt:"History Line ToolTip in our real time dashboard open source",type:"video"}),(0,o.kt)("h4",{id:"duration-fluctuation"},"Duration fluctuation"),(0,o.kt)("p",null,"If test execution has duration growth in comparison with previous run, the system marks such items with red triangles:"),(0,o.kt)("p",null,"No duration growth - 0 triangles"),(0,o.kt)("p",null,"duration growh from 0 to 20% - 1 triangles"),(0,o.kt)("p",null,"duration growh from 21% - 50% - 2 trianges "),(0,o.kt)("p",null,"duration growh from 51% - 100% - 3 trianges "),(0,o.kt)("p",null,"duration growh from 101% and higher - 4 trianges "),(0,o.kt)("h4",{id:"load-more-history"},"Load more History"),(0,o.kt)("p",null,'By default the system shows 12 latest executions. If you need more history you can click on the button "Load more 9 items and the system loaded more executions on history line. Max number of items on History line is 30 executions. '),(0,o.kt)("p",null,"User can move on History line using horizontal scroll."),(0,o.kt)("h3",{id:"test-item-actions-history"},"Test Item actions history"),(0,o.kt)("p",null,"Test Item actions history will show you the history of actions, which have been made to a\ncertain test item. You can see the kind of activity, and who performed it."),(0,o.kt)("p",null,"The following actions are shown on the history of actions:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user changed defect type of test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user posted a comment to the test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user posted a bug to the Bug Tracking System or added a link to the existing in Bug Tracking System issue.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},' analyzer changed defect type of test item based on the item (where "item" is a link to a log view of an item which has been chosen by Analyzer as the most relevant result)')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," analyzer posted a comment to the test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," analyzer posted a bug to the Bug Tracking System or added a link to the existing in the Bug Tracking System issue. ")),(0,o.kt)("p",null,"To see the history of actions, navigate to a certain child item. By default you\nwill see the last action in one line."),(0,o.kt)("p",null,"Use spoiler to maximize actions history:"),(0,o.kt)("media-view",{thumbnail:a(79483),src:"https://youtu.be/X5u_6rI5V8k",alt:"Action History",type:"video"}))}p.isMDXComponent=!0},97487:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/CompareLaunchResults-7e6d164b1290375ac9dff3661d0a8913.png"},51948:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoricalLineOfExecutions-6a0bc293523fa70ad1cd710608488537.png"},30665:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoryTable-d9c0fdceb236c5b4ec837ea4cb74b0e1.png"},8548:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoryTableSameName-7c814f249742a7d86f447f932fd9b153.png"},79483:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/TestItemActionsHistory-3d029b1afdd281035f285ce1cf2bd8cc.png"}}]); \ No newline at end of file diff --git a/assets/js/dc8f36d8.4e8837df.js b/assets/js/dc8f36d8.4e8837df.js new file mode 100644 index 000000000..c403770e3 --- /dev/null +++ b/assets/js/dc8f36d8.4e8837df.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6863],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=r.createContext({}),s=function(e){var t=r.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},u=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(a),c=n,k=m["".concat(p,".").concat(c)]||m[c]||d[c]||i;return a?r.createElement(k,o(o({ref:t},u),{},{components:a})):r.createElement(k,o({ref:t},u))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[m]="string"==typeof e?e:n,o[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_label:"SAML Provider"},o="SAML provider",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/index",id:"reportportal-configuration/authorization/SAMLProvider/index",title:"SAML provider",description:"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/index.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/index.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"SAML Provider"},sidebar:"defaultSidebar",previous:{title:"LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP"},next:{title:"Azure SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML"}},p={},s=[{value:"SAML provider requirements",id:"saml-provider-requirements",level:2},{value:"Add integration",id:"add-integration",level:2},{value:"Set up connection",id:"set-up-connection",level:2},{value:"Identity provider configuration",id:"identity-provider-configuration",level:3},{value:"ReportPortal SSO initial URL",id:"reportportal-sso-initial-url",level:4},{value:"Identifier",id:"identifier",level:4},{value:"Custom attribute as claims in token",id:"custom-attribute-as-claims-in-token",level:4},{value:"ReportPortal configuration",id:"reportportal-configuration",level:3}],u={toc:s},m="wrapper";function d(e){let{components:t,...i}=e;return(0,n.kt)(m,(0,r.Z)({},u,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"saml-provider"},"SAML provider"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,n.kt)("p",null,"This plugin allows you to configure a connection with a SAML provider."),(0,n.kt)("p",null,"Integration with SAML will allow you to login into ReportPortal using SSO instead of tedious manual user creation."),(0,n.kt)("p",null,"The plugin provides a mechanism to exchange information between ReportPortal and SAML provider, such as the possibility to login to ReportPortal with SAML credentials."),(0,n.kt)("h2",{id:"saml-provider-requirements"},"SAML provider requirements"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"SAML 2.0 version"),(0,n.kt)("li",{parentName:"ul"},"HTTP-POST Binding"),(0,n.kt)("li",{parentName:"ul"},"URL to download ",(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/SAML_metadata#Identity_provider_metadata"},"SAML IdP Metadata")),(0,n.kt)("li",{parentName:"ul"},"HTTPS connection for SAML Metadata"),(0,n.kt)("li",{parentName:"ul"},"Support SAML attributes:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"email"),(0,n.kt)("li",{parentName:"ul"},"first name"),(0,n.kt)("li",{parentName:"ul"},"last name"),(0,n.kt)("li",{parentName:"ul"},"full name (instead first and last name)")))),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"There are detailed manuals for configuration of ",(0,n.kt)("a",{parentName:"p",href:"./AzureSAML"},"Azure SAML")," and ",(0,n.kt)("a",{parentName:"p",href:"./OktaSAML"},"Okta SAML"),".")),(0,n.kt)("h2",{id:"add-integration"},"Add integration"),(0,n.kt)("p",null,"ReportPortal contains the SAML Plugin by default."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Go to ",(0,n.kt)("inlineCode",{parentName:"li"},"Administration")," -> ",(0,n.kt)("inlineCode",{parentName:"li"},"Plugins")," -> ",(0,n.kt)("inlineCode",{parentName:"li"},"SAML")),(0,n.kt)("li",{parentName:"ol"},"Select ",(0,n.kt)("inlineCode",{parentName:"li"},"Add integration"),".")),(0,n.kt)("h2",{id:"set-up-connection"},"Set up connection"),(0,n.kt)("h3",{id:"identity-provider-configuration"},"Identity provider configuration"),(0,n.kt)("h4",{id:"reportportal-sso-initial-url"},"ReportPortal SSO initial URL"),(0,n.kt)("p",null,"You need to provide a URL for a SAML Provider to deliver SAML data for the identity federation."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-url"},"https:///uat/saml/sp/SSO/alias/report-portal-sp\n")),(0,n.kt)("h4",{id:"identifier"},"Identifier"),(0,n.kt)("p",null,"Set up identifier (aka Audience Restriction, aka Entity ID) for application as ",(0,n.kt)("inlineCode",{parentName:"p"},"report.portal.sp.id"),".\nYou can specify personal Entity id when you deploy the Authorization service by environment variable ",(0,n.kt)("inlineCode",{parentName:"p"},"RP_AUTH_SAML_ENTITYID"),"."),(0,n.kt)("h4",{id:"custom-attribute-as-claims-in-token"},"Custom attribute as claims in token"),(0,n.kt)("p",null,"The IDp app user profile must provide attributes like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"- user.email\n- user.firstName\n- user.lastName\n")),(0,n.kt)("p",null,"Also, Make sure there is a mapping created according to the values that you use in the ReportPortal SAML plugin like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"- user.email -> Email\n- user.firstName -> FirstName\n- user.lastName -> LastName\n")),(0,n.kt)("h3",{id:"reportportal-configuration"},"ReportPortal configuration"),(0,n.kt)("media-view",{src:a(62163),alt:"SAML plugin configuration to integrate with our qa automation dashboard"}),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Identity provider name ID (Optional)"))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Identity provider name ID")," (aka name identifier formats) controls how the users at identity providers are mapped to users at service providers."),(0,n.kt)("p",null,"We support next formats:"),(0,n.kt)("p",null,"UNSPECIFIED - used by default"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\n")),(0,n.kt)("p",null,"EMAIL"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\n")),(0,n.kt)("p",null,"PERSISTENT"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Provider name"))," - Provider name associated with IDP."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Metadata URL"))," - URL that provides data with information about SAML Provider."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Email"))," - Attribute name from SAML metadata which contains an user email."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\n neuromancer@cyberspace.net\n \n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"ReportPortal Callback URL (Optional)"))," - This field provides a redirect base path."),(0,n.kt)("p",null,"Once you have submitted an integration with \u201cRP callback URL\u201d, the URL will be applied to all SAML integrations."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-url"},"https:///uat\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"First name"))," - Attribute name from SAML metadata which contains an user first/given name."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nWilliam\n\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Last name"))," - Attribute name from SAML metadata which contains an user last/family name."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nGibson\n\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Full name"))," - Attribute name from SAML metadata which contains a full user name. You can use either two separate attributes for first name and last name or a combined first and last name attribute. This solely depends on your SAML provider."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nWilliam Gibson\n\n')))}d.isMDXComponent=!0},62163:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/SAMLPlugin-6444da5543c5fcdb3a7fdd0d5013136d.png"}}]); \ No newline at end of file diff --git a/assets/js/dc8f36d8.bb175eed.js b/assets/js/dc8f36d8.bb175eed.js deleted file mode 100644 index 2dad12666..000000000 --- a/assets/js/dc8f36d8.bb175eed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6863],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>k});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=r.createContext({}),u=function(e){var t=r.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),m=u(a),c=n,k=m["".concat(p,".").concat(c)]||m[c]||d[c]||i;return a?r.createElement(k,o(o({ref:t},s),{},{components:a})):r.createElement(k,o({ref:t},s))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[m]="string"==typeof e?e:n,o[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_label:"SAML Provider"},o="SAML provider",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/index",id:"reportportal-configuration/authorization/SAMLProvider/index",title:"SAML provider",description:"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/index.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/index.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"SAML Provider"},sidebar:"defaultSidebar",previous:{title:"LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP"},next:{title:"Azure SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML"}},p={},u=[{value:"SAML provider requirements",id:"saml-provider-requirements",level:2},{value:"Add integration",id:"add-integration",level:2},{value:"Set up connection",id:"set-up-connection",level:2},{value:"Identity provider configuration",id:"identity-provider-configuration",level:3},{value:"ReportPortal SSO initial URL",id:"reportportal-sso-initial-url",level:4},{value:"Identifier",id:"identifier",level:4},{value:"Custom attribute as claims in token",id:"custom-attribute-as-claims-in-token",level:4},{value:"ReportPortal configuration",id:"reportportal-configuration",level:3}],s={toc:u},m="wrapper";function d(e){let{components:t,...i}=e;return(0,n.kt)(m,(0,r.Z)({},s,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"saml-provider"},"SAML provider"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,n.kt)("p",null,"This plugin allows you to configure a connection with a SAML provider."),(0,n.kt)("p",null,"Integration with SAML will allow you to login into ReportPortal using SSO instead of tedious manual user creation."),(0,n.kt)("p",null,"The plugin provides a mechanism to exchange information between ReportPortal and SAML provider, such as the possibility to login to ReportPortal with SAML credentials."),(0,n.kt)("h2",{id:"saml-provider-requirements"},"SAML provider requirements"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"SAML 2.0 version"),(0,n.kt)("li",{parentName:"ul"},"HTTP-POST Binding"),(0,n.kt)("li",{parentName:"ul"},"URL to download ",(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/SAML_metadata#Identity_provider_metadata"},"SAML IdP Metadata")),(0,n.kt)("li",{parentName:"ul"},"HTTPS connection for SAML Metadata"),(0,n.kt)("li",{parentName:"ul"},"Support SAML attributes:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"email"),(0,n.kt)("li",{parentName:"ul"},"first name"),(0,n.kt)("li",{parentName:"ul"},"last name"),(0,n.kt)("li",{parentName:"ul"},"full name (instead first and last name)")))),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"There are detailed manuals for configuration of ",(0,n.kt)("a",{parentName:"p",href:"./AzureSAML"},"Azure SAML")," and ",(0,n.kt)("a",{parentName:"p",href:"./OktaSAML"},"Okta SAML"),".")),(0,n.kt)("h2",{id:"add-integration"},"Add integration"),(0,n.kt)("p",null,"ReportPortal contains the SAML Plugin by default."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Go to ",(0,n.kt)("inlineCode",{parentName:"p"},"Administration")," -> ",(0,n.kt)("inlineCode",{parentName:"p"},"Plugins")," -> ",(0,n.kt)("inlineCode",{parentName:"p"},"SAML"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Select ",(0,n.kt)("inlineCode",{parentName:"p"},"Add integration"),"."))),(0,n.kt)("h2",{id:"set-up-connection"},"Set up connection"),(0,n.kt)("h3",{id:"identity-provider-configuration"},"Identity provider configuration"),(0,n.kt)("h4",{id:"reportportal-sso-initial-url"},"ReportPortal SSO initial URL"),(0,n.kt)("p",null,"You need to provide a URL for a SAML Provider to deliver SAML data for the identity federation."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-url"},"https:///uat/saml/sp/SSO/alias/report-portal-sp\n")),(0,n.kt)("h4",{id:"identifier"},"Identifier"),(0,n.kt)("p",null,"Set up identifier (aka Audience Restriction, aka Entity ID) for application as ",(0,n.kt)("inlineCode",{parentName:"p"},"report.portal.sp.id"),".\nYou can specify personal Entity id when you deploy the Authorization service by environment variable ",(0,n.kt)("inlineCode",{parentName:"p"},"RP_AUTH_SAML_ENTITYID"),"."),(0,n.kt)("h4",{id:"custom-attribute-as-claims-in-token"},"Custom attribute as claims in token"),(0,n.kt)("p",null,"The IDp app user profile must provide attributes like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"- user.email\n- user.firstName\n- user.lastName\n")),(0,n.kt)("p",null,"Also, Make sure there is a mapping created according to the values that you use in the ReportPortal SAML plugin like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"- user.email -> Email\n- user.firstName -> FirstName\n- user.lastName -> LastName\n")),(0,n.kt)("h3",{id:"reportportal-configuration"},"ReportPortal configuration"),(0,n.kt)("media-view",{src:a(62163),alt:"SAML plugin configuration to integrate with our qa automation dashboard"}),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Identity provider name ID (Optional)"))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Identity provider name ID")," (aka name identifier formats) controls how the users at identity providers are mapped to users at service providers."),(0,n.kt)("p",null,"We support next formats:"),(0,n.kt)("p",null,"UNSPECIFIED - used by default"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\n")),(0,n.kt)("p",null,"EMAIL"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\n")),(0,n.kt)("p",null,"PERSISTENT"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Provider name"))),(0,n.kt)("p",null,"Provider name associated with IDP."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Metadata URL"))),(0,n.kt)("p",null,"URL that provides data with information about SAML Provider."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Email"))),(0,n.kt)("p",null,"Attribute name from SAML metadata which contains an user email."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\n neuromancer@cyberspace.net\n \n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"ReportPortal Callback URL (Optional)"))),(0,n.kt)("p",null,"This field provides a redirect base path."),(0,n.kt)("p",null,"Once you have submitted an integration with \u201cRP callback URL\u201d, the URL will be applied to all SAML integrations."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-url"},"https:///uat\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"First name"))),(0,n.kt)("p",null,"Attribute name from SAML metadata which contains an user first/given name."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nWilliam\n\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Last name"))),(0,n.kt)("p",null,"Attribute name from SAML metadata which contains an user last/family name."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nGibson\n\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Full name"))),(0,n.kt)("p",null,"Attribute name from SAML metadata which contains a full user name. You can use either two separate attributes for first name and last name or a combined first and last name attribute. This solely depends on your SAML provider."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nWilliam Gibson\n\n')))}d.isMDXComponent=!0},62163:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/SAMLPlugin-6444da5543c5fcdb3a7fdd0d5013136d.png"}}]); \ No newline at end of file diff --git a/assets/js/de98de14.484f49ed.js b/assets/js/de98de14.484f49ed.js new file mode 100644 index 000000000..44eeffb33 --- /dev/null +++ b/assets/js/de98de14.484f49ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4953],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>m});var n=r(67294);function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var p=n.createContext({}),c=function(t){var e=n.useContext(p),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=c(t.components);return n.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},f=n.forwardRef((function(t,e){var r=t.components,o=t.mdxType,a=t.originalType,p=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),s=c(r),f=o,m=s["".concat(p,".").concat(f)]||s[f]||d[f]||a;return r?n.createElement(m,i(i({ref:e},u),{},{components:r})):n.createElement(m,i({ref:e},u))}));function m(t,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:o,i[1]=l;for(var c=2;c{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_label:"LDAP"},i="LDAP",l={unversionedId:"reportportal-configuration/authorization/LDAP",id:"reportportal-configuration/authorization/LDAP",title:"LDAP",description:"LDAP plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/LDAP.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/LDAP.md",tags:[],version:"current",frontMatter:{sidebar_label:"LDAP"},sidebar:"defaultSidebar",previous:{title:"GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub"},next:{title:"SAML Provider",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/"}},p={},c=[],u={toc:c},s="wrapper";function d(t){let{components:e,...r}=t;return(0,o.kt)(s,(0,n.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ldap"},"LDAP"),(0,o.kt)("p",null,"LDAP plugin is available in ReportPortal on the Plugins page."),(0,o.kt)("p",null,"To set up access with LDAP:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,o.kt)("li",{parentName:"ol"},"Then open the list on the right of the user's image."),(0,o.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,o.kt)("li",{parentName:"ol"},"Click the 'Plugins' from the left-hand sidebar"),(0,o.kt)("li",{parentName:"ol"},"Click on the'LDAP' tab."),(0,o.kt)("li",{parentName:"ol"},"Click on Add new integration"),(0,o.kt)("li",{parentName:"ol"},"The next fields should be present:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"'URL*': text\n'Base DN*': text\n'Manager DN': text\n'Manager password': text\n'User DN pattern': text\n'User search filter': text\n'Group search base': text\n'Group search filter': text\n'Password encoder type': text\n'Email attribute*': text\n'Full name attribute' : text\n'Photo attribute' : text\n")),(0,o.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of LDAP will have access to the ReportPortal instance. For access to the ReportPortal, the user should use their domain credentials (Login and password)."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/de98de14.6a3df179.js b/assets/js/de98de14.6a3df179.js deleted file mode 100644 index 0dfb05f6b..000000000 --- a/assets/js/de98de14.6a3df179.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4953],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>m});var n=r(67294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var p=n.createContext({}),c=function(t){var e=n.useContext(p),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=c(t.components);return n.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},f=n.forwardRef((function(t,e){var r=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),s=c(r),f=a,m=s["".concat(p,".").concat(f)]||s[f]||d[f]||o;return r?n.createElement(m,i(i({ref:e},u),{},{components:r})):n.createElement(m,i({ref:e},u))}));function m(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=r.length,i=new Array(o);i[0]=f;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:a,i[1]=l;for(var c=2;c{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_label:"LDAP"},i="LDAP",l={unversionedId:"reportportal-configuration/authorization/LDAP",id:"reportportal-configuration/authorization/LDAP",title:"LDAP",description:"LDAP plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/LDAP.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/LDAP.md",tags:[],version:"current",frontMatter:{sidebar_label:"LDAP"},sidebar:"defaultSidebar",previous:{title:"GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub"},next:{title:"SAML Provider",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/"}},p={},c=[],u={toc:c},s="wrapper";function d(t){let{components:e,...r}=t;return(0,a.kt)(s,(0,n.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"ldap"},"LDAP"),(0,a.kt)("p",null,"LDAP plugin is available in ReportPortal on the Plugins page."),(0,a.kt)("p",null,"To set up access with LDAP:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Log in to the ReportPortal as an ADMIN user")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Then open the list on the right of the user's image.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click the 'Administrative' link")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click the 'Plugins' from the left-hand sidebar")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click on the'LDAP' tab.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click on Add new integration")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"The next fields should be present:"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'URL*': text\n'Base DN*': text\n'Manager DN': text\n'Manager password': text\n'User DN pattern': text\n'User search filter': text\n'Group search base': text\n'Group search filter': text\n'Password encoder type': text\n'Email attribute*': text\n'Full name attribute' : text\n'Photo attribute' : text\n")),(0,a.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of LDAP will have access to the ReportPortal instance. For access to the ReportPortal, the user should use their domain credentials (Login and password)."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.c10e0a5c.js b/assets/js/runtime~main.a58c9405.js similarity index 73% rename from assets/js/runtime~main.c10e0a5c.js rename to assets/js/runtime~main.a58c9405.js index 2771c4a58..5f2a4bbb3 100644 --- a/assets/js/runtime~main.c10e0a5c.js +++ b/assets/js/runtime~main.a58c9405.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,d,b,c={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=c,r.c=t,e=[],r.O=(f,a,d,b)=>{if(!a){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,d,b]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};f=f||[null,a({}),a([]),a(a)];for(var t=2&d&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>c[f]=()=>e[f]));return c.default=()=>e,r.d(b,c),b},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({26:"9bf2f1ad",38:"b02e6e62",39:"6417b00a",53:"935f2afb",102:"855c8e88",104:"527a0828",150:"54146d47",195:"5aa350ff",225:"5668619f",367:"74cbe0b8",376:"c9eb37d0",414:"306aee24",452:"295d89fa",529:"a11133f1",562:"7a770024",570:"a7f8e40f",720:"dffd512f",742:"37a6abbb",747:"07d78bf6",757:"9ce9f59c",795:"78dfb7e9",862:"ba4cd107",963:"bf477335",973:"f7444008",1006:"069ddc90",1219:"ac3f047d",1320:"849f9212",1392:"41a0b225",1413:"71498ad5",1434:"3938886d",1451:"ea56d3e1",1472:"6efd3b1f",1490:"7821a10c",1510:"a74ebc46",1562:"bc969540",1613:"6e16c901",1627:"ef851841",1688:"37e2c88f",1904:"a76ff2eb",1985:"98ca32ed",1995:"0a099a4f",2024:"ab510b4f",2066:"661e81a0",2106:"33580f2e",2147:"220207ff",2169:"267ccbc6",2253:"23a9762f",2297:"1da087e0",2310:"2a424e83",2346:"ff6a9465",2439:"5ce704b9",2471:"68053dc3",2483:"9c874da5",2516:"98a1fcd9",2539:"5e24e3bc",2629:"5c2df135",2630:"1e1599cb",2654:"06de0160",2719:"98b03dc7",2720:"396f0464",2813:"61d84721",2822:"4b05701a",3079:"269e975a",3082:"d26eef7b",3155:"9a364eec",3197:"befb6058",3322:"a573d8f7",3360:"7bd95ec4",3466:"00dd8e60",3477:"7de4166c",3540:"fb391353",3588:"cf1f907d",3608:"8a0d7266",3653:"d09084ee",3731:"d008ba81",3854:"ea49187a",3885:"338561f9",3892:"e1b7d783",3931:"7d141066",3938:"fea2b63c",3962:"cf84801a",3969:"11ffa791",4021:"6bc80c47",4143:"d331ba2f",4216:"17e33bf8",4415:"dc2f4bb3",4472:"84982dca",4485:"8dc7c7b8",4580:"3d7d2ef4",4585:"e2f45cda",4587:"0225d014",4612:"bebf2496",4695:"855239bf",4708:"ed9ad71b",4735:"ec038b21",4772:"bc209e08",4946:"00e97bf6",4953:"de98de14",5069:"a0d375c1",5090:"46ef8a18",5106:"145e5b9f",5114:"05bac479",5165:"24ad2548",5170:"be477480",5212:"72119d79",5222:"5718d6db",5261:"da84d3ce",5296:"086e8e8b",5326:"73bb90fb",5355:"925c0b5c",5398:"1a613e91",5400:"2baa0d2f",5414:"a830598a",5421:"53e81573",5445:"84d47c34",5449:"c7b25a99",5635:"4859ca05",5711:"28b23d2a",5792:"bdb17ab6",6002:"a89000ee",6027:"6ef1a459",6059:"910d5a4e",6066:"b3bfe149",6086:"e5386a75",6255:"882bd5c3",6325:"40be41a9",6329:"c7dff32f",6365:"47aa7b91",6385:"59b068d1",6412:"84e29575",6635:"bc0c4574",6636:"a68ea571",6797:"dbee08c0",6863:"dc8f36d8",7062:"b8e550c7",7100:"c3038888",7145:"eebb9f3e",7186:"e429fb18",7213:"7236dcb4",7260:"4656db35",7318:"7bbaf234",7330:"dadf679c",7537:"a4179dd8",7543:"6063f56a",7727:"a194bf09",7762:"85d780d7",7810:"17cee6e7",7811:"e378912b",7819:"35b6bff0",7868:"914c5fe7",7918:"17896441",7920:"1a4e3797",7979:"e9a76c81",8007:"8272edfd",8010:"24317c98",8069:"81bc17b9",8105:"d9fb2f5f",8193:"146035e7",8270:"3c7c043e",8448:"69cd44f6",8467:"fd64f10f",8633:"abf83c96",8658:"58f41459",8734:"7ef0b1f8",8760:"c84a9109",8834:"c8588910",8877:"60ab5c4c",8893:"fbe4c47e",8916:"8fda0747",8934:"525802b3",9052:"69c1213a",9063:"c60355ff",9106:"5200637f",9145:"63a8a649",9168:"027cf034",9222:"3c75ee7d",9272:"a6ef86a7",9292:"d5397252",9314:"0e3ba2c6",9334:"247783bb",9413:"07801322",9417:"00685d85",9509:"ca88c6ba",9514:"1be78505",9671:"0e384e19",9714:"1f98178b",9721:"db699483",9764:"2e91390a",9779:"fb2c10d0",9817:"14eb3368",9836:"39df2a2d",9944:"67854d34",9998:"3ac6333e"}[e]||e)+"."+{26:"6ee6df48",38:"25dbb0a5",39:"db0f7227",53:"c410e8a9",102:"c1d3dab3",104:"69a2b6b8",150:"d7d0926b",195:"8bf681a0",225:"72782681",367:"e48d7d06",376:"e0510c28",414:"8940b5d5",452:"2d0a34f5",529:"37973ca6",562:"8d8c12a3",570:"4f4c44ea",720:"55cab5bf",742:"4d967d0b",747:"2478ee7b",757:"b751fb80",795:"b4234a42",862:"418f3bd4",963:"c38ae492",973:"79855f17",1006:"2cf3ff86",1219:"02dbc5b7",1320:"d0e2d40e",1392:"4ea0db8e",1413:"bc3d8477",1434:"c7a4d03c",1451:"b2ecce3d",1472:"234e467d",1490:"2165cfdf",1510:"8a5eb4ad",1562:"e06cd197",1613:"14e9eca4",1627:"8c55abdf",1688:"b472ecf2",1904:"25258038",1949:"e89740ad",1985:"8c7dbcc3",1995:"18f4548d",2024:"e57a2cac",2066:"14f8298d",2106:"5e68215f",2147:"b1f81382",2169:"a61ed3eb",2253:"882f27ab",2297:"4aba8fae",2310:"0ed5e133",2346:"d4bf8fd2",2439:"ecd97376",2471:"22ba9fcb",2483:"f13a94f6",2516:"2d13f844",2539:"753efd8a",2629:"bf3a0a82",2630:"05b73ec0",2654:"bb24bebb",2719:"46b7f948",2720:"e164a7a0",2813:"a59096f1",2822:"4d559ede",3079:"9122047a",3082:"2ae052c7",3155:"2dbd5eaf",3197:"b9b03ab0",3322:"ada0be0e",3360:"9bd7a5e4",3466:"e5818a8e",3477:"e391f6ae",3540:"c9937d51",3588:"ba8093a8",3608:"8378c4fd",3653:"449dca62",3731:"d2d17dbc",3854:"8f8eccdc",3885:"3a34a919",3892:"49ed9e3f",3931:"7c68e7ab",3938:"e7da601d",3962:"d0a15929",3969:"ead65a90",4021:"76d4b7c3",4143:"a4d13ab0",4216:"704a22c2",4415:"e775a227",4472:"73212368",4483:"dd6f4c67",4485:"9630363d",4580:"ef590e62",4585:"a875facb",4587:"2593e756",4612:"4550cabf",4695:"16c42d4f",4708:"723dc706",4735:"39315364",4772:"64a09734",4946:"2c67a4b7",4953:"6a3df179",5069:"cad12094",5090:"5bb085e8",5106:"c7833d51",5114:"2eda4c43",5165:"0383fd6a",5170:"20d85d6e",5212:"3cd30d3e",5222:"e67d1cf3",5261:"37925ae8",5296:"3c1a2d2c",5326:"6ea26858",5355:"1e0b67bb",5398:"08dd51e1",5400:"822ffc1a",5414:"4fd1d6d5",5421:"62730e04",5445:"b4bf663a",5449:"68c091cf",5635:"63bb2a27",5711:"7b95556c",5792:"fbdff6bb",6002:"832e026a",6027:"8a6685fe",6059:"1131599e",6066:"736f214a",6086:"d986e717",6255:"f499efc6",6325:"6445dfd1",6329:"3f0cae1d",6365:"0a9d5509",6385:"5a3ae9cd",6412:"5f71aa97",6635:"eeec2ec3",6636:"295d7694",6797:"7f7419e3",6798:"07cc0f1a",6863:"bb175eed",6945:"5f538c43",7062:"c2c077f2",7100:"8ba87a9d",7145:"6bbe307d",7186:"16239f67",7213:"a1eb159f",7260:"b9ab1777",7318:"b36d1256",7330:"8551e18f",7537:"6ba3cd60",7543:"ce33bac3",7727:"f8c3b35c",7762:"86cfaa25",7810:"abbf84b1",7811:"a94f7506",7819:"f771775e",7868:"7441f7f0",7918:"6e1eeb6f",7920:"1e9d3f1b",7979:"9d167bdd",8007:"96bb7f0a",8010:"84b1a128",8069:"ab64e3ed",8105:"654d919c",8193:"952539e2",8270:"a0014bc8",8382:"33a3e703",8448:"b3aaed4f",8467:"a0cb28ff",8633:"ffefd990",8658:"f2c58039",8734:"d32f0fd4",8760:"b62319bd",8834:"404cde65",8877:"2f835953",8893:"c936a38a",8894:"1b69866b",8916:"75559028",8934:"b0c0f464",9052:"986e9e16",9063:"e76f313e",9106:"36712c92",9145:"56a85afc",9168:"23e9fced",9222:"098d4938",9272:"ad4b3729",9292:"dc7c1c76",9314:"95c6177b",9334:"b669e8d5",9413:"c2c4fde8",9417:"43db1677",9509:"d2f35955",9514:"f143f5a3",9671:"fb41a6cf",9714:"3be9e931",9721:"db9fa5b0",9764:"9e2e6e32",9779:"188159e2",9817:"1e4fec31",9836:"280bbbea",9944:"56b17b3c",9998:"d344e8e4"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),d={},b="documentation:",r.l=(e,f,a,c)=>{if(d[e])d[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/docs/",r.gca=function(e){return e={17896441:"7918","9bf2f1ad":"26",b02e6e62:"38","6417b00a":"39","935f2afb":"53","855c8e88":"102","527a0828":"104","54146d47":"150","5aa350ff":"195","5668619f":"225","74cbe0b8":"367",c9eb37d0:"376","306aee24":"414","295d89fa":"452",a11133f1:"529","7a770024":"562",a7f8e40f:"570",dffd512f:"720","37a6abbb":"742","07d78bf6":"747","9ce9f59c":"757","78dfb7e9":"795",ba4cd107:"862",bf477335:"963",f7444008:"973","069ddc90":"1006",ac3f047d:"1219","849f9212":"1320","41a0b225":"1392","71498ad5":"1413","3938886d":"1434",ea56d3e1:"1451","6efd3b1f":"1472","7821a10c":"1490",a74ebc46:"1510",bc969540:"1562","6e16c901":"1613",ef851841:"1627","37e2c88f":"1688",a76ff2eb:"1904","98ca32ed":"1985","0a099a4f":"1995",ab510b4f:"2024","661e81a0":"2066","33580f2e":"2106","220207ff":"2147","267ccbc6":"2169","23a9762f":"2253","1da087e0":"2297","2a424e83":"2310",ff6a9465:"2346","5ce704b9":"2439","68053dc3":"2471","9c874da5":"2483","98a1fcd9":"2516","5e24e3bc":"2539","5c2df135":"2629","1e1599cb":"2630","06de0160":"2654","98b03dc7":"2719","396f0464":"2720","61d84721":"2813","4b05701a":"2822","269e975a":"3079",d26eef7b:"3082","9a364eec":"3155",befb6058:"3197",a573d8f7:"3322","7bd95ec4":"3360","00dd8e60":"3466","7de4166c":"3477",fb391353:"3540",cf1f907d:"3588","8a0d7266":"3608",d09084ee:"3653",d008ba81:"3731",ea49187a:"3854","338561f9":"3885",e1b7d783:"3892","7d141066":"3931",fea2b63c:"3938",cf84801a:"3962","11ffa791":"3969","6bc80c47":"4021",d331ba2f:"4143","17e33bf8":"4216",dc2f4bb3:"4415","84982dca":"4472","8dc7c7b8":"4485","3d7d2ef4":"4580",e2f45cda:"4585","0225d014":"4587",bebf2496:"4612","855239bf":"4695",ed9ad71b:"4708",ec038b21:"4735",bc209e08:"4772","00e97bf6":"4946",de98de14:"4953",a0d375c1:"5069","46ef8a18":"5090","145e5b9f":"5106","05bac479":"5114","24ad2548":"5165",be477480:"5170","72119d79":"5212","5718d6db":"5222",da84d3ce:"5261","086e8e8b":"5296","73bb90fb":"5326","925c0b5c":"5355","1a613e91":"5398","2baa0d2f":"5400",a830598a:"5414","53e81573":"5421","84d47c34":"5445",c7b25a99:"5449","4859ca05":"5635","28b23d2a":"5711",bdb17ab6:"5792",a89000ee:"6002","6ef1a459":"6027","910d5a4e":"6059",b3bfe149:"6066",e5386a75:"6086","882bd5c3":"6255","40be41a9":"6325",c7dff32f:"6329","47aa7b91":"6365","59b068d1":"6385","84e29575":"6412",bc0c4574:"6635",a68ea571:"6636",dbee08c0:"6797",dc8f36d8:"6863",b8e550c7:"7062",c3038888:"7100",eebb9f3e:"7145",e429fb18:"7186","7236dcb4":"7213","4656db35":"7260","7bbaf234":"7318",dadf679c:"7330",a4179dd8:"7537","6063f56a":"7543",a194bf09:"7727","85d780d7":"7762","17cee6e7":"7810",e378912b:"7811","35b6bff0":"7819","914c5fe7":"7868","1a4e3797":"7920",e9a76c81:"7979","8272edfd":"8007","24317c98":"8010","81bc17b9":"8069",d9fb2f5f:"8105","146035e7":"8193","3c7c043e":"8270","69cd44f6":"8448",fd64f10f:"8467",abf83c96:"8633","58f41459":"8658","7ef0b1f8":"8734",c84a9109:"8760",c8588910:"8834","60ab5c4c":"8877",fbe4c47e:"8893","8fda0747":"8916","525802b3":"8934","69c1213a":"9052",c60355ff:"9063","5200637f":"9106","63a8a649":"9145","027cf034":"9168","3c75ee7d":"9222",a6ef86a7:"9272",d5397252:"9292","0e3ba2c6":"9314","247783bb":"9334","07801322":"9413","00685d85":"9417",ca88c6ba:"9509","1be78505":"9514","0e384e19":"9671","1f98178b":"9714",db699483:"9721","2e91390a":"9764",fb2c10d0:"9779","14eb3368":"9817","39df2a2d":"9836","67854d34":"9944","3ac6333e":"9998"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var d=r.o(e,f)?e[f]:void 0;if(0!==d)if(d)a.push(d[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var b=new Promise(((a,b)=>d=e[f]=[a,b]));a.push(d[2]=b);var c=r.p+r.u(f),t=new Error;r.l(c,(a=>{if(r.o(e,f)&&(0!==(d=e[f])&&(e[f]=void 0),d)){var b=a&&("load"===a.type?"missing":a.type),c=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var d,b,c=a[0],t=a[1],o=a[2],n=0;if(c.some((f=>0!==e[f]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,a,f,d,b,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,r.c=t,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({26:"9bf2f1ad",38:"b02e6e62",39:"6417b00a",53:"935f2afb",102:"855c8e88",104:"527a0828",150:"54146d47",195:"5aa350ff",225:"5668619f",367:"74cbe0b8",376:"c9eb37d0",414:"306aee24",452:"295d89fa",529:"a11133f1",562:"7a770024",570:"a7f8e40f",720:"dffd512f",742:"37a6abbb",747:"07d78bf6",757:"9ce9f59c",795:"78dfb7e9",862:"ba4cd107",963:"bf477335",973:"f7444008",1006:"069ddc90",1219:"ac3f047d",1320:"849f9212",1392:"41a0b225",1413:"71498ad5",1434:"3938886d",1451:"ea56d3e1",1472:"6efd3b1f",1490:"7821a10c",1510:"a74ebc46",1562:"bc969540",1613:"6e16c901",1627:"ef851841",1688:"37e2c88f",1904:"a76ff2eb",1985:"98ca32ed",1995:"0a099a4f",2024:"ab510b4f",2066:"661e81a0",2106:"33580f2e",2147:"220207ff",2169:"267ccbc6",2253:"23a9762f",2297:"1da087e0",2310:"2a424e83",2346:"ff6a9465",2439:"5ce704b9",2471:"68053dc3",2483:"9c874da5",2516:"98a1fcd9",2539:"5e24e3bc",2629:"5c2df135",2630:"1e1599cb",2654:"06de0160",2719:"98b03dc7",2720:"396f0464",2813:"61d84721",2822:"4b05701a",3079:"269e975a",3082:"d26eef7b",3155:"9a364eec",3197:"befb6058",3322:"a573d8f7",3360:"7bd95ec4",3466:"00dd8e60",3477:"7de4166c",3540:"fb391353",3588:"cf1f907d",3608:"8a0d7266",3653:"d09084ee",3731:"d008ba81",3854:"ea49187a",3885:"338561f9",3892:"e1b7d783",3931:"7d141066",3938:"fea2b63c",3962:"cf84801a",3969:"11ffa791",4021:"6bc80c47",4143:"d331ba2f",4216:"17e33bf8",4415:"dc2f4bb3",4472:"84982dca",4485:"8dc7c7b8",4580:"3d7d2ef4",4585:"e2f45cda",4587:"0225d014",4612:"bebf2496",4695:"855239bf",4708:"ed9ad71b",4735:"ec038b21",4772:"bc209e08",4946:"00e97bf6",4953:"de98de14",5069:"a0d375c1",5090:"46ef8a18",5106:"145e5b9f",5114:"05bac479",5165:"24ad2548",5170:"be477480",5212:"72119d79",5222:"5718d6db",5261:"da84d3ce",5296:"086e8e8b",5326:"73bb90fb",5355:"925c0b5c",5398:"1a613e91",5400:"2baa0d2f",5414:"a830598a",5421:"53e81573",5445:"84d47c34",5449:"c7b25a99",5635:"4859ca05",5711:"28b23d2a",5792:"bdb17ab6",6002:"a89000ee",6027:"6ef1a459",6059:"910d5a4e",6066:"b3bfe149",6086:"e5386a75",6255:"882bd5c3",6325:"40be41a9",6329:"c7dff32f",6365:"47aa7b91",6385:"59b068d1",6412:"84e29575",6635:"bc0c4574",6636:"a68ea571",6797:"dbee08c0",6863:"dc8f36d8",7062:"b8e550c7",7100:"c3038888",7145:"eebb9f3e",7186:"e429fb18",7213:"7236dcb4",7260:"4656db35",7318:"7bbaf234",7330:"dadf679c",7537:"a4179dd8",7543:"6063f56a",7727:"a194bf09",7762:"85d780d7",7810:"17cee6e7",7811:"e378912b",7819:"35b6bff0",7868:"914c5fe7",7918:"17896441",7920:"1a4e3797",7979:"e9a76c81",8007:"8272edfd",8010:"24317c98",8069:"81bc17b9",8105:"d9fb2f5f",8193:"146035e7",8270:"3c7c043e",8448:"69cd44f6",8467:"fd64f10f",8633:"abf83c96",8658:"58f41459",8734:"7ef0b1f8",8760:"c84a9109",8834:"c8588910",8877:"60ab5c4c",8893:"fbe4c47e",8916:"8fda0747",8934:"525802b3",9052:"69c1213a",9063:"c60355ff",9106:"5200637f",9145:"63a8a649",9168:"027cf034",9222:"3c75ee7d",9272:"a6ef86a7",9292:"d5397252",9314:"0e3ba2c6",9334:"247783bb",9413:"07801322",9417:"00685d85",9509:"ca88c6ba",9514:"1be78505",9671:"0e384e19",9714:"1f98178b",9721:"db699483",9764:"2e91390a",9779:"fb2c10d0",9817:"14eb3368",9836:"39df2a2d",9944:"67854d34",9998:"3ac6333e"}[e]||e)+"."+{26:"6ee6df48",38:"25dbb0a5",39:"db0f7227",53:"c410e8a9",102:"c1d3dab3",104:"69a2b6b8",150:"d7d0926b",195:"8bf681a0",225:"3177252b",367:"e48d7d06",376:"e0510c28",414:"8940b5d5",452:"2d0a34f5",529:"37973ca6",562:"8d8c12a3",570:"4f4c44ea",720:"55cab5bf",742:"4d967d0b",747:"2478ee7b",757:"b751fb80",795:"b4234a42",862:"418f3bd4",963:"dbaea5ba",973:"79855f17",1006:"2cf3ff86",1219:"02dbc5b7",1320:"d0e2d40e",1392:"4ea0db8e",1413:"bc3d8477",1434:"c7a4d03c",1451:"b2ecce3d",1472:"234e467d",1490:"2165cfdf",1510:"8a5eb4ad",1562:"e06cd197",1613:"14e9eca4",1627:"8c55abdf",1688:"b472ecf2",1904:"6b79db18",1949:"e89740ad",1985:"8c7dbcc3",1995:"18f4548d",2024:"e57a2cac",2066:"14f8298d",2106:"d4dccbfe",2147:"b1f81382",2169:"a61ed3eb",2253:"882f27ab",2297:"4aba8fae",2310:"0ed5e133",2346:"d4bf8fd2",2439:"ecd97376",2471:"22ba9fcb",2483:"f13a94f6",2516:"494f8b22",2539:"753efd8a",2629:"bf3a0a82",2630:"05b73ec0",2654:"bb24bebb",2719:"46b7f948",2720:"e164a7a0",2813:"a59096f1",2822:"4d559ede",3079:"9122047a",3082:"2ae052c7",3155:"2dbd5eaf",3197:"b9b03ab0",3322:"ada0be0e",3360:"12b719e2",3466:"e5818a8e",3477:"e391f6ae",3540:"c9937d51",3588:"ba8093a8",3608:"8378c4fd",3653:"c6557d0f",3731:"d2d17dbc",3854:"8f8eccdc",3885:"3a34a919",3892:"49ed9e3f",3931:"7c68e7ab",3938:"e7da601d",3962:"d0a15929",3969:"ead65a90",4021:"76d4b7c3",4143:"a4d13ab0",4216:"704a22c2",4415:"011105a8",4472:"73212368",4483:"dd6f4c67",4485:"9630363d",4580:"ef590e62",4585:"a875facb",4587:"2593e756",4612:"4550cabf",4695:"16c42d4f",4708:"723dc706",4735:"39315364",4772:"64a09734",4946:"2c67a4b7",4953:"484f49ed",5069:"cad12094",5090:"5bb085e8",5106:"c7833d51",5114:"2eda4c43",5165:"0383fd6a",5170:"20d85d6e",5212:"3cd30d3e",5222:"e67d1cf3",5261:"37925ae8",5296:"3c1a2d2c",5326:"6ea26858",5355:"1e0b67bb",5398:"08dd51e1",5400:"822ffc1a",5414:"376dedc8",5421:"62730e04",5445:"b4bf663a",5449:"68c091cf",5635:"63bb2a27",5711:"7b95556c",5792:"03e80846",6002:"832e026a",6027:"3ffd4a9b",6059:"1131599e",6066:"736f214a",6086:"d986e717",6255:"f499efc6",6325:"619ee169",6329:"3f0cae1d",6365:"0a9d5509",6385:"5a3ae9cd",6412:"5f71aa97",6635:"eeec2ec3",6636:"85917d12",6797:"7f7419e3",6798:"07cc0f1a",6863:"4e8837df",6945:"5f538c43",7062:"c2c077f2",7100:"fa2c8662",7145:"6bbe307d",7186:"16239f67",7213:"a1eb159f",7260:"b9ab1777",7318:"b36d1256",7330:"8551e18f",7537:"6ba3cd60",7543:"ce33bac3",7727:"f8c3b35c",7762:"86cfaa25",7810:"abbf84b1",7811:"a94f7506",7819:"f771775e",7868:"7441f7f0",7918:"6e1eeb6f",7920:"1e9d3f1b",7979:"9d167bdd",8007:"96bb7f0a",8010:"84b1a128",8069:"ab64e3ed",8105:"654d919c",8193:"952539e2",8270:"a0014bc8",8382:"33a3e703",8448:"b3aaed4f",8467:"a0cb28ff",8633:"ffefd990",8658:"f2c58039",8734:"d32f0fd4",8760:"b62319bd",8834:"404cde65",8877:"2f835953",8893:"c936a38a",8894:"1b69866b",8916:"75559028",8934:"b0c0f464",9052:"986e9e16",9063:"66645129",9106:"36712c92",9145:"56a85afc",9168:"23e9fced",9222:"098d4938",9272:"ad4b3729",9292:"dc7c1c76",9314:"95c6177b",9334:"b669e8d5",9413:"c2c4fde8",9417:"43db1677",9509:"d2f35955",9514:"f143f5a3",9671:"d1d3a88b",9714:"3be9e931",9721:"db9fa5b0",9764:"9e2e6e32",9779:"188159e2",9817:"1e4fec31",9836:"280bbbea",9944:"56b17b3c",9998:"d344e8e4"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},b="documentation:",r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/docs/",r.gca=function(e){return e={17896441:"7918","9bf2f1ad":"26",b02e6e62:"38","6417b00a":"39","935f2afb":"53","855c8e88":"102","527a0828":"104","54146d47":"150","5aa350ff":"195","5668619f":"225","74cbe0b8":"367",c9eb37d0:"376","306aee24":"414","295d89fa":"452",a11133f1:"529","7a770024":"562",a7f8e40f:"570",dffd512f:"720","37a6abbb":"742","07d78bf6":"747","9ce9f59c":"757","78dfb7e9":"795",ba4cd107:"862",bf477335:"963",f7444008:"973","069ddc90":"1006",ac3f047d:"1219","849f9212":"1320","41a0b225":"1392","71498ad5":"1413","3938886d":"1434",ea56d3e1:"1451","6efd3b1f":"1472","7821a10c":"1490",a74ebc46:"1510",bc969540:"1562","6e16c901":"1613",ef851841:"1627","37e2c88f":"1688",a76ff2eb:"1904","98ca32ed":"1985","0a099a4f":"1995",ab510b4f:"2024","661e81a0":"2066","33580f2e":"2106","220207ff":"2147","267ccbc6":"2169","23a9762f":"2253","1da087e0":"2297","2a424e83":"2310",ff6a9465:"2346","5ce704b9":"2439","68053dc3":"2471","9c874da5":"2483","98a1fcd9":"2516","5e24e3bc":"2539","5c2df135":"2629","1e1599cb":"2630","06de0160":"2654","98b03dc7":"2719","396f0464":"2720","61d84721":"2813","4b05701a":"2822","269e975a":"3079",d26eef7b:"3082","9a364eec":"3155",befb6058:"3197",a573d8f7:"3322","7bd95ec4":"3360","00dd8e60":"3466","7de4166c":"3477",fb391353:"3540",cf1f907d:"3588","8a0d7266":"3608",d09084ee:"3653",d008ba81:"3731",ea49187a:"3854","338561f9":"3885",e1b7d783:"3892","7d141066":"3931",fea2b63c:"3938",cf84801a:"3962","11ffa791":"3969","6bc80c47":"4021",d331ba2f:"4143","17e33bf8":"4216",dc2f4bb3:"4415","84982dca":"4472","8dc7c7b8":"4485","3d7d2ef4":"4580",e2f45cda:"4585","0225d014":"4587",bebf2496:"4612","855239bf":"4695",ed9ad71b:"4708",ec038b21:"4735",bc209e08:"4772","00e97bf6":"4946",de98de14:"4953",a0d375c1:"5069","46ef8a18":"5090","145e5b9f":"5106","05bac479":"5114","24ad2548":"5165",be477480:"5170","72119d79":"5212","5718d6db":"5222",da84d3ce:"5261","086e8e8b":"5296","73bb90fb":"5326","925c0b5c":"5355","1a613e91":"5398","2baa0d2f":"5400",a830598a:"5414","53e81573":"5421","84d47c34":"5445",c7b25a99:"5449","4859ca05":"5635","28b23d2a":"5711",bdb17ab6:"5792",a89000ee:"6002","6ef1a459":"6027","910d5a4e":"6059",b3bfe149:"6066",e5386a75:"6086","882bd5c3":"6255","40be41a9":"6325",c7dff32f:"6329","47aa7b91":"6365","59b068d1":"6385","84e29575":"6412",bc0c4574:"6635",a68ea571:"6636",dbee08c0:"6797",dc8f36d8:"6863",b8e550c7:"7062",c3038888:"7100",eebb9f3e:"7145",e429fb18:"7186","7236dcb4":"7213","4656db35":"7260","7bbaf234":"7318",dadf679c:"7330",a4179dd8:"7537","6063f56a":"7543",a194bf09:"7727","85d780d7":"7762","17cee6e7":"7810",e378912b:"7811","35b6bff0":"7819","914c5fe7":"7868","1a4e3797":"7920",e9a76c81:"7979","8272edfd":"8007","24317c98":"8010","81bc17b9":"8069",d9fb2f5f:"8105","146035e7":"8193","3c7c043e":"8270","69cd44f6":"8448",fd64f10f:"8467",abf83c96:"8633","58f41459":"8658","7ef0b1f8":"8734",c84a9109:"8760",c8588910:"8834","60ab5c4c":"8877",fbe4c47e:"8893","8fda0747":"8916","525802b3":"8934","69c1213a":"9052",c60355ff:"9063","5200637f":"9106","63a8a649":"9145","027cf034":"9168","3c75ee7d":"9222",a6ef86a7:"9272",d5397252:"9292","0e3ba2c6":"9314","247783bb":"9334","07801322":"9413","00685d85":"9417",ca88c6ba:"9509","1be78505":"9514","0e384e19":"9671","1f98178b":"9714",db699483:"9721","2e91390a":"9764",fb2c10d0:"9779","14eb3368":"9817","39df2a2d":"9836","67854d34":"9944","3ac6333e":"9998"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var b=new Promise(((f,b)=>d=e[a]=[f,b]));f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,c=f[0],t=f[1],o=f[2],n=0;if(c.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n - + @@ -20,7 +20,7 @@

    Improving test automation stability

    Challenges

    • Complex, manual test runs
    • Low stability of regression for unclear reasons (60% passing rate)
    • Unclear reporting for non-technical stakeholders, leading to the lack of transparency in test automation results and progress
    • Test automation feedback is unclear, unreliable, incomprehensible, and insufficient to decide to push the app to production

    Highlights

    By integrating the test framework with ReportPortal.io, EPAM's team provided:

    • Simplified test runs
    • Key info for the manual root cause analysis of test failures, such as logs, screenshots, attachments
    • A possibility to triage failed items (AI-based and manual)
    • Clear reporting for non-technical stakeholders

    Results

    • Improved automation stability from 60% to 77% in one sprint
    • Discovered that most failures were caused by environment issues and reduced the number of such failures from 20% to 2%
    • Reduced test automation results analysis effort by 45%
    • Provided clear and comprehensive test automation reporting dashboard: number of test cases, regression passing rate, reasons for failures, product status
    - + \ No newline at end of file diff --git a/case-studies/IncreasingTestAutomationStabilityAndVisibility/index.html b/case-studies/IncreasingTestAutomationStabilityAndVisibility/index.html index e40a2f5bb..d3df8b6f8 100644 --- a/case-studies/IncreasingTestAutomationStabilityAndVisibility/index.html +++ b/case-studies/IncreasingTestAutomationStabilityAndVisibility/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Increasing test automation stability and visibility

    Challenges

    • 2,000 unique tests had low stability (25% passing rate)
    • Complex and inconvenient test results reporting
    • QA team didn’t have capacity for test failure analysis
    • Automation results were ignored by decision makers: no analysis of the causes of failed tests, no trust in the automation testing process
    • Lack of visibility into failed tests and failure causes
    • Absence of clear reporting of QA engineers’ workload and performance

    Highlights

    Integration with ReportPortal.io allowed the client to:

    • Collect history for previous test runs
    • Identify passing, failing, and unstable tests
    • Select stable tests in a separate run
    • Assign unstable test for refactoring and add them to a separate run for implementation
    • Configure ReportPortal.io charts to track a refactoring progress
    • Accelerate test failure analysis through access to related logs, screenshots, and attachments in one place

    Results

    • Automation stability improved from 25% to 95%
    • Analysis efforts of QA engineers decreased by 10 times
    • Client stakeholders use ReportPortal.io data to make release decisions
    • ReportPortal.io became the main tool for tracking test automation progress and health
    - + \ No newline at end of file diff --git a/case-studies/ReducingRegressionAnalysisEfforts/index.html b/case-studies/ReducingRegressionAnalysisEfforts/index.html index b729e8753..30ad60747 100644 --- a/case-studies/ReducingRegressionAnalysisEfforts/index.html +++ b/case-studies/ReducingRegressionAnalysisEfforts/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Reducing regression analysis efforts

    Challenges

    • Test analysis could only start after full execution was completed (4 hours wasted daily)
    • All test failures had to be analyzed manually
    • No visibility into causes for tests failures
    • Absence of history and trends of test failures
    • No tools to manage team workload
    • Test execution reports were done manually (1 hour of daily efforts)

    Highlights

    • Real-time analysis during test runs: results available after the first job execution, saving team capacity and providing an early reaction
    • Automatic re-run of failed tests provided additional value and saved up to 5.5 of team’s hours per day
    • About 20% of defects previously analyzed manually are being updated automatically through ML capabilities
    • Clear visibility into the number of new /existing production defects, auto test related issues, and environment related issues
    • Full understanding of application quality, correct planning of maintenance time, and transparent communication of environment instability based on real-time statistics
    • History of tests execution helps to analyze causes of test failures more efficiently
    • Improved task management due to possibility to plan work allocation and track tests assigned to each team member
    • Real-time dashboards were tailored to client’s KPIs, giving full transparency of test execution results
    - + \ No newline at end of file diff --git a/case-studies/ReducingRegressionTimeBy50/index.html b/case-studies/ReducingRegressionTimeBy50/index.html index 9be62512f..f80cbcad1 100644 --- a/case-studies/ReducingRegressionTimeBy50/index.html +++ b/case-studies/ReducingRegressionTimeBy50/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Reducing regression time by 50%

    EPAM helps a Canadian retail company to reverse-engineer their legacy IBM-based store management system to a modern tech stack. As part of this project, ReportPortal was deployed as a centralized test reporting tool.

    Challenges

    • Unavailble environments (15VMs) blocked by aggregation scripts
    • High risk of aggregation fail: 1 in 10 aggregations fails. In case of a fail, the whole regression should be re-run.
    • Constant regression fails move weekly releases for 1 day
    • Lack of information for investigation: no screenshots/no history/no structure/no all info
    • Duplicated analysis efforts: missing history of test cases and known issues

    Highlights

    • Simplified test run reporting by integrating the test framework with ReportPortal.io
    • Distributed test execution data for root cause analysis: logs/screenshots/ attachments
    • Provided a possibility for AI-based defects triage and manual triage
    • Provided clear reporting for non-technical stakeholders
    • Real-time reporting
    • Save on early reaction: team result analysis right after execution started in real time
    • Collaborative results analysis
    • Test Case History helped to identify flaky test cases
    • Extended ML Analyzer
    - + \ No newline at end of file diff --git a/category/admin-panel/index.html b/category/admin-panel/index.html index 744408cbf..b728c81a6 100644 --- a/category/admin-panel/index.html +++ b/category/admin-panel/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/analysis/index.html b/category/analysis/index.html index 56da5af03..6d044957f 100644 --- a/category/analysis/index.html +++ b/category/analysis/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/case-studies/index.html b/category/case-studies/index.html index b50c3b67e..359bb5a65 100644 --- a/category/case-studies/index.html +++ b/category/case-studies/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/dashboards-and-widgets/index.html b/category/dashboards-and-widgets/index.html index d87c42770..3e6e39eef 100644 --- a/category/dashboards-and-widgets/index.html +++ b/category/dashboards-and-widgets/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Dashboards and widgets

    - + \ No newline at end of file diff --git a/category/developers-guides/index.html b/category/developers-guides/index.html index b05e9afe2..0beff1537 100644 --- a/category/developers-guides/index.html +++ b/category/developers-guides/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/installation-steps/index.html b/category/installation-steps/index.html index bbe0773cf..bccdfe3be 100644 --- a/category/installation-steps/index.html +++ b/category/installation-steps/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Installation Steps

    - + \ No newline at end of file diff --git a/category/issues-troubleshooting/index.html b/category/issues-troubleshooting/index.html index 0a18fcffc..48b9d95dc 100644 --- a/category/issues-troubleshooting/index.html +++ b/category/issues-troubleshooting/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/log-data-in-reportportal/index.html b/category/log-data-in-reportportal/index.html index 295f4450d..1b146c9f3 100644 --- a/category/log-data-in-reportportal/index.html +++ b/category/log-data-in-reportportal/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/loggers-1/index.html b/category/loggers-1/index.html index 811c8039b..28665510d 100644 --- a/category/loggers-1/index.html +++ b/category/loggers-1/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/loggers/index.html b/category/loggers/index.html index b102aadf1..2a22fd4f7 100644 --- a/category/loggers/index.html +++ b/category/loggers/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Loggers

    - + \ No newline at end of file diff --git a/category/plugins/index.html b/category/plugins/index.html index b24f601b0..ac0c8c5d4 100644 --- a/category/plugins/index.html +++ b/category/plugins/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/quality-gates/index.html b/category/quality-gates/index.html index 1607edc6f..68d01901d 100644 --- a/category/quality-gates/index.html +++ b/category/quality-gates/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/reportportal-configuration/index.html b/category/reportportal-configuration/index.html index 7bb6e3617..ec25b1e60 100644 --- a/category/reportportal-configuration/index.html +++ b/category/reportportal-configuration/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/saved-searches-filters/index.html b/category/saved-searches-filters/index.html index f02dda63d..2de5e34d1 100644 --- a/category/saved-searches-filters/index.html +++ b/category/saved-searches-filters/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/terms--conditions/index.html b/category/terms--conditions/index.html index d25707ec9..5c7df7551 100644 --- a/category/terms--conditions/index.html +++ b/category/terms--conditions/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/user-account/index.html b/category/user-account/index.html index b57161a20..afb2395f6 100644 --- a/category/user-account/index.html +++ b/category/user-account/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/work-with-reports/index.html b/category/work-with-reports/index.html index 05f942e88..71852477e 100644 --- a/category/work-with-reports/index.html +++ b/category/work-with-reports/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/dashboards-and-widgets/ComponentHealthCheck/index.html b/dashboards-and-widgets/ComponentHealthCheck/index.html index 1d000dd1c..c26cbf127 100644 --- a/dashboards-and-widgets/ComponentHealthCheck/index.html +++ b/dashboards-and-widgets/ComponentHealthCheck/index.html @@ -12,7 +12,7 @@ - + @@ -34,7 +34,7 @@ link to the widget list view: Filter list view + test method: Test + status: Passed, Failed, Skipped, Interrupted, InProgress; the number of items is equal to the number of Test cases in the widget a color line which depends on passing rate (see section Widget legend) Widget legend

    Widget legend has two lines: Passed and Failed

    Failed

    The failed line has four colors:

    • light red
    • regular red
    • strong red
    • dark red

    And have values - less than specified on widget wizard -1

    Passed

    The passing line has only two colors:

    • slightly green
    • green = Passed

    And have values - from specified on widget wizard to 100%. Depends on this color scheme each group on the widget has its own color.

    Let's say we set 'The min allowable passing rate for the component' to be 90%.

    • passed green: groups which have passing rate 100%.
    • slightly green: groups which passing rate from 99 - specified on widget wizard.
    • light red: from 3* (90% - 1)/4 to (90% - 1)
    • strong red: from (90% - 1)/2 to 3* (90% - 1)/4
    • regular red: from (90% - 1)/4 to 2*(90% - 1)/4
    • dark red: 0 - ((90% - 1)/4 -1)
    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/CumulativeTrendChart/index.html b/dashboards-and-widgets/CumulativeTrendChart/index.html index 443b57431..6cc6daebb 100644 --- a/dashboards-and-widgets/CumulativeTrendChart/index.html +++ b/dashboards-and-widgets/CumulativeTrendChart/index.html @@ -12,7 +12,7 @@ - + @@ -38,7 +38,7 @@ Separate bars - is shown a separate bar for each status, and each defect type group.

    Tests / Per cent Test mode - OY axis is calculated in test cases. Percent mode - OY axis is calculated in percent. OY = 100%.

    A user can combine different options. Options are saved per user.

    note

    The widget doesn't contain 'IN PROGRESS" launches. The widget statistics calculated only in items with method type TEST.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/DifferentLaunchesComparisonChart/index.html b/dashboards-and-widgets/DifferentLaunchesComparisonChart/index.html index e0d94e327..7383152ee 100644 --- a/dashboards-and-widgets/DifferentLaunchesComparisonChart/index.html +++ b/dashboards-and-widgets/DifferentLaunchesComparisonChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Different launches comparison chart

    The widget allows you to compare statistics for the 2 last launches side by side.

    Widget's parameters:

    • Filter.

    Widget view

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows the percentage of test-cases by statuses.

    The widget contains agenda with statuses, the user can click on a status to remove/add it to the chart.

    The tooltip on mouse hover over the chart area shows launch details: launch name and number, launch start times and percentage of test cases of a particular type.

    The widget has clickable sections when you click on specific sections in the widget, the system forwards you to the launch view for the appropriate selection.

    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/FailedCasesTrendChart/index.html b/dashboards-and-widgets/FailedCasesTrendChart/index.html index 818fdf340..b28d2da90 100644 --- a/dashboards-and-widgets/FailedCasesTrendChart/index.html +++ b/dashboards-and-widgets/FailedCasesTrendChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Failed cases trend chart

    The widget shows the trend of growth in the number of failed test cases (Product Bugs + Auto Bugs + System Issues + No Defects + To Investigates) from run to run.

    Widget's parameters:

    • Filter.
    • Items: 1-150. The default meaning is 50.

    Widget view

    The widget contains the agenda: "Failed".

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows several Failed issues (sum of Product Bugs + Auto Bugs + System Issues + No Defects + To Investigates).

    The tooltip on mouse hover over the chart area shows launch details: launch name and number, launch start time and several failed test cases.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/FlakyTestCasesTableTop20/index.html b/dashboards-and-widgets/FlakyTestCasesTableTop20/index.html index a0bc42043..de09c1992 100644 --- a/dashboards-and-widgets/FlakyTestCasesTableTop20/index.html +++ b/dashboards-and-widgets/FlakyTestCasesTableTop20/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Flaky test cases table (TOP-20)

    Shows the TOP-20 the flakiest test cases within the specified previous launches. The widget defines test cases with the highest percentage of switching their status in the execution. So that you can click on the test cases and be redirected to the last test item in execution to check the reasons.

    Widget's parameters:

    • Launches count: 2-150. The default meaning is 30.

    • Launch name. Is required

    • Include /Exclude Before and After methods

    Widget view

    The widget has a table view with the following data displayed:

    • Test Item name - link to the Step level of the last launch

    • Switches - count of found results with often switches;

    • % of Switches - the percent of the fact switches and the possible;

    • Last switch - date and time of the last run, when the test item switches the status, displayed in 'time ago' format (i.e. "10 minutes ago").

    On mouse hover, the system will display accurate start times.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/InvestigatedPercentageOfLaunches/index.html b/dashboards-and-widgets/InvestigatedPercentageOfLaunches/index.html index a2745e7a5..a3181c29e 100644 --- a/dashboards-and-widgets/InvestigatedPercentageOfLaunches/index.html +++ b/dashboards-and-widgets/InvestigatedPercentageOfLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Investigated percentage of launches

    The widget can be used in two modes - Launch mode and Timeline mode:

    • The widget in the Launch mode shows the percentage of "Investigated" and "To Investigate" items by launch to sum (Product Bugs + Auto Bugs + System Issues + To Investigates).
    • The widget in the Timeline mode shows the percentage of "Investigated" and "To Investigate" items to sum (Product Bugs + Auto Bugs + System Issues + To Investigates) in all runs per day, distributed by dates.

    Widget's parameters:

    • Filter: At least one filter is required.
    • Items: 1-150. The default meaning is 50.
    • Mode: Launch or Timeline. The default meaning is Launch mode.

    Widget view

    The widget contains an agenda with "To Investigate" and "Investigated" labels.

    The widget view in Launch mode:

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows the percent of "Investigated" and "To Investigate" items to sum. (Product Bugs + Auto Bugs + System Issues + To Investigates)

    The tooltip on mouse hover over the chart area shows launch details: launch name, number, launch start time and "percentage of "Investigated" or "To Investigate" items.

    The widget view in Timeline mode:

    • The X-axis shows dates and weekdays.
    • Y-axis shows a percent of "Investigated" and "To Investigate" items to sum (Product Bugs + Auto Bugs + System Issues + No Defects + To Investigates) distributed by dates.

    The tooltip on mouse hover over the chart area shows launch details: date and percentage of "Investigated" or "To Investigate" items.

    The widget has clickable sections when you click on a specific section in the widget, the system forwards you to the launch view for the appropriate selection.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/LaunchExecutionAndIssueStatistic/index.html b/dashboards-and-widgets/LaunchExecutionAndIssueStatistic/index.html index c8862bbb2..4b9f171b7 100644 --- a/dashboards-and-widgets/LaunchExecutionAndIssueStatistic/index.html +++ b/dashboards-and-widgets/LaunchExecutionAndIssueStatistic/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Launch execution and issue statistic

    The Launch Execution and Issue Statistic chart shows the status and issues statistics for the last launch of a specified range.

    Widget's parameters:

    • Filter: required

    Widget view

    The widget shows statistics of the last finished launch for the chosen filter. The statistics are divided into the following sections:

    • Skipped, Passed, Failed
    • Product Bug, System Issue, Automation Bug, No Defect (default and custom) and To Investigate.

    The widget contains agenda with statuses, the user can click on a status to remove/add it to the chart.

    Tooltip on mouse hover over chart area shows launch details: launch name, number, and duration.

    The statistics for every type is shown in percentage. On hover, the exact number is shown for each type.

    The widget has clickable sections when you click on a specified section in the widget, the system forwards you to the launch view for the appropriate selection.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/LaunchStatisticsChart/index.html b/dashboards-and-widgets/LaunchStatisticsChart/index.html index fa722ccf6..e8ac489d2 100644 --- a/dashboards-and-widgets/LaunchStatisticsChart/index.html +++ b/dashboards-and-widgets/LaunchStatisticsChart/index.html @@ -12,7 +12,7 @@ - + @@ -27,7 +27,7 @@

    The widget view in Timeline mode:

    • The X-axis shows dates and weekdays.
    • Y-axis shows the sum of launches statistics with each selected statuses, distributed by weekdays.

    The tooltip on mouse hover over the chart area shows details: date and total launches statistics.

    The widget has clickable sections; when you click on a specified section in the widget, the system forwards you to launch view for appropriate selection.

    Area view

    Bar view

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/LaunchesDurationChart/index.html b/dashboards-and-widgets/LaunchesDurationChart/index.html index ef770bd87..b14af8106 100644 --- a/dashboards-and-widgets/LaunchesDurationChart/index.html +++ b/dashboards-and-widgets/LaunchesDurationChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Launches duration chart

    The Launch Duration Chart shows the duration of the selected launches.

    Widget's parameters:

    • Filter: At least one filter is required
    • Items: 1-150. Default meaning is 50
    • Mode All launches/ Latest launches

    Widget view

    The widget shows the duration of the filtered launches.

    • The X-axis shows launches duration.
    • Y-axis shows launches numbers and launches names on hover.

    Tooltip on mouse hover over chart area shows launch details: launch name, number, and duration.

    The Widget has clickable sections when you click on a specified section in a widget, the system forwards you to launch view for appropriate selection.

    The Widget has two states: All launches and Latest lunches. If you chose All launches mode, the widget will show statistics about all launches in the filter. To view only the latest executions of each launch, you should choose Latest launches.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/LaunchesTable/index.html b/dashboards-and-widgets/LaunchesTable/index.html index 0d81500b1..d97819692 100644 --- a/dashboards-and-widgets/LaunchesTable/index.html +++ b/dashboards-and-widgets/LaunchesTable/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Launches table

    The widget shows a configurable table of launches.

    Widget's parameters:

    • The widget criteria are as follows: Total, Passed, Failed, Skipped, Product Bug, Automation Bug, System Issue, To Investigate, Attributes, User, Description, Start time, Finish time. All criteria are selected by default. To specify them, uncheck unnecessary items in "Criteria for Widget".
    • Items: 1-150. The default meaning is 50.

    Widget view

    The widget has a table view.

    The widget has clickable elements "launch name", "owner", "attributes", and "number of items"; when you click on specific elements in the widget, the system forwards you to the launch view for the appropriate selection.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/ManageWidgets/index.html b/dashboards-and-widgets/ManageWidgets/index.html index 7b4fcf13e..12dcf540f 100644 --- a/dashboards-and-widgets/ManageWidgets/index.html +++ b/dashboards-and-widgets/ManageWidgets/index.html @@ -12,7 +12,7 @@ - + @@ -20,9 +20,8 @@

    Manage Widgets

    Customize widget

    When you create a widget in our test automation dashboard, it has a basic size. Afterward, you may change the widget size.

    To resize widget the user can hover the mouse cursor over the widget. The system will show resizing arrows.

    Grab the arrow with the cursor and drag it to the desired width and height.

    You can maintain the existing aspect ratio or set a new one when resizing the widget.

    note

    Widgets have a minimum and maximum mean of width and height defined within the application.

    Another way you can customize your dashboard is by changing the widgets' placement within the dashboard canvas area.

    To change a widget placement on the dashboard, perform the following: grab a widget with the cursor by clicking and dragging it to the selected position, holding down the mouse button.

    When you move the widget to the area with sufficient space, the system highlights this place. -The widgets located in this space, are moved to the relocatable widget place. Using this option the user can configure the desired location of the widgets on a dashboard.

    Edit widget

    To create a new widget for data visualization, perform the following steps:

    1. Click the "Edit" icon in the right corner of the widget header.

    2. After the "Edit Widget" window is opened, you can edit any widget settings except the template itself.

    3. Make the necessary changes and click the "Save" button. The widget will be updated.

    View widgets in full-screen mode

    To view widgets on the whole screen, click the 'Full Screen' button in the right top corner of the dashboard.

    Widgets are shown in the same order as for standard view.

    note

    Clickable areas or elements are disabled for the full-screen mode selected, therefore it will not be possible to create a new widget, update, or delete available widgets in this mode.

    The auto-refresh timeout for widgets in full-screen mode is 30 sec.

    Delete widget

    To delete the widget:

    1. Click the "Delete" icon (X) in the right corner of the widget header.

    2. Click the "Delete" button on the confirmation popup.

    3. The widget will be deleted from the system.

    If you delete a shared widget, the deleted widget will be displayed for other -users as "Widget not found".

    - +The widgets located in this space, are moved to the relocatable widget place. Using this option the user can configure the desired location of the widgets on a dashboard.

    Edit widget

    To create a new widget for data visualization, perform the following steps:

    1. Click the "Edit" icon in the right corner of the widget header.

    2. After the "Edit Widget" window is opened, you can edit any widget settings except the template itself.

    3. Make the necessary changes and click the "Save" button. The widget will be updated.

    View widgets in full-screen mode

    To view widgets on the whole screen, click the 'Full Screen' button in the right top corner of the dashboard.

    Widgets are shown in the same order as for standard view.

    note

    Clickable areas or elements are disabled for the full-screen mode selected, therefore it will not be possible to create a new widget, update, or delete available widgets in this mode.

    The auto-refresh timeout for widgets in full-screen mode is 30 sec.

    Delete widget

    To delete the widget:

    1. Click the "Delete" icon (X) in the right corner of the widget header.

    2. Click the "Delete" button on the confirmation popup.

    3. The widget will be deleted from the system.

    + \ No newline at end of file diff --git a/dashboards-and-widgets/MostFailedTestCasesTableTop20/index.html b/dashboards-and-widgets/MostFailedTestCasesTableTop20/index.html index 6590b9568..a69171129 100644 --- a/dashboards-and-widgets/MostFailedTestCasesTableTop20/index.html +++ b/dashboards-and-widgets/MostFailedTestCasesTableTop20/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Most failed test-cases table (TOP-20)

    The widget contains a table with statistical information about the TOP-20 most problematic test cases.

    Widget's parameters:

    • The widget criteria are as follows: Failed, Skipped, Product Bug, Automation Bug, System Issue, No Defect. Failed is selected by default.

    • Launches count: 2-150. By default, "Launches count" is 30.

    • Launch name: Is required.

    • Include /Exclude Before and After methods

    Widget view

    The widget has a table view with the following data displayed:

    • Test Item name - link to the Step level of the last launch
    • Failed - count of found failed results
    • Last failure - date and time of the last run, when the test item was failed, displayed in 'time ago' format (i.e. "10 minutes ago"). On mouse hover, the system will display accurate start times.
    note

    The widget contains statistics of the most problematic test cases in all launches, except "IN PROGRESS" and "INTERRUPTED" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/MostPopularPatternTableTop20/index.html b/dashboards-and-widgets/MostPopularPatternTableTop20/index.html index 73e160004..23225d64a 100644 --- a/dashboards-and-widgets/MostPopularPatternTableTop20/index.html +++ b/dashboards-and-widgets/MostPopularPatternTableTop20/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ The system leaves only the latest launches in each group (if the user has chosen option Latest launches in the widget wizard). For each group of launches, a list with pattern aggregated.

    Widget view

    On the widget a user can view a table which shows:

    • 20 patterns with the biggest number of test cases in each defined group.

    Via drop-down user can transit from group to group. A pattern name is clickable. By clicking on pattern name a user is redirected to a list with all test cases which have clicked pattern. A list of test cases includes test cases from different launches.

    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/MostTimeConsumingTestCasesWidgetTop20/index.html b/dashboards-and-widgets/MostTimeConsumingTestCasesWidgetTop20/index.html index 62fdc816f..eb5de16bb 100644 --- a/dashboards-and-widgets/MostTimeConsumingTestCasesWidgetTop20/index.html +++ b/dashboards-and-widgets/MostTimeConsumingTestCasesWidgetTop20/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Most time-consuming test cases widget (TOP-20)

    Show the TOP 20 test cases with the highest duration in the last execution of the specified launch.

    Widget's parameters:

    • Test Status. Default value - Passed, Failed

    • Launch name. Is required

    • Include /Exclude Before and After methods

    • View options: Bar view, Table view

    Widget view

    Table View

    The widget has a table view with the following data displayed:

    • Test Item name - link to the log of the last launch

    • Test Status

    • Test Duration

    • Test Start Time - date and time of the last run, displayed in 'time ago' format (i.e. "10 minutes ago").

    On mouse hover, the system will display accurate start times.

    Bar View

    Bar chart where:

    • axis OY - Tests
    • axsic OX - Duration

    Bar color specifies a color of execution. On mouse hover, the system will display accurate start times.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/NonPassedTestCasesTrendChart/index.html b/dashboards-and-widgets/NonPassedTestCasesTrendChart/index.html index 3545c7cf0..6f7ca1df1 100644 --- a/dashboards-and-widgets/NonPassedTestCasesTrendChart/index.html +++ b/dashboards-and-widgets/NonPassedTestCasesTrendChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Non-passed test-cases trend chart

    The widget shows the percent ratio of non-passed test cases "Failed + Skipped" and "Total" cases from run to run.

    Widget's parameters:

    To configure the widget, click the "Add New Widget" button on the dashboard header, then select a template and specify the following settings on the second step:

    • Filter.
    • Items: 1-150. Default meaning is 50

    Widget view

    The widget contains agenda: % (Failed + Skipped) / Total.

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows the percent of sum Failed + Skipped test cases to Total.

    The tooltip on mouse hover over the chart area shows launch details: launch name and number, launch start time and percentage of non-passed cases.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/OverallStatistics/index.html b/dashboards-and-widgets/OverallStatistics/index.html index 89380d5ca..21942e8be 100644 --- a/dashboards-and-widgets/OverallStatistics/index.html +++ b/dashboards-and-widgets/OverallStatistics/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Overall statistics

    The panel shows a summary of test cases with each status for each selected launch.

    Widget's parameters:

    • Filter: At least one filter is required
    • Items: 1-150. The default meaning is 50.
    • Widget Criteria: All criteria are selected by default.
    • Type of view: Panel view/ Donut view
    • Mode All launches/ Latest launches

    Widget view

    The widget shows statistics of the All launches/or Latest launches for the chosen filter. Statistics are divided into the following sections:

    • Skipped, Passed, Failed
    • Product Bug, System Issue, Automation Bug, No Defect and To Investigate.

    The statistics for every type are shown in percentages. On hover, the exact number is shown for each type. The Widget has clickable sections when you click on a specified section in the widget, the system forwards you to launch view for appropriate selection.

    If you chose All launches mode, the widget will show the statistics about all launches in the filter. To view only the latest executions of each launch, you should choose Latest launches.

    The widget can be viewed in two options as shown on pictures: Panel view

    or Donut view.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/PassingRatePerLaunch/index.html b/dashboards-and-widgets/PassingRatePerLaunch/index.html index 95089b1d4..a4c4a3f91 100644 --- a/dashboards-and-widgets/PassingRatePerLaunch/index.html +++ b/dashboards-and-widgets/PassingRatePerLaunch/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Passing rate per launch

    Shows the percentage ratio of Passed test cases to Total test cases for the last run of selected launch.

    note

    Total test cases = Passed + Not Passed, while Not Passed = Failed + Skipped + Interrupted

    Thus, Passing rate = Passed / (Passed + Failed + Skipped + Interrupted)

    Widget's parameters:

    • Launch Name: the name of any finished launch

    • Mode: Bar View/Pie View

    • Widget name: any text

    • Description: any text

    Please find below an example of configuration:

    As you can see, this widget was built based on the test results of the last run of the Daily Smoke Suite:

    Widget view

    The widget can be displayed in two options as shown on the pictures below:

    Bar View

    Pie View

    The tooltip on mouse hover over chart area shows the quantity of Passed/Failed test cases and percentage ratio of Passed/Failed test cases to Total cases for the last run.

    The widget has clickable sections. When you click on a specific section in the widget, the system forwards you to the launch view for appropriate selection.

    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/PassingRateSummary/index.html b/dashboards-and-widgets/PassingRateSummary/index.html index aee07dde2..5431a005e 100644 --- a/dashboards-and-widgets/PassingRateSummary/index.html +++ b/dashboards-and-widgets/PassingRateSummary/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Passing rate summary

    Shows the percentage ratio of Passed test cases to Total test cases for set of launches.

    note

    Total test cases = Passed + Not Passed, while Not Passed = Failed + Skipped + Interrupted

    Thus, Passing rate = Passed / (Passed + Failed + Skipped + Interrupted)

    Widget's parameters:

    • Filter: At least one filter is required

    • Items: 1-600. The default meaning is 50.

    • Mode: Bar View/Pie View

    • Widget name: any text

    • Description: any text

    Please find below an example of configuration:

    Widget view

    The widget can be displayed in two options as shown on the pictures below:

    Bar View

    Pie view

    As you can see, this widget was built based on the “regression” filter.

    The tooltip on mouse hover over chart area shows the quantity of Passed/Not passed test cases and percentage ratio of Passed/Not passed test cases to Total test cases for the specified set of launches.

    The widget has clickable sections. When you click on a specific section in the widget, the system forwards you to the launches view for the appropriate selection.

    Thanks to “Passing rate summary” widget, it is no longer needed to spend time on calculating Passing rate of the specified set of launches. ReportPortal provides these statistics as a visualization – it is a quick and convenient decision. You can take the screenshot of widget and use it in the Test results report.

    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/PossibleDashboardsInReportPortal/index.html b/dashboards-and-widgets/PossibleDashboardsInReportPortal/index.html index 179721d23..5097d284f 100644 --- a/dashboards-and-widgets/PossibleDashboardsInReportPortal/index.html +++ b/dashboards-and-widgets/PossibleDashboardsInReportPortal/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ Let's assume that we have a Regression suite which contains:

    • a suite with API test cases
    • a suite with UI test cases
    • a suite with integration test cases

    The whole Regression is running against nightly build every day. Different teams are responsible for different suites.

    Which dashboard I can create in such conditions?

    Report for one tests run (A dashboard for an engineer)

    The goal for this test results dashboard to show the status of the latest test run. For instance to see the latest results for launch with an API suite.

    You can configure: Passing rate widget that shows a passing rate for a latest launch "API suite'

    Most popular pattern tracks TOP-20 problems in the last and previous runs of this suite.

    note

    For Most popular pattern table, you should you create a set of rules and run Pattern Analysis

    With Investigated percentage of launches you can find out the status of failure investigations. You will be able to evaluate team performance and consistency of results.

    Failed cases trend chart shows the history of failures in previous runs.

    Duration chart will be very helpful for those who track duration KPI and want to increase the speed of tests run.

    Test growth trend chart shows you the speed of new test cases creation.

    Also, you can create "Most flaky test cases" and "Most failed test case" and find the most unstable items which should be taken into account.

    Let's assume that you have a lot of test results and a lot of teams.

    You can create Overall statistics and Launches table, and now a team who is responsible for API suite has no need to go to the test results. It can use only this dashboard which gives enough information for test failure management.

    Build / Release/ Sprint Report (A dashboard for a Team leads, PM, DM)

    The goal of this report to show status for the whole version. It means for this report we want to see the latest results of aggregated statistics for several lanches.

    In our example, I want to see the latest results for the whole Regression (latest results for API suite + latest results for UI + latest results for Integration tests).

    Also, it is very useful to compare the results of the Regression on the current version with the Regression on previous versions and to see details about business metrics.

    On this dashboard you can see different metrics:

    • on different env
    • on a different dimension
    • by business metrics / by features/ by user roles / by etc

    Also with a help of Component Health Check Widget you can create a Test Pyramid.

    note

    You need to report test executions with attributes which specified needed metrics or envs

    note

    Component Health Check Widget and Cumulative trend chart are very configurable and you can create your own widget based on project needs.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/ProjectActivityPanel/index.html b/dashboards-and-widgets/ProjectActivityPanel/index.html index 18c28f04f..3cd881855 100644 --- a/dashboards-and-widgets/ProjectActivityPanel/index.html +++ b/dashboards-and-widgets/ProjectActivityPanel/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Project activity panel

    The widget shows all activities occurring on the project.

    Widget's parameters:

    • The actions for the widget are as follows: Update Project Settings, Update Defect Types, Delete Launch, Start Launch, Finish Launch, Share Widget, Dashboard, Unshare Widget, Dashboard, Post Issue to BTS, Add, Register User, Update BTS. By default, all actions are checked.

    • Items: 1-150. The default meaning is 50.

    • Type user name: By default all user's activities.

    Widget view

    The actions on the widget are present in a table, separated by days. Action messages have the following format:

    Member (name) did action.
    Time - displayed in 'time ago' format (i.e. "10 minutes ago"). On mouse hover, the system should display accurate action time.)

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/TableComponentHealthCheck/index.html b/dashboards-and-widgets/TableComponentHealthCheck/index.html index 0a182e9a4..a702d85d1 100644 --- a/dashboards-and-widgets/TableComponentHealthCheck/index.html +++ b/dashboards-and-widgets/TableComponentHealthCheck/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ But if you run a new version (for instance version: xxx+1), you should repeat previous actions one more time: create the filter, update the widget.

    Solution: How you can skip these steps. Create filter which includes 3 launches: API launch, UI launch, and Integration launch. Create a Component Health Check widget (table view) with this filter and add attribute key 'version' for grouping. Now you will see a summary for the latest version every day. If a new version appears in the system, a widget automatically removes info about the previous one and adds the latest version.

    Use case #2

    Use Case: To track information regarding components such features/browsers/ platforms/ or others

    Problem: You are running different launches API launch, UI launch, and Integration launch. In these 3 launches, there are test cases which belong to different features. One feature can have test cases with different types: API, UI, Integration. You need to track overall statistics for features, not for launch.

    Solution: Create filter which includes 3 launches: API launch, UI launch, and Integration launch. Create a Component Health Check widget (table view) with this filter and add attribute key 'feature' for grouping. Now you will see a summary for all features from different launches.

    Widget logic is the same as for Component health check.

    Widget's parameters:

    • Filter
    • Parameters: All launches/ Latest launches
    • The min allowable passing rate for the component: Possible value from 50 - 100%. Default value 100%.
    • Attribute key for the first level (mandatory)
    • Attribute key for the 2-10 levels (optional)
    • Custom column

    Widget view

    The widget has a table view. Each line contains information regarding one component (one unique attribute value):

    • component name
    • component passing rate
    • statistics: Total/Passed/Failed/Skipped/ Product bugs/ Automation bugs/ System issues/ To investigate
    • information about attribute value in the custom column

    The total line shows a summary of all components.

    Custom column

    Why you may need a custom column? Let's see it in the example.

    Use case #3

    Use Case: You need to understand the impact of failed test cases

    Problem: You created a Component Health Check widget and can see a list with features and their passing rate. But you can not understand the importance of failed features.

    Solution: Add for all test executions attributes with an attribute key 'priority: XXX'. For instance:

    • priority: low
    • priority: major
    • priority: critical

    Then add to widget wizard attribute key 'priority' in the custom column field. So that system adds to the widget view information regarding priority to each feature.

    *Custom sorting

    You can choose how components should be sorted in the table. Possible criteria:

    • Total
    • Passing rate
    • Custom column
    • Failed items
    note

    Component Health Check widget (table view) is the first widget that uses a materialized view of PostgreSQL. It takes time to create it. So that is why information about new launches in the filter adds dynamically. For that reason, a user should update a widget manually by сlicking on the update button. On the widget, a user can see the time for the last update.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/TestCasesGrowthTrendChart/index.html b/dashboards-and-widgets/TestCasesGrowthTrendChart/index.html index 49006f4f6..b7e7f8ee5 100644 --- a/dashboards-and-widgets/TestCasesGrowthTrendChart/index.html +++ b/dashboards-and-widgets/TestCasesGrowthTrendChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Test-cases growth trend chart

    The widget can be used in two modes - Launch mode and Timeline mode:

    • The widget in the Launch mode shows the increment of test-cases from run to run,
    • The widget in the Timeline mode shows the increment of test-cases distributed by dates (in launches with the largest number of test-cases per day).

    Widget's parameters:

    • Filter: At least one filter is required
    • Items: 1-150. The default meaning is 50.
    • Mode: Launch or Timeline.

    Widget view

    The widget view in Launch mode:

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows the increment of test-cases.

    The tooltip on mouse hover over the chart area shows launch details: launch name and number, launch start time and launch statistics - total number of test cases and test cases growth.

    The widget view in Timeline mode:

    • The X-axis shows dates and weekdays.
    • Y-axis shows the increment of test-cases in launches with the largest number of test-cases per day.

    The tooltip on mouse hover over the chart area shows launch details: date and launch statistics - total number of test cases and test cases growth.

    The widget has clickable sections when you click on a specific section in the widget, the system forwards you to the launch view for the appropriate selection.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/UniqueBugsTable/index.html b/dashboards-and-widgets/UniqueBugsTable/index.html index 3e24365d2..0835ec8ff 100644 --- a/dashboards-and-widgets/UniqueBugsTable/index.html +++ b/dashboards-and-widgets/UniqueBugsTable/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Unique bugs table

    The widget shows real identified bugs, posted to the Bug Tracking System from ReportPortal, and existing bugs, that were added to the items on ReportPortal.

    Widget's parameters:

    • Filter: At least one filter is required
    • Items: 1-150. The default meaning is 10.

    Widget view

    The widget has a table view and bugs that are found are then sorted by the date they were posted or added.

    The widget has the following data displayed:

    • Bug ID - links to the issue in Bug Tracking System.
    • Found in - links to the test item, to which the bug was posted/added.
    • Submit date - the date the bug was submitted/added. Time is displayed in 'time ago' format (i.e. "10 minutes ago"). On mouse hover, the system should display accurate action time.
    • Submitter - user, who submitted/added the bug.
    note

    The bugs from launches "IN PROGRESS" are not shown on the widget. In case a bug is found in multiple items, all of the items will be listed in the "Found in" column.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/WidgetCreation/index.html b/dashboards-and-widgets/WidgetCreation/index.html index d910e1d42..ae9b6c0d8 100644 --- a/dashboards-and-widgets/WidgetCreation/index.html +++ b/dashboards-and-widgets/WidgetCreation/index.html @@ -12,7 +12,7 @@ - + @@ -20,9 +20,9 @@

    Widget Creation

    In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and -easy-to-use way of displaying and analyzing your automation trends and data.

    The widgets can be added to dashboards on the "Dashboards" tab. Widgets will be visible within the project, they are created.

    Create widget

    To create a new widget, perform the following steps:

    1. Navigate to the "All Dashboards" page and create a new dashboard or choose the existing one.

    2. Click the "Add New Widget" button.

    3. The Widget Wizard will be opened. To add a new widget, you need to pass all the required steps.

      • Step 1. Select the template of the widget (detailed description is below).

      • Step 2. Select a filter from the list below or create a new filter. Search functionality helps to find the filter quicker. Select other widget options: Criteria, Items, Launch or Timeline mode (if applicable for selected widget template)

      • Step 3. Enter a widget name, description and share a widget (if need). +easy-to-use way of displaying and analyzing your automation trends and data.

      The widgets can be added to dashboards on the "Dashboards" tab. Widgets will be visible within the project, they are created.

      Create widget

      To create a new widget, perform the following steps:

      1. Navigate to the "All Dashboards" page and create a new dashboard or choose the existing one.

      2. Click the "Add New Widget" button.

      3. The Widget Wizard will be opened. To add a new widget, you need to pass all the required steps.

        • Step 1. Select the template of the widget (detailed description is below).

        • Step 2. Select a filter from the list below or create a new filter. Search functionality helps to find the filter quicker. Select other widget options: Criteria, Items, Launch or Timeline mode (if applicable for selected widget template)

        • Step 3. Enter a widget name and description. A widget name should be unique for a user on the project.

      4. After you have completed all steps, click the "Save" button. The new widget will be added to the dashboard on the top.

      Widgets are automatically refreshed every minute.

      Predefined widgets types

      There are 15 widget templates in ReportPortal for tracking different KPI:

      KPIWidget template
      Track the reasons of failuresLaunch statistics chart
      Passing rate for filter summary, and structure of problemsOverall statistics
      Track the longest launch in the filterLaunches duration chart
      Track the passing rate and structure of problems of the latest run in the systemLaunch execution and issue statistic
      Track the activity of your QA teamProject activity panel
      Track the growth of new test cases in your buildTest-cases growth trend chart
      Track the speed of test failure analysisInvestigated percentage of launches
      Follow up information about only important launches for your teamLaunches table
      Track new BTS issues in your runUnique bugs table
      Track the most unstable test cases in the buildMost failed test-cases table
      See the trend of the number of failed test cases from build to buildFailed cases trend chart
      See the trend of the number of failed and skipped test cases from build to buildNon-passed test-cases trend chart
      Compare two launches togetherDifferent launches comparison chart
      Track passing rate for one launchPassing rate per launch
      Track passing rate for the buildPassing rate summary
      Find the most flakiest test in the buildFlaky test cases table (TOP-20)
      Compare statistics for different builds on one graphCumulative trend chart
      Track the most popular failure reasons in the buildMost popular pattern table (TOP-20)
      Track the passing rate of different components of your applicationComponent health check
      Track the statistics of different components of your applicationComponent health check (table)
      Track the top-20 tests with longest execution timeMost time-consuming test cases widget (TOP-20)
    - + \ No newline at end of file diff --git a/dashboards-and-widgets/WorkWithDashboards/index.html b/dashboards-and-widgets/WorkWithDashboards/index.html index 62ebb9ea9..3459dd464 100644 --- a/dashboards-and-widgets/WorkWithDashboards/index.html +++ b/dashboards-and-widgets/WorkWithDashboards/index.html @@ -12,23 +12,20 @@ - +
    -

    Work with dashboards

    Dashboards on our continuous testing platform are special containers, where users can create widgets.

    To create and use dashboards, navigate to the "Dashboards" tab.

    You can create a dashboard that will be visible on the current project. If you share dashboard on the project, it will be available to all users of the project the dashboard is created in.

    Create dashboard

    To create a new dashboard, perform the following steps:

    1. Navigate to the "Dashboards" page and click "Add New +

      Work with dashboards

      Dashboards on our continuous testing platform are special containers, where users can create widgets.

      To create and use dashboards, navigate to the "Dashboards" tab.

      You can create a dashboard that will be visible on the current project.

      Create dashboard

      To create a new dashboard, perform the following steps:

      1. Navigate to the "Dashboards" page and click "Add New Dashboard" button in the top right corner of the page.

      2. The "Add New Dashboard" popup will be opened.

      3. Enter a name for a new dashboard. The name should be between 3 to 55 characters long and unique for the user per the -project. You can add the description for your dashboard as well.

      4. Select Share mode ON – if you want your dashboard to be shared. Leave -Share mode OFF – if you do not want to share your dashboard.

      5. Click "Add" button. The new dashboard will be created.

      Now you can add widgets to the dashboard.

      Edit own dashboard

      To edit a dashboard, perform the following steps:

      1. Navigate to "All Dashboards" page.

      2. Click the "Edit" icon in the top corner of the dashboard or +project. You can add the description for your dashboard as well.

      3. Click "Add" button. The new dashboard will be created.

      Now you can add widgets to the dashboard.

      Edit dashboard

      To edit a dashboard, perform the following steps:

      1. Navigate to "All Dashboards" page.

      2. Click the "Edit" icon in the top corner of the dashboard or click the name of the dashboard and click 'Edit' button in the header of the dashboard.

      3. The "Edit Dashboard" popup will be opened.

      4. Make the necessary changes and click "Update" button. The dashboard will -be displayed with updates.

      Delete dashboard

      To remove a dashboard from the project, perform the following steps:

      1. Click the "Delete" button in the top right corner of the dashboard.

      2. Click the "Delete" button on confirmation pop-up.

      The dashboard and related widgets will be deleted from the system.

      note

      A user with a PROJECT MANAGER role can delete a dashboard shared by other members by clicking on the ‘Delete’ button -in the top right corner of the dashboard tile. The dashboard will be deleted from the system.

      Shared dashboard

      Dashboards that were created and shared by another project member are stored in Shared Dashboards.

      You can open and see the data on such dashboards, but you are not able to modify or delete them.

      Our test reporting tool allows project members to see shared dashboards by other project members dashboards by a direct link.

      note

      A user with an ADMIN account role / PROJECT MANAGER project role can delete a dashboard shared by other members by clicking on ‘Delete’ icon. -The dashboard and widgets on the dashboard will be deleted from the system.

    - +be displayed with updates.

    Delete dashboard

    To remove a dashboard from the project, perform the following steps:

    1. Click the "Delete" button in the top right corner of the dashboard.

    2. Click the "Delete" button on confirmation pop-up.

    The dashboard and related widgets will be deleted from the system.

    + \ No newline at end of file diff --git a/dev-guides/APIDifferencesBetweenV4AndV5/index.html b/dev-guides/APIDifferencesBetweenV4AndV5/index.html index 7e1b0d56c..4d9a7a647 100644 --- a/dev-guides/APIDifferencesBetweenV4AndV5/index.html +++ b/dev-guides/APIDifferencesBetweenV4AndV5/index.html @@ -12,7 +12,7 @@ - + @@ -30,7 +30,7 @@ Using request above you can retrieve physical id from database of just reported test item and use it in next queries for items, logs etc.

    PUT /v1/{projectName}/item/info - Bulk update items attributes and descriptions.

    PUT /v1/{projectName}/item/issue/link - Link external issue for specified test items.

    PUT /v1/{projectName}/item/issue/unlink - Unlink external issue for specified test items.


    User controller

    GET /v1/user/export - Export information about all users.

    GET /v1/user/registration - Get user bid info.

    GET /v1/user/registration/info - Validate user login and/or email.

    GET /v1/user/search - Search users by term.

    GET /v1/user/{userName}/projects - Retrieve all user projects.

    DELETE /v1/user - Delete specified users by ids.


    Widget controller

    New group of widgets that may have few levels

    GET /v1/{projectName}/widget/multilevel/{widgetId} - Get multilevel widget by id.


    New controllers

    Bug tracking system controller - replacement of external system controller.

    GET /v1/bts/{integrationId}/fields-set - Get list of fields required for posting ticket.

    GET /v1/bts/{integrationId}/issue_types - Get list of allowable issue types for bug tracking system.

    GET /v1/bts/{projectName}/ticket/{ticketId} - Get ticket from the bts integration.

    GET /v1/bts/{projectName}/{integrationId}/fields-set - Get list of fields required for posting ticket (project integration).

    GET /v1/bts/{projectName}/{integrationId}/issue_types - Get list of allowable issue types for bug tracking system (project integration).

    POST - /v1/bts/{projectName}/{integrationId}/ticket - Post ticket to the bts integration.


    Integration controller

    GET /v1/integration/global/all - Get available global integrations.

    GET /v1/integration/global/all/{pluginName} - Get available global integrations for plugin.

    GET /v1/integration/project/{projectName}/all - Get available project integrations.

    GET /v1/integration/project/{projectName}/all/{pluginName} - Get available project integrations for plugin.

    GET /v1/integration/{integrationId} - Get specified global integration by id.

    GET /v1/integration/{integrationId}/connection/test - Test connection to the global integration.

    GET /v1/integration/{projectName}/{integrationId}/connection/test - Test connection to the integration through the project config.

    GET /v1/integration/{projectName}/{integrationId} - Get specified project integration by id.

    PUT /v1/integration/{projectName}/{integrationId} - Update specified project integration by id.

    PUT /v1/integration/{integrationId} - Update specified global integration by id.

    PUT /v1/integration/{projectName}/{integrationId}/{command} - Execute command to the integration instance.

    POST /v1/integration/{pluginName} - Create global integration.

    POST /v1/integration/{projectName}/{pluginName} - Create project integration instance.

    DELETE /v1/integration/all/{type} - Delete all global integrations by type.

    DELETE /v1/integration/{projectName}/all/{type} - Delete all project integrations by type.

    DELETE /v1/integration/{integrationId} - Delete specified global integration by id.

    DELETE /v1/integration/{projectName}/{integrationId} - Delete specified project integration by id.


    Launch asynchronous controller

    POST /v2/{projectName}/launch - Start launch for specified project.

    POST /v2/{projectName}/launch/merge - Merge set of specified launches in common one.

    PUT /v2/{projectName}/launch/{launchId}/finish - Finish launch for specified project.


    Test item asynchronous controller

    POST /v2/{projectName}/item - Start root test item.

    POST /v2/{projectName}/item/{parentItem} - Start child test item.

    PUT /v2/{projectName}/item/{testItemId} - Finish test item.


    Log asynchronous controller

    POST /v2/{projectName}/log - Create log.


    Differences in reporting

    Launch rerun

    Rerun developers guide

    Nested steps

    Nested steps wiki

    Launch logs

    Create log request contains fields launchUuid and itemUuid. At least one of them should not be null.

    {
    "itemUuid": "7f32fb6a-fcc2-4ecb-a4f7-780c559a37ca",
    "launchUuid": "6fd4638d-90e2-4f52-a9bd-bf433ebfb0f3"
    }

    If they both are present - log will be saved as test item log. If only itemUuid is present - log will be saved as test item log. If only launchUuid is present - log will be saved as launch log.

    Java client has static methods for launch log reporting:

    //TODO fix links after java client final version release

    - + \ No newline at end of file diff --git a/dev-guides/AsynchronousReporting/index.html b/dev-guides/AsynchronousReporting/index.html index 1b2113591..1e1c76163 100644 --- a/dev-guides/AsynchronousReporting/index.html +++ b/dev-guides/AsynchronousReporting/index.html @@ -12,7 +12,7 @@ - + @@ -57,7 +57,7 @@ In case the launch finish request is not last in the queue it will be finished anyway. But all the next requests under the launch will be handled as soon as they get to the consumer and the launch statistics will be updated. So it is possible to report items under already finished launch.

    - + \ No newline at end of file diff --git a/dev-guides/AttachmentsGuide/index.html b/dev-guides/AttachmentsGuide/index.html index 4f33230e3..526c765b5 100644 --- a/dev-guides/AttachmentsGuide/index.html +++ b/dev-guides/AttachmentsGuide/index.html @@ -12,7 +12,7 @@ - + @@ -31,7 +31,7 @@ There is no built-in capability to send attachments during test execution as the Jest Reporter works post-factum and does not allow to provide specific data to the report.

    agent-js-postman: There is no built-in capability at the moment to send attachments during test execution due to the specifics of postman nature.

    agent-js-nightwatch: The attachment can be added via ReportingAPI, follow docs for details.

    An example for each agent can be found here.

    How to log attachments (Screenshots) on .Net agents?

    General documentation on this in .net-commons: https://github.com/reportportal/commons-net/blob/develop/docs/Logging.md

    You can attach any binary content:

    Context.Current.Log.Info("my binary", "image/png", bytes);
    // where bytes is byte[] and image/png is mime type of content

    Or use file instead:

    Context.Current.Log.Info("my file", new FileInfo(filePath));
    // where filePath is relative/absolute path to your file
    // mime type is determined automatically
    - + \ No newline at end of file diff --git a/dev-guides/BackEndJavaContributionGuide/index.html b/dev-guides/BackEndJavaContributionGuide/index.html index b7ea7d7ab..c574cf3d1 100644 --- a/dev-guides/BackEndJavaContributionGuide/index.html +++ b/dev-guides/BackEndJavaContributionGuide/index.html @@ -12,7 +12,7 @@ - + @@ -43,7 +43,7 @@ How to apply a fix and check if everything works fine? To do this you should follow these steps:

    • clone/update Commons DAO repository
    • checkout develop branch
    • make changes
    • create branch according to the name policy
    • push to the remote
    • create PR to the develop branch Now you have your branch on the GitHub page and can see the commit hash:
    • go to the service where your changes should be applied (Service API in our example)
    • copy commit hash and replace already existing in the build.gradle of the required service (Service API in our example):
    • after re-building project using gradle dependency will be resolved and downloaded using Jitpack tool
    • create branch according to the name policy
    • push to the remote
    • create a PR to the develop branch

    Summary notes

    This documentation should help you save your time by configuring ReportPortal local dev environment and give you understanding of some standards/conventions that we try stick to.

    Simplified development workflow should look like this:

    • always have the latest schema and data in your local DB instance using this instructions
    • checkout develop branch in the required repository
    • make changes
    • if changes in dependencies are required:
      • go to the dependency repository, make changes, create a branch and PR according to conventions
      • using commit hash update dependency in the build.gradle
    • create branch according to the name policy
    • push to the remote
    • create a PR according to the name policy
    - + \ No newline at end of file diff --git a/dev-guides/InteractionsBetweenAPIAndAnalyzer/index.html b/dev-guides/InteractionsBetweenAPIAndAnalyzer/index.html index ed71bd8bf..4b5094b6d 100644 --- a/dev-guides/InteractionsBetweenAPIAndAnalyzer/index.html +++ b/dev-guides/InteractionsBetweenAPIAndAnalyzer/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Interactions between API and Analyzer

    Overview

    Communication between API service and analyzer service is carried out using AMQP 0-9-1 and RabbitMQ as message broker. API service creates virtual host inside RabbitMQ with name analyzer on start. Analyzers in theirs turn connect to the virtual host and declare exchange with name and arguments. Any type of request from API and response from analyzer stores in the same queue. Request and response messages is presented as JSON.

    Declaring exchange

    Each analyzer has to declare direct exchange with the following arguments:

    • analyzer - Name of analyzer (string)
    • version - Analyzer version (string)
    • analyzer_index - Is indexing supported (boolean, false by default)
    • analyzer_log_search - Is log searching supported (boolean, false by default)
    • analyzer_priority - Priority of analyzer (number). The lower the number, the higher the priority.

    Declaring queues

    Each analyzer has to declare 5 queues with names: analyze, search, index, clean, delete.

    Indexing

    Index request can be used to store info about logs and then analysis will be proceed based on the info. Requests and responses use index queue.

    Index request structure from API:

    IndexLaunch:

    AttributeDescriptionExample
    launchIdId of launch101
    launchNameName of launchSmoke Test
    projectId of project12
    analyzerConfigAnalyzer configuration
    testItemsArray of test items

    AnalyzerConfig:

    AttributeDescriptionExample
    minDocFreqThe minimum frequency of the saved logs1
    minTermFreqThe minimum frequency of the word in the analyzed log1
    minShouldMatchPercent of words equality between analyzed log and particular log from index95
    numberOfLogLinesThe number of first lines of log message that should be considered in indeT-1
    isAutoAnalyzerEnabledIs auto analysis enabledtrue
    analyzerModeAnalysis mode. Allowable values: "all", "launch_name", "current_launch"all
    indexingRunningIs indexing runningfalse

    IndexTestItem:

    AttributeDescriptionExample
    testItemIdId of test item123
    issueTypeIssue type locatorpb001
    uniqueIdUnique id of test itemauto:c6edafc24a03c6f69b6ec070d1fd0089
    isAutoAnalyzedIs test item auto analyzedfalse
    logsArray of test item logs

    IndexLog:

    AttributeDescrioptionExample
    logIdId of log125
    logLevelLog level40000
    messageLog messagejava.lang.AssertionError: 1 expectation failed. Expected status code <200> but was <400>. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

    API send array of IndexLaunch entities that have to be indexed.

    Example in json :

    [
    {
    "launchId":110,
    "launchName":"Smoke Test",
    "project":11,
    "analyzerConfig":{
    "minDocFreq":1,
    "minTermFreq":1,
    "minShouldMatch":95,
    "numberOfLogLines":-1,
    "isAutoAnalyzerEnabled":true,
    "analyzerMode":"all",
    "indexingRunning":false
    },
    "testItems":[
    {
    "testItemId":101,
    "issueType":"pb001",
    "uniqueId":"auto:c6edafc24a03c6f69b6ec070d1fd0089",
    "isAutoAnalyzed":false,
    "logs":[
    {
    "logId":111,
    "logLevel":40000,
    "message":"java.lang.AssertionError: 1 expectation failed. Expected status code <200> but was <400>."
    },
    {
    "logId":112,
    "logLevel":40000,
    "message":"java.lang.AssertionError: 1 expectation failed. Expected status code <200> but was <500>."
    }
    ]
    }
    ]
    }
    ]

    Analyzer should return response with number of indexed logs.

    Analyze

    Analyze request can be used to find matches from request in indexed data. Requests and responses use analyze queue.

    Analyze request is the same as IndexLaunch entity used for indexing. It contains info about test items and logs thad have to be analyzed.

    Response from analyzer should contain array of the following entities (info about analyzed test items):

    AnalyzedItemRs:

    AttributeDescriptionExample
    itemIdId of analyzed test item111
    relevantItemIdId of relevant test item123
    issueTypeIssue type locatorpb001

    Search logs

    Search request can be used to find similar logs from test items with to_investigate type. Requests and responses use search queue.

    Search logs request from API:

    SearchRq:

    AttributeDescriptionExample
    launchIdId of launch111
    launchNameName of launchSmoke Test
    itemIdId of test item112
    projectIdId of project10
    filteredLaunchIdsArray of launch ids, among with search would be applied[1,2,3]
    logMessagesArray of log messages looking for["first message", "second message"]
    logLinesNumber of logs lines that will be used in comparison5

    Analyzer should return array of log ids that matches as a response.

    Clean

    Clean request can be used to remove stored log from index. Requests use clean queue.

    Clean logs request from API:

    CleanIndexRq:

    AttributeDescriptionExample
    projectId of project10
    idsArray of log ids to be removed[111, 122, 123]

    Analyzer do not send response on the request.

    Delete

    Delete request can be used to delete entire index. Requests use delete queue.

    Request message from API contains only id of index.

    Analyzer do not send response on the request.

    Examples

    Custom analyzer written in java using Spring AMQP.

    - + \ No newline at end of file diff --git a/dev-guides/PluginDevelopersGuide/index.html b/dev-guides/PluginDevelopersGuide/index.html index bcf1cca1c..eb4674cc0 100644 --- a/dev-guides/PluginDevelopersGuide/index.html +++ b/dev-guides/PluginDevelopersGuide/index.html @@ -12,7 +12,7 @@ - + @@ -35,7 +35,7 @@ allows us to load it using GetFileCommand.

    That's how our build.gradle looks now:

    import com.github.spotbugs.SpotBugsTask

    plugins {
    id "io.spring.dependency-management" version "1.0.9.RELEASE"
    id 'java'
    id 'com.github.johnrengelman.shadow' version '5.2.0'
    id "com.moowork.node" version "1.3.1"
    }

    apply from: 'ui.gradle'

    repositories {
    mavenCentral()
    }

    dependencies {
    implementation 'com.epam.reportportal:plugin-api:5.4.0'
    annotationProcessor 'com.epam.reportportal:plugin-api:5.4.0'
    }

    artifacts {
    archives shadowJar
    }

    sourceSets {
    main {
    resources
    {
    exclude '**'
    }
    }
    }

    jar {
    from("src/main/resources") {
    into("/resources")
    }
    from("ui/build") {
    into("/resources")
    }
    manifest {
    attributes(
    "Class-Path": configurations.compile.collect { it.getName() }.join(' '),
    "Plugin-Id": "${pluginId}",
    "Plugin-Version": "${project.version}",
    "Plugin-Provider": "Report Portal",
    "Plugin-Class": "com.epam.reportportal.extension.example.ExamplePlugin",
    "Plugin-Service": "api"
    )
    }
    }

    shadowJar {
    from("src/main/resources") {
    into("/resources")
    }
    from("ui/build") {
    into("/resources")
    }
    configurations = [project.configurations.compile]
    zip64 true
    dependencies {
    }
    }

    task plugin(type: Jar) {
    getArchiveBaseName().set("plugin-${pluginId}")
    into('classes') {
    with jar
    }
    into('lib') {
    from configurations.compile
    }
    extension('zip')
    }

    task assemblePlugin(type: Copy) {
    from plugin
    into pluginsDir
    }

    task assemblePlugins(type: Copy) {
    dependsOn subprojects.assemblePlugin
    }

    compileJava.dependsOn npm_run_build

    Now we can just execute ./gradlew build and get plugin binaries (as jar and as shadowJar) that can be loaded to the application.

    Event listeners

    All plugin commands are executed through the core application end-point with mapping:

    https://host:port/v1/integration/{projectName}/{integrationId}/{command}

    As we can see integrationId is a mandatory parameter that specifies integration to be used in the command execution.

    We can affect logic executed in core application from the plugin by handling predefined set of events. As for now we will use mandatory PluginLoadedEventHandler as an example.

    This handler creates the very first integration and uses PluginInfoProvider to update plugin data in the database.

    To add a new listener we should use ApplicationContext after plugin was loaded - so we do it in the method marked by @PostConstruct.

    Also, we should remove listeners when we unload plugin - so we implement DisposableBean interface and provide this logic in the preDestroy() method.

    That's how our extension looks now:


    @Extension
    public class ExampleExtension implements ReportPortalExtensionPoint, DisposableBean {

    public static final String BINARY_DATA_PROPERTIES_FILE_ID = "example-binary-data.properties";
    private static final String PLUGIN_ID = "example";
    private final String resourcesDir;

    private final Supplier<Map<String, PluginCommand<?>>> pluginCommandMapping = new MemoizingSupplier<>(this::getCommands);
    private final Supplier<ApplicationListener<PluginEvent>> pluginLoadedListenerSupplier;

    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    private IntegrationTypeRepository integrationTypeRepository;

    @Autowired
    private IntegrationRepository integrationRepository;

    public ExampleExtension(Map<String, Object> initParams) {
    resourcesDir = IntegrationTypeProperties.RESOURCES_DIRECTORY.getValue(initParams).map(String::valueOf).orElse("");

    pluginLoadedListenerSupplier = new MemoizingSupplier<>(() -> new ExamplePluginEventListener(PLUGIN_ID,
    new PluginEventHandlerFactory(integrationTypeRepository,
    integrationRepository,
    new PluginInfoProviderImpl(resourcesDir, BINARY_DATA_PROPERTIES_FILE_ID)
    )
    ));
    }

    @Override
    public Map<String, ?> getPluginParams() {
    Map<String, Object> params = new HashMap<>();
    params.put(ALLOWED_COMMANDS, new ArrayList<>(pluginCommandMapping.get().keySet()));
    return params;
    }

    @Override
    public PluginCommand<?> getCommandToExecute(String commandName) {
    return pluginCommandMapping.get().get(commandName);
    }

    @PostConstruct
    public void createIntegration() throws IOException {
    initListeners();
    }

    private void initListeners() {
    ApplicationEventMulticaster applicationEventMulticaster = applicationContext.getBean(AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME,
    ApplicationEventMulticaster.class
    );
    applicationEventMulticaster.addApplicationListener(pluginLoadedListenerSupplier.get());
    }

    @Override
    public void destroy() {
    removeListeners();
    }

    private void removeListeners() {
    ApplicationEventMulticaster applicationEventMulticaster = applicationContext.getBean(AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME,
    ApplicationEventMulticaster.class
    );
    applicationEventMulticaster.removeApplicationListener(pluginLoadedListenerSupplier.get());
    }

    private Map<String, PluginCommand<?>> getCommands() {
    Map<String, PluginCommand<?>> pluginCommandMapping = new HashMap<>();
    pluginCommandMapping.put("getFile", new GetFileCommand(resourcesDir, BINARY_DATA_PROPERTIES_FILE_ID));
    pluginCommandMapping.put("testConnection", (integration, params) -> true);
    return pluginCommandMapping;
    }
    }

    Lazy initialization

    All plugin components that relies on @Autowired dependencies should be loaded lazily using MemoizingSupplier or another lazy-load mechanism. This is the restriction of plugin installation flow:

    We create extension object using constructor and only then we autowire dependencies. If we don't use lazy initialization - all objects created in the constructor will be created with NULL objects that were marked as @Autowired
    - + \ No newline at end of file diff --git a/dev-guides/ReportPortalAPI/index.html b/dev-guides/ReportPortalAPI/index.html index ee1686c0b..5ac1600de 100644 --- a/dev-guides/ReportPortalAPI/index.html +++ b/dev-guides/ReportPortalAPI/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/dev-guides/ReportingDevelopersGuide/index.html b/dev-guides/ReportingDevelopersGuide/index.html index 0606cfa56..0a81a67a1 100644 --- a/dev-guides/ReportingDevelopersGuide/index.html +++ b/dev-guides/ReportingDevelopersGuide/index.html @@ -12,7 +12,7 @@ - + @@ -42,7 +42,7 @@ To do that use the same log endpoint, but in body do not send itemUuid

    {
    "launchUuid": "96d1bc02-6a3f-451e-b706-719149d51ce4",
    "time": "2019-11-06T15:50:53.187Z",
    "message": "java.lang.NullPointerException",
    "level": 40000,
    "file": {
    "name": "file2.txt"
    }
    }

    The same way we can report all the rest test items.

    Finish root(suite) item

    Finishing root item can be done the same way as finish parent item and finish child item. But we should specify its uuid in request parameter.

    curl --header "Content-Type: application/json" \
    --header "Authorization: Bearer 039eda00-b397-4a6b-bab1-b1a9a90376d1" \
    --request PUT \
    --data '{"endTime":"1574423247000","launchUuid":"96d1bc02-6a3f-451e-b706-719149d51ce4"}' \
    http://rp.com/api/v1/rp_project/item/1e183148-c79f-493a-a615-2c9a888cb441
    {
    "endTime": "1574423247000",
    "launchUuid": "96d1bc02-6a3f-451e-b706-719149d51ce4"
    }

    Finish launch

    When we finished all test items, it's time to finish launch. Endpoint:

    PUT /api/{version}/{projectName}/launch/{launchUuid}/finish

    Finish request model:

    AttributeRequiredDescriptionDefault valueExamples
    endTimeYesLaunch end time-2019-11-22T11:47:01+00:00 (ISO 8601); Fri, 22 Nov 2019 11:47:01 +0000 (RFC 822, 1036, 1123, 2822); 2019-11-22T11:47:01+00:00 (RFC 3339); 1574423221000 (Unix Timestamp)
    statusNoLaunch status. Allowable values: "passed", "failed", "stopped", "skipped", "interrupted", "cancelled"calculated from children test itemsfailed
    descriptionNoLaunch description. Overrides description on startemptyservice test
    attributesNoLaunch attributes. Pairs of key and value. Overrides attributes on startempty

    Finish response model

    AttributeRequiredDescriptionExample
    idYesLaunch UUID6f084c4d-edb5-4691-90ba-d9e819ba61ba
    number (*)NoLaunch number1
    link (*)NoUI link to launchhttp://rp.com/ui/#rp_project/launches/all/73336

    (*) - In case async endpoint field is missing or empty

    Full request:

    curl --header "Content-Type: application/json" \
    --header "Authorization: Bearer 039eda00-b397-4a6b-bab1-b1a9a90376d1" \
    --request PUT \
    --data '{"endTime":"1574423255000"}' \
    http://rp.com/api/v1/rp_project/launch/96d1bc02-6a3f-451e-b706-719149d51ce4/finish

    Where body is:

    {
    "endTime": "1574423255000"
    }

    Example

    Example using bash yo can find here

    - + \ No newline at end of file diff --git a/dev-guides/RerunDevelopersGuide/index.html b/dev-guides/RerunDevelopersGuide/index.html index 48a259b57..2bd6e0737 100644 --- a/dev-guides/RerunDevelopersGuide/index.html +++ b/dev-guides/RerunDevelopersGuide/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Rerun developers guide

    What is rerun

    Let's imagine we have some set of tests:

    After run we can see few failed items:

    We are fixing issues and want to launch tests again. But running all the tests can take a lot of time. So it would be better to run only failed tests from previous launch.

    Now we have the following:

    So what do we have here? Two launches with the same tests that was just be started again, but they are have difference in passed and failed items. And it is hard to find which test was fixed and which was not.

    The main idea of reruns is to restart the same launch and trace changes between them not creating new launch every time.

    Let's try to report the same launches using rerun.

    We have only one launch with last run data

    On the step view we can see that items with names getActivitiesForProject, getActivityPositive and getTestITemActivitiesPositive have retries. Items getActivityPositive and getTestITemActivitiesPositive was fixed and getActivitiesForProject is still failing.

    How to start rerun

    Latest launch

    Using API

    To start launch rerun you should call default start launch endpoint adding "rerun"=true parameter in the request body.

    {
    "name": "launch_name",
    "description": "some description",
    "mode": "DEFAULT",
    "rerun": true
    }

    And response will contain found launch id for asynchronous endpoint or id and number for synchronous.

    {
    "id": "89f6d409-bee0-428e-baca-4848f86c06e7",
    "number": 4
    }

    Using agent

    To start launch rerun add rp.rerun=true to reportportal.properties file. No need to change anything else(name, project, etc.).

    rp.endpoint=https://rp.com
    rp.apiKey=caccb4bd-f6e7-48f2-af3a-eca0f566b3bd
    rp.launch=rerun_test_example
    rp.project=reporting-test
    rp.reporting.async=true
    rp.rerun=true

    Handling

    System tries to find the latest launch on the project with same name as in request.

    If launch found - system updates the following attributes (if they are present in request and they are different from stored):

    • Mode
    • Description
    • Attributes
    • UUID
    • Status = IN_PROGRESS

    If system cannot find launch with the same name - system throws error with 404 code.

    Specified launch

    Using API

    To start launch rerun you should call default start launch endpoint adding "rerun"=true and "rerunOf"=launch_uuid parameters in the request body. Where launch_uuid is UUID of launch that have to be reruned.

    {
    "name": "launch_name",
    "description": "some description",
    "mode": "DEFAULT",
    "rerun": true,
    "rerunOf": "79446272-a439-45f9-8073-5ca7869f140b"
    }

    And response will contain found launch id for asynchronous endpoint or id and number for synchronous.

    {
    "id": "79446272-a439-45f9-8073-5ca7869f140b",
    "number": 4
    }

    Using agent

    To start launch rerun set rp.rerun=true and rp.rerun.of=launch_uuid in reportportal.properties file. Where launch_uuid is UUID of launch that have to be reruned.

    rp.endpoint=https://rp.com
    rp.apiKey=caccb4bd-f6e7-48f2-af3a-eca0f566b3bd
    rp.launch=rerun_test_example
    rp.project=reporting-test
    rp.reporting.async=true
    rp.rerun=true
    rp.rerun.of=79446272-a439-45f9-8073-5ca7869f140b

    Where 79446272-a439-45f9-8073-5ca7869f140b is UUID of desired launch.

    Handling

    The same as for specified launch.

    Test Items behavior

    There are no differences in API calls for starting and finishing items inside rerun launch. But such items handling is different.

    Container types (has children)

    System tries to find item with the same name, set of parameters and under the same path.

    If such item found - the following attributes will be updated:

    • Description
    • UUID
    • Status = IN_PROGRESS

    If not - new item will be created.

    Step types (without children)

    System tries to find item with the same name, set of parameters and under the same path.

    If such item found - retry of the item will be created.

    If not - new item will be created.

    Example

    You can try to rerun launch here

    - + \ No newline at end of file diff --git a/dev-guides/RetriesReporting/index.html b/dev-guides/RetriesReporting/index.html index 17a5a193f..418597974 100644 --- a/dev-guides/RetriesReporting/index.html +++ b/dev-guides/RetriesReporting/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ Also Test item with type Suite cannot be reported as a retry.

    Retries handling triggered only if Test item has retry=true flag in the request. For example:

    First request will trigger retries handling, but if it's the first reported Test item it won't be a retry:

    {
    "name": "example step",
    "startTime": "1574423237100",
    "type": "step",
    "launchUuid": "<launch uuid>",
    "description": "Item that should be retried",
    "retry": true
    }

    Second request won't trigger retries handling, because retry=false is specified (or this field isn't provided) in the request:

    {
    "name": "example step",
    "startTime": "1574423237100",
    "type": "step",
    "launchUuid": "<launch uuid>",
    "description": "Item that should be retried",
    "retry": false
    }

    As a result 2 separate Test items will be displayed, so ORDER of sent requests matters (if send this items in reversed order they will be grouped as retries).

    In ReportPortal the only Test item from the Retries group that has statistics and can have an issue attached is the one with max startTime. In previous requests startTime was 1574423237000 for the first one and 1574423237100 for the second one, so the second one is a 'main' Test Item with statistics and issue (if attached).

    - + \ No newline at end of file diff --git a/index.html b/index.html index 65250e468..4638fa0a5 100644 --- a/index.html +++ b/index.html @@ -12,7 +12,7 @@ - + @@ -20,10 +20,10 @@

    What is ReportPortal?

    ReportPortal is a TestOps service, that provides increased capabilities to speed up results analysis and reporting through the use of built-in analytic features.

    ReportPortal is a great addition to Continuous Integration and Continuous -Testing process.

    What ReportPortal can do?

    • Mainstream platforms integration

    ReportPortal seamlessly integrates with mainstream platforms such as Jenkins, Jira, BDD process, majority of Functional and Unit testing frameworks.

    • Real-time results

    Real-time integration provides businesses the ability to manage and track execution status directly from the ReportPortal.

    • Test case execution results structure

    Test case execution results are stored following the same structure you have in your reporting suites and test plan. The test cases are shown together with all related data in one place, right where you need it: logs, screenshots, binary data. The execution pipeline of certain test cases are also available for you, so one can see previous test execution report in one click.

    • Collaborative analysis

    Our test report dashboard also gives you the ability to collaboratively analyze the test automation results and quickly get automation test report. Particular test cases can be associated with a product bug, an automation issue, a system issue or can be submitted as an issue ticket directly from the execution result.

    • Historical data of test execution

    ReportPortal provides enhanced capabilities along with auto-results analysis by +Testing process.

    ReportPortal is distributed under the Apache v2.0 license, and it is free to use and modify, even for commercial purposes. We offer the only paid premium feature – Quality Gates.

    If a company is interested in our services, we can provide support hours to deploy, integrate, configure, or customize the tool, as well as SaaS options.

    What ReportPortal can do?

    • Mainstream platforms integration

    ReportPortal seamlessly integrates with mainstream platforms such as Jenkins, Jira, BDD process, majority of Functional and Unit testing frameworks.

    • Real-time results

    Real-time integration provides businesses the ability to manage and track execution status directly from the ReportPortal.

    • Test case execution results structure

    Test case execution results are stored following the same structure you have in your reporting suites and test plan. The test cases are shown together with all related data in one place, right where you need it: logs, screenshots, binary data. The execution pipeline of certain test cases are also available for you, so one can see previous test execution report in one click.

    • Collaborative analysis

    Our test report dashboard also gives you the ability to collaboratively analyze the test automation results and quickly get automation test report. Particular test cases can be associated with a product bug, an automation issue, a system issue or can be submitted as an issue ticket directly from the execution result.

    • Historical data of test execution

    ReportPortal provides enhanced capabilities along with auto-results analysis by leveraging historical data of test execution.

    • Automatic Analysis

    With each execution, ReportPortal automatically figures out the root cause of a fail. As a result of AI-based defects triage, ReportPortal is marking a test result with a flag. Engineers will be alerted about this issue to provide further analysis: if it has been resolved already or which test results require actual human analysis.

    What technologies are used?

    Considering a high load rate and performance requirements, we use cutting edge technologies such as:

    • PostgreSQL - The World's Most Advanced Open Source Relational Database.

    • REST Web Service - lightweight requests, industry standard.

    • Mobile responsive UI - check it at any mobile device with the default browser.

    Benefits of report automation with ReportPortal

    Report automation is the procedure by which reports are routinely and automatically refreshed.

    • Speedy decision-making

    Report automation is an effective technique to provide information that is essential to business operations. Delivering crucial information to the appropriate people at the appropriate time becomes considerably quicker and simpler by automatically generated reports. It allows to get business faster insights and drive better decisions.

    • Accurate data

    In ReportPortal, you have fully real-time analytic report automation. Since the reports are automatically generated, you are insured against human error when reports are generated manually.

    • Advanced reporting

    ReportPortal offers widgets with a user-friendly visual interface to create interactive reports for all your needs. For example, you can build qa metrics dashboard using Overall statistics, Unique bugs table, Passing rate summary widgets.

    • Easily running CI/CD tests

    ReportPortal is CI/CD agnostic tool solution. You can use any CI environment to run automated tests to improve quality of product by catching issues early in development lifecycle.

    - + \ No newline at end of file diff --git a/installation-steps/AdditionalConfigurationParameters/index.html b/installation-steps/AdditionalConfigurationParameters/index.html index c8020447e..6586d437b 100644 --- a/installation-steps/AdditionalConfigurationParameters/index.html +++ b/installation-steps/AdditionalConfigurationParameters/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Additional configuration parameters

    Configuration parameterDefault ValueServiceDescription
    RP_PROFILES-API,UATSpecifies application settings profiles. Should be set to 'docker'
    RP_SESSION_LIVE3600UATSession token live time in seconds
    RP_SERVER_PORT8080UIUI service port
    POSTGRES_SERVERpostgresAPI,UAT,MIGRATIONSPostgreSQL host
    POSTGRES_PORT5432API,UAT,MIGRATIONSPostgreSQL port
    POSTGRES_USERrpuserAPI,UAT,MIGRATIONSPostgreSQL user name
    POSTGRES_PASSWORDrppassAPI,UAT,MIGRATIONSPostgreSQL user password
    POSTGRES_DBreportportalAPI,UAT,MIGRATIONSPostgreSQL database name
    RABBITMQ_DEFAULT_USERrabbitmqAPI,ANALYZERPostgreSQL database name
    RABBITMQ_DEFAULT_PASSrabbitmqAPI,ANALYZERPostgreSQL database name

    Example of docker compose with filled out configuration parameters can be found here.

    - + \ No newline at end of file diff --git a/installation-steps/BasicMonitoringConfiguration/index.html b/installation-steps/BasicMonitoringConfiguration/index.html index 3dda978a8..8ffecc3d7 100644 --- a/installation-steps/BasicMonitoringConfiguration/index.html +++ b/installation-steps/BasicMonitoringConfiguration/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ To avoid competition for resources with the services of the ReportPortal, deploy a separate virtual machine for monitoring (for our instances we using m5.large shape for the monitoring node) and install the following services:

    1) InfluxDB database: https://docs.influxdata.com/influxdb/v2.0/install/?t=Docker;

    2) Grafana: Dashboard examples(Grafana IDs): 5955, 3056.

    3) Telegraf:

    • Kubernetes deployment: telegraf agent needs to be installed at each cluster node.
    • Docker deployment: telegraf agent should be installed at the ReportPortal VM. In case of rollouting the Database server on the separate VM, telegraf agent should be installed also at that VM.

    Telegraf installation guide:

    Update your system.

        sudo yum -y update

    Add Influxdata RPM repository.

        cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
    [influxdb]
    name = InfluxDB Repository - RHEL
    baseurl = https://repos.influxdata.com/rhel/7/x86_64/stable/
    enabled = 1
    gpgcheck = 1
    gpgkey = https://repos.influxdata.com/influxdb.key
    EOF

    Install Telegraf on RHEL 8 / CentOS 8. Once the repository has been added, install Telegraf on RHEL 8 using the command below.

        sudo dnf -y install telegraf

    Open "telegraf.conf" file for the monitoring configuration. In the case of Kubernetes deployment need to configure telegraf on each cluster node separately.

        sudo nano /etc/telegraf/telegraf.conf

    Change following configs(press Ctrl+W to search for the particular configs):

        hostname = "api_node_1"

    Search for the "outputs.influxdb" and update URL and database name for the InfluxDB:

        [[outputs.influxdb]]
    urls = ["http://<influxdb_host>:8086"]
    database = "telegraf"

    Search for the "inputs.docker" and update next configs(should be uncommented each value which you need to add to the monitoring):

        [[inputs.docker]]
    endpoint = "unix://var/run/docker.sock"
    perdevice_include = ["cpu"]
    total_include = ["cpu", "blkio", "network"]

    Search for the "inputs.net" for adding the network metrics to the monitoring. Uncomment only the plugin name:

        [[inputs.net]]

    Save changes, close "telegraf.conf" and start telegraf service:

        sudo systemctl enable --now telegraf

    Check the status(should be green and in active running status):

        sudo systemctl status telegraf

    In case of errors "E! [inputs.docker] Error in plugin: Got permission denied while trying to connect to the Docker daemon socket at unix://var/run/docker.sock Permission denied"

    Need to add permissions to the /var/run/docker.sock:

        sudo chmod 666 /var/run/docker.sock

    PGHero - simple monitoring dashboard for PostgreSQL

    Functionality

    • requests statistic: number of calls, average and total execution time (with the ability to store history);
    • currently active queries;
    • information about tables: disk space occupied, dates of the last VACUUM and ANALYSE launches;
    • information about indexes: disk space occupied, presence of duplicated / unused indexes;
    • recommendations regarding adding an index on complex queries with Seq Scan;
    • statistics on open connections to the database;
    • displaying basic database settings that affect performance (shared_buffers, work_mem, maintenance_work_mem, etc.).

    Installation

    How to enable query stats

    In the database settings(for RDS database - in parameter group) add/change the following parameters:

        shared_preload_libraries = 'pg_stat_statements'
    pg_stat_statements.track = all
    pg_stat_statements.max = 10000
    track_activity_query_size = 2048

    Restart the database or reboot the RDS instance. As a superuser from the psql console, run:

        CREATE extension pg_stat_statements;

    How to configure historical query stats

    To track query stats over time, create a table to store them.

    Execute the following query for table creation:

        CREATE TABLE "pghero_query_stats" (
    "id" bigserial primary key,
    "database" text,
    "user" text,
    "query" text,
    "query_hash" bigint,
    "total_time" float,
    "calls" bigint,
    "captured_at" timestamp
    );

    Build index on the created table:

        CREATE INDEX ON "pghero_query_stats" ("database", "captured_at");

    Include the following to the installation string to schedule the task to run every 5 minutes:

        bin/rake pghero:capture_query_stats

    The query stats table can grow large over time. Remove old stats with:

        bin/rake pghero:clean_query_stats
    - + \ No newline at end of file diff --git a/installation-steps/DeployOnUbuntuOS/index.html b/installation-steps/DeployOnUbuntuOS/index.html index b5665b12c..5ea8671f3 100644 --- a/installation-steps/DeployOnUbuntuOS/index.html +++ b/installation-steps/DeployOnUbuntuOS/index.html @@ -12,7 +12,7 @@ - + @@ -25,7 +25,7 @@ docker ps to check that all containers from previous step are up and running.

    1. Check that ReportPortal is running In the VM opten browser to 0.0.0.0:8080 --> ReportPortal login page will open.
    note

    If you are behind a proxy you need to add 0.0.0.0 to the NO_PROXY (no_proxy) ENV.
    After setting the port forwarding like explained in video PART 2 (link below) open browser on your host machine to localhost:8080 or 127.0.0.1:8080 --> ReportPortal loginpage will open

    OPTIONAL

    If you don't like to write 'sudo' before each docker-command do this but be aware of possible security issue with that!

       sudo groupadd docker
    sudo usermod -aG docker $USER

    >>> RESTART VM!

    Helpful links (video tutorial)

    Part 1

    Part 2

    - + \ No newline at end of file diff --git a/installation-steps/DeployWithAWSECSFargate/index.html b/installation-steps/DeployWithAWSECSFargate/index.html index 799db13f7..4ca065268 100644 --- a/installation-steps/DeployWithAWSECSFargate/index.html +++ b/installation-steps/DeployWithAWSECSFargate/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ c. Now inspect the logs of traefik service to see if all RP components are being picked up in the configuration from ECS provider.

    Index: For some obvious reasons the index (with Ruby runtime) service couldn't run on ECS - hence ported to Lambda with Python runtime. Create a lambda function with 128M memory & 120s timeout with following code.

    Add environment variable TRAEFIK_SERVICES_URL with the IP address of Traefik endpoint (it can be fetched from the task details. Eg: http://192.168.2.120:8081)

    mureq can be obtained from mureq.py - place it beside the lamda_function.py file.

    import os
    import json
    import mureq


    def lambda_handler(event, context):
    print("-------------------EVENT BEGIN-------------------------------")
    print(event)
    print("-------------------EVENT END-------------------------------")
    traefik_services= mureq.get(os.environ['TRAEFIK_SERVICES_URL'])

    if event['path'] == '/composite/info':
    rp_status = {}
    for service in traefik_services.json():
    if "loadBalancer" in service:
    app_name = service['name'].replace('@ecs','')
    app_info = mureq.get(service['loadBalancer']['servers'][0]['url'] + '/info')
    rp_status.update({app_name: app_info.json()})
    return{
    "statusCode": 200,
    "statusDescription": "200 OK",
    "isBase64Encoded": False,
    "headers": {
    "Content-Type": "application/json"
    },
    "body": json.dumps(rp_status)
    }
    if event['path'] == '/composite/health':
    rp_health = {}
    for service in traefik_services.json():
    if "loadBalancer" in service:
    app_name = service['name'].replace('@ecs','')
    app_health = list(service['serverStatus'].values())[0]
    rp_health.update({app_name: app_health})
    return{
    "statusCode": 200,
    "statusDescription": "200 OK",
    "isBase64Encoded": False,
    "headers": {
    "Content-Type": "application/json"
    },
    "body": json.dumps(rp_health)
    }
    if event['path'] == '/':
    redirect_url= event['headers']['x-forwarded-proto'] + "://" + event['headers']['host'] + '/ui'
    print(redirect_url)
    return{
    "statusCode": 301,
    "statusDescription": "301 Found",
    "isBase64Encoded": False,
    "headers": {
    "Location": redirect_url
    },
    "body": ""
    }

    if event['path'] == '/ui':
    redirect_url= event['headers']['x-forwarded-proto'] + "://" + event['headers']['host'] + '/ui/'
    print(redirect_url)
    return{
    "statusCode": 301,
    "statusDescription": "301 Found",
    "isBase64Encoded": False,
    "headers": {
    "Location": redirect_url
    },
    "body": ""
    }

    Now add this lambda to the Index TargetGroup created earlier.

    DNS

    Add relevent DNS records in the Route53 hostedzone.

    Validation

    Access the application with default credentials once the DNS record addition is propogated & validate if all sections are loading without errors.

    - + \ No newline at end of file diff --git a/installation-steps/DeployWithDockerOnLinuxMac/index.html b/installation-steps/DeployWithDockerOnLinuxMac/index.html index 40f218ac3..40d74b89c 100644 --- a/installation-steps/DeployWithDockerOnLinuxMac/index.html +++ b/installation-steps/DeployWithDockerOnLinuxMac/index.html @@ -12,15 +12,15 @@ - +
    -

    Deploy with Docker on Linux/Mac

    ReportPortal can be easily deployed using Docker Compose.

    Install Docker

    Docker is supported by all major Linux distributions, MacOS and Windows.

    ⚠️ Recomended change resources limits at least 2 CPU 5 GB RAM for Docker Desktop: MAC | Windows | Linux

    Deploy ReportPortal with Docker

    1. Download the latest ReportPortal Docker Compose file from here. You can make it by run the following command:
    curl -LO https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml
    1. Make the ElasticSearch configuration prerequisites for the analyzer service

      • OPTIONAL: Set {vm.max_map_count} kernel setting before ReportPortal deploying with the following Commands
      • Give right permissions to ElasticSearch data folder using the following commands:
    mkdir -p data/elasticsearch
    chmod 777 data/elasticsearch
    chgrp 1000 data/elasticsearch

    For more details about ElasticSearch visit ElasticSearch guide

    OPTIONAL

    PostgreSQL Performance Tuning

    Depends on your hardware configuration and parameters of your system, you can additionally optimize your PostgreSQL performance by adding the following parameters to "command" option in the Docker compose file:

     -c effective_io_concurrency=
    -c shared_buffers=
    -c max_connections=
    -c effective_cache_size=
    -c maintenance_work_mem=
    -c random_page_cost=
    -c seq_page_cost=
    -c min_wal_size=
    -c max_wal_size=
    -c max_worker_processes=
    -c max_parallel_workers_per_gather=

    Please choose set the values of these variables that are right for your system.

    You can also change PostgreSQL host by passing a new value to POSTGRES_SERVER environment variable.

    1. Start the application using the following command:
    docker-compose -p reportportal up -d --force-recreate

    Where:

    • -p reportportal adds project prefix 'reportportal' to all containers
    • up creates and starts containers
    • -d daemon mode
    • --force-recreate Re-creates containers if there any

    Useful commands:

    • docker-compose logs shows logs from all containers
    • docker logs <container_name> shows logs from selected container
    • docker ps -a | grep "reportportal_" | awk '{print $1}' | xargs docker rm -f Deletes all ReportPortal containers
    • docker-compose down
    1. Open your web-browser with an IP address of the deployed environment at port 8080

    Use the following login\pass to access:

    • Default User: default\1q2w3e
    • Administrator: superadmin\erebus

    ⚠️ Please change the admin password for better security

    - +

    Deploy with Docker on Linux/Mac

    ReportPortal can be easily deployed using Docker Compose.

    Install Docker

    Docker is supported by all major Linux distributions, MacOS and Windows.

    ⚠️ Recomended change resources limits at least 2 CPU 5 GB RAM for Docker Desktop: MAC | Windows | Linux

    Deploy ReportPortal with Docker

    1. Download the latest ReportPortal Docker Compose file from here. You can make it by run the following command:
    curl -LO https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml
    1. Make the ElasticSearch configuration prerequisites for the analyzer service

      • OPTIONAL: Set {vm.max_map_count} kernel setting before ReportPortal deploying with the following Commands
      • Give right permissions to ElasticSearch data folder using the following commands:
    mkdir -p data/elasticsearch
    chmod 777 data/elasticsearch
    chgrp 1000 data/elasticsearch

    For more details about ElasticSearch visit ElasticSearch guide

    OPTIONAL

    PostgreSQL Performance Tuning

    Depends on your hardware configuration and parameters of your system, you can additionally optimize your PostgreSQL performance by adding the following parameters to "command" option in the Docker compose file:

     -c effective_io_concurrency=
    -c shared_buffers=
    -c max_connections=
    -c effective_cache_size=
    -c maintenance_work_mem=
    -c random_page_cost=
    -c seq_page_cost=
    -c min_wal_size=
    -c max_wal_size=
    -c max_worker_processes=
    -c max_parallel_workers_per_gather=

    Please choose set the values of these variables that are right for your system.

    You can also change PostgreSQL host by passing a new value to POSTGRES_SERVER environment variable.

    1. Ensure you override the UAT Service environment variable RP_INITIAL_ADMIN_PASSWORD
    version: '2.4'
    services:

    uat:
    environment:
    RP_INITIAL_ADMIN_PASSWORD: "My_Strong_Password!"

    We've modified the current approach: during the initial installation and the first login of the superadmin, they will need to create a unique initial password, different from the default password provided in the ReportPortal installation documentation. Failure to do so will prevent the Auth service from starting.

    1. Start the application using the following command:
    docker-compose -p reportportal up -d --force-recreate

    Where:

    • -p reportportal adds project prefix 'reportportal' to all containers
    • up creates and starts containers
    • -d daemon mode
    • --force-recreate Re-creates containers if there any

    Useful commands:

    • docker-compose logs shows logs from all containers
    • docker logs <container_name> shows logs from selected container
    • docker ps -a | grep "reportportal_" | awk '{print $1}' | xargs docker rm -f Deletes all ReportPortal containers
    • docker-compose down
    1. Open your web-browser with an IP address of the deployed environment at port 8080

    Use the following login\pass to access:

    • Default User: default\1q2w3e
    • Administrator: superadmin\erebus

    ⚠️ Please change the admin password for better security

    + \ No newline at end of file diff --git a/installation-steps/DeployWithDockerOnWindows/index.html b/installation-steps/DeployWithDockerOnWindows/index.html index 53fc56801..a41e64962 100644 --- a/installation-steps/DeployWithDockerOnWindows/index.html +++ b/installation-steps/DeployWithDockerOnWindows/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Deploy with Docker on Windows

    In case you went with Docker on Windows, please make sure you changed the 'volumes' value for postgres container from "For unix host" to the "For windows host":

      volumes:
    # For windows host
    - postgres:/var/lib/postgresql/data
    # For unix host
    # - ./data/postgres:/var/lib/postgresql/data

    If you haven’t done this, you will get an error

    data directory “/var/lib/postgresql/data/pgdata” has wrong ownership

    Then uncomment the following:

        volumes:
    # For unix host
    # - ./data/storage:/data
    # For windows host
    - minio:/data

    And after that uncomment the following:

    # Docker volume for Windows host
    volumes:
    postgres:
    minio:

    Updating ReportPortal with Docker

    Updating ReportPortal with Docker is a two step process.

    In the first step, your Docker Compose file should be replaced with a new one (with the latest version services) from here.

    The second step is update / redeploy the application using the following command:

    docker-compose -p reportportal up -d --force-recreate

    There is no strict need for backup / restore the data if you are keep the postgres, elasticsearch & minio volumes. However, it is recommended (see Maintain commands Cheat sheet).

    ReportPortal Services

    The ReportPortal consists of the following services:

    • Authorization Service. In charge of access tokens distribution.
    • Gateway Service. Main entry point to application. Port used by gateway should be opened and accessible from outside network.
    • API Service. Main application API.
    • UI Service. All statics for user interface.
    • Analyzer Service. Collects and processes the information, then sends it to ElasticSearch
    • Index Service. Responsible for redirections, collection of services information, handling errors
    - + \ No newline at end of file diff --git a/installation-steps/DeployWithKubernetes/index.html b/installation-steps/DeployWithKubernetes/index.html index 27b310751..722e00b1a 100644 --- a/installation-steps/DeployWithKubernetes/index.html +++ b/installation-steps/DeployWithKubernetes/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/installation-steps/DeployWithoutDocker/index.html b/installation-steps/DeployWithoutDocker/index.html index 2a125e3dc..b1f709bff 100644 --- a/installation-steps/DeployWithoutDocker/index.html +++ b/installation-steps/DeployWithoutDocker/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Deploy without Docker

    The instruction designed for the version 5.3.5 and might be outdated for the latest versions. Do not hesitate to contribute and send us a pull request with updates. We appreciate your help!

    In order to get started with ReportPortal on Red Hat Family and Ubuntu Linux distributions non-Docker/Kubernetes usage, please use the following links

    1. [Outdated] ReportPortal 5.3.5

    ReportPortal 5.3.5 installation guide

    Supported OS

    Ubuntu LTS 18.04, 20.04 / Red Hat family 6, 7, 8 (RHEL, CentOS, etc)

    Required service

    • PSQL 12.6
    • RabbitMQ 3.8.14
    • ElasticSearch 7.12
    • Traefik 1.7.29

    In addition, these services are compatible with earlier versions.

    2. [Outdated] ReportPortal 5.0.0

    ReportPortal 5.0.0 installation guide

    Supported OS

    Ubuntu LTS 16.04, 18.04 / Red Hat family 6, 7 (RHEL, CentOS, etc)

    Required service

    • PSQL 11
    • RabbitMQ 3.6.10
    • ElasticSearch 6.7.0"
    • Traefik 1.7.19
    - + \ No newline at end of file diff --git a/installation-steps/MaintainCommandsCheatSheet/index.html b/installation-steps/MaintainCommandsCheatSheet/index.html index 958f3d839..404f3de3f 100644 --- a/installation-steps/MaintainCommandsCheatSheet/index.html +++ b/installation-steps/MaintainCommandsCheatSheet/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Maintain commands Cheat sheet

    Export as env var: 

    export RP_PRJ=$(docker ps --filter="name=api" --format="\{{.Names}}" | sed 's/\(.*\)_api_[0-9]*/\1/')

    Install/restart ReportPortal: 

    docker-compose -p $RP_PRJ up -d --force-recreate

    Show all logs: 

    docker-compose -p $RP_PRJ logs

    Show specific logs: 

    docker-compose -p $RP_PRJ logs <name, e.g. api>

    Delete everything except data: 

    docker-compose -p $RP_PRJ down --rmi -v --remove-orphans

    Backup / Dump the data: 

    docker exec <postgres_container_name> pg_dump -U <POSTGRES_USER> <database_name> > backup.sql

    Clean up the data: 

    docker exec -it <postgres_container_name> psql -U <POSTGRES_USER> -d <database_name>
        DROP TABLE schema_migrations;
    DROP SCHEMA quartz CASCADE;
    DROP SCHEMA public CASCADE; CREATE SCHEMA public;
    \q

    Restore the data: 

    docker exec -i <postgres_container_name> psql -U <POSTGRES_USER> -d <database_name> < backup.sql

    You can download PDF file with commands.

    - + \ No newline at end of file diff --git a/installation-steps/OptimalPerformanceHardwareSetup/index.html b/installation-steps/OptimalPerformanceHardwareSetup/index.html index 7d423eea7..ac1729f92 100644 --- a/installation-steps/OptimalPerformanceHardwareSetup/index.html +++ b/installation-steps/OptimalPerformanceHardwareSetup/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ In grand total such a structure creates 3 Launches with 243 test case inside and produces 1253 requests.

    Now we can divide their number by the duration in seconds, and get the RPS result. if it runs for 6 minutes (2 minutes each lunch), then: 60s * 6 = 360 and 1253 / 360 ~=4.5 requests per second.

    If launches will be executed in parallel, 3 at the time, then RPS will be equal to 4.5*3 = 13.5 rps.


    Summary

    Having information regarding number of test cases in your framework, average number of logs, number of parallel threads and durations, you can calculate system capacity according to the tables below.


    Configuration testing results

    The purpose of the configuration performance testing is to determine saturation points and overall system capacity for different instance sizes and specifications. Testing was conducted on the С5 instances which are optimized for compute-intensive workloads and deliver cost-effective high performance at a low price per compute ratio(Compute Optimized Instances) with Up to 3.4GHz, and single core turbo frequency of up to 3.5 GHz 2nd generation Intel Xeon Scalable Processors (Cascade Lake) or 1st generation Intel Xeon Platinum 8000 series (Skylake-SP) processor with a sustained all core Turbo frequency.

    Application and Database are deployed on separate VMs

    Instance TypeSaturation point, rpsvUsers countDisk IOPSJava Options
    с5.xlarge64060up to 3000-Xmx1g
    c5.2xlarge1374115up to 4000-Xmx2g
    c5.4xlarge3104356up to 8000-Xmx3g
    с5.9xlarge5700489up to 10000-Xmx4g

    Application and Database are deployed on single VM

    Instance TypeSaturation point, rpsvUsers countDisk IOPSJava Options
    с5.xlarge52150up to 3000-Xmx1g
    c5.2xlarge107883up to 4000-Xmx2g
    c5.4xlarge2940305up to 8000-Xmx3g
    с5.9xlarge5227440up to 10000-Xmx4g


    4. The database separately from other services

    Consider deploying the database separately from other RP services. It allows increasing throughput of the server and performance of the ReportPortal overall. This can be, for example, AWS RDS PostgreSQL Database or a separate VM only for the PostgreSQL database.

    The separate database instance should be the same by CPU's and RAM, but started from middle+ server type, the database instance may need to have doubled CPU's and RAM size in comparison with the application instance. This is explained by the fact that with an increase in the size of the database and the number of concurrent users, the load is distributed more on the database server: increased volume of resources(CPU, memory, IOPS number, etc.) required to performing each DB query since it handles / can handle more data volume and/or can handle of a greater number of concurrent users.

    Example for the middle+ server:

    Instance typeCPU'sRAM size, GbDisk space, GbAWS Shape
    Application instance1632200c5.4xlarge
    Database instance16321000c5.4xlarge

    5. PostgreSQL Performance Tuning

    Since PostgreSQL Database is used, it needs some set of special configs for the best performance. These set contains two categories:

    • general and universal for any capacity of the instance hardware:

      effective_io_concurrency=200
      random_page_cost=0.1
      seq_page_cost=1
      min_wal_size=1GB
      max_wal_size=4GB
      wal_buffers=16MB
      default_statistics_target=100
      synchronous_commit=off
      wal_writer_delay=10ms
      checkpoint_completion_target=0.9
    • based on CPU/RAM size at the instance(example for 4 CPUs/8GB RAM; the database is deployed on the separate VM):

      shared_buffers=2GB
      effective_cache_size=6GB
      maintenance_work_mem=512MB
      work_mem=96MB
      max_worker_processes=4
      max_parallel_workers_per_gather=2
      max_parallel_workers=4
      max_parallel_maintenance_workers=2

      Recommendations regarding PostgreSQL server tuning for the instance with 8 CPUs/16GB RAM(where all RP services are deployed):

      shared_buffers=4GB
      effective_cache_size=8GB
      wal_buffers=16MB
      default_statistics_target=100
      effective_io_concurrency=200
      work_mem=96MB
      min_wal_size=1GB
      synchronous_commit=off
      wal_writer_delay=10ms
      maintenance_work_mem=1GB
      seq_page_cost=1
      checkpoint_completion_target=0.9
      random_page_cost=0.1
      max_wal_size=4GB
      max_worker_processes=8
      max_parallel_workers_per_gather=4
      max_parallel_workers=8
      max_parallel_maintenance_workers=4

      If the PostgreSQL database and services are deployed on the separate VM’s, the "effective_cache_size" parameter should be changed to "12GB"(total RAM size - shared_buffers size).


      **Simple ways to set these parameters:**

      CPU’s count related:

      max_worker_processes = <DB instance CPU’s count>
      max_parallel_workers_per_gather = <DB instance CPU’s count / 2>
      max_parallel_workers = <DB instance CPU’s count>
      max_parallel_maintenance_workers = <DB instance CPU’s count / 2>

      RAM size related:

      shared_buffers = <DB instance RAM size in GB / 4>
      effective_cache_size = <DB instance RAM size in GB - shared_buffers>
      maintenance_work_mem = < if total RAM size > 16 Gb – 2Gb; under 16Gb – 1Gb and less>

      For the docker-compose: add the following lines to the command section by the “-c” option to “postgres” service.

      Example:

      postgres:
      image: postgres:12-alpine
      shm_size: '512m'
      ...
      command:
      -c effective_io_concurrency=200
      -c random_page_cost=0.1
      -c seq_page_cost=1
      ...
      # Some another configs

      For the AWS RDS: create new parameter group(Services -> RDS -> Parameter groups -> Create parameter group), search config by the name and set up the following values, then apply created parameter group to the RDS DB.

      The following parameters can be scaled and depends on CPU’s number and RAM size of the instance. For example, for the instance 16 CPUs/32GB RAM(the database is deployed on the separate VM) this parameters should be:

      shared_buffers = '8GB'
      effective_cache_size = '24GB'
      max_worker_processes = '16'
      max_parallel_workers = '16'

    6. Application connections pool tuning

    By default, ReportPortal has 27 connections on service-api and 27 connections in pool on service-authorization. In general these values are valid for the small and middle servers. But from the middle+ server type, the connection pool may be increased if it's not enough for your server load.

    It can be detected as periodic freezes and the "Loading" message when opening any page, and/or slowing down the work with RP after a certain period of time during active reporting and use with UI. Restarts of API and UAT services can also be observed.

    To increasing the connection pool on both services, need to add next environment variables to the service-api and to the service-authorization:

    RP_DATASOURCE_MAXIMUMPOOLSIZE=100

    After increasing the connection pool from the application side, do not forget increase the max_connections from the Database side, using following DB configuration paramether:

    max_connections=500

    The values of these parameters are given for example only, but in general, can be valid for all types of loads for servers middle+ and large.

    Please note, that the max_connections paramether must be more than the sum of the RP_DATASOURCE_MAXIMUMPOOLSIZE for the API and the UAT services + several connections for connecting to the database from outside.

    7. Elasticsearch Performance Tuning

    As mentioned above, in some cases may be necessary to increase the limits of shards. The general rule is 2 active shards per 1 data stream(1 data stream equals 1 project in the ReportPortal on the default configuration). If the data stream reaches the default 50 GB storage limit, it will be rollovered and a new generation will be created (please see the diagram below). Please consider that the number of Elasticsearch shards on the default configuration is insufficient for ReportPortal installations with a large number of projects. As a result, after storing close to 3000 indices without any tuning the logs-saving behavior may be incorrect.

    To retrieve statistics from a cluster (to check the value of shard):

    GET /_cluster/stats

    {
    "_nodes": {
    "total": 3,
    "successful": 3,
    "failed": 0
    },
    "cluster_name": "elasticsearch",
    "cluster_uuid": "Oq5UUZUg3RGE0Pa_Trfds",
    "timestamp": 172365897412,
    "status": "green",
    "indices": {
    "count": 470,
    "shards": {
    "total": 940,
    "primaries": 470,
    "replication": 1.0,
    "index": {
    "shards": {
    "min": 2,
    "max": 2,
    "avg": 2.0
    },
    ...
    }

    The API returns basic index metrics (shard numbers, store size, memory usage) and information about the current nodes that form the cluster (number, roles, os, jvm versions, memory usage, cpu and installed plugins).

    To increase the limits of the total number of primary and replica shards for the cluster:

    PUT /_cluster/settings

    {
    "persistent" : {
    "cluster.max_shards_per_node": 3000
    }
    }

    Keep in mind, that the more shards you allow per node the more resources each node will need and the worse the performance can get.

    We also recommend to check the next guides in the official Elasticsearch documentation:

    Data streams

    Size your shards

    - + \ No newline at end of file diff --git a/installation-steps/ReportPortal23.1FileStorageOptions/index.html b/installation-steps/ReportPortal23.1FileStorageOptions/index.html index 976fda897..813b364c8 100644 --- a/installation-steps/ReportPortal23.1FileStorageOptions/index.html +++ b/installation-steps/ReportPortal23.1FileStorageOptions/index.html @@ -12,15 +12,15 @@ - +
    -

    ReportPortal 23.1 File storage options

    In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins.

    • AWS S3
    • MinIO distributed object storage
    • Container's File system

    Currently we have 2 file storage systems: multi-bucket and single-bucket.

    In the multi-bucket system structure of buckets looks like this:

    • bucketPrefix + ‘keystore’ (bucket for storing integration secrets)
    • bucketPrefix + ‘users’ (bucket for storing user data)
    • defaultBucketName (bucket for storing plugins)
    • bucketPrefix + projectId (bucket for storing project attachments)

    In the single-bucket system structure of single-bucket is the following:

    • singleBucketName/integration-secrets/ (prefix for integration secrets)
    • singleBucketName/user-data/ (prefix for user data)
    • singleBucketName/plugins/ (prefix for plugins)
    • singleBucketName/project-data/projectId (prefix for project attachments)

    AWS S3

    Amazon Simple Storage Service (Amazon S3) is an object storage service offering industry-leading scalability, data availability, security, and performance. Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition. A partition is a grouping of Regions.

    To set up AWS S3 in API, UAT & Jobs services use the following variables:

    • DATASTORE_TYPE: s3
    • DATASTORE_ACCESSKEY for AWS S3 AccessKey
    • DATASTORE_SECRETKEY for AWS S3 SecretKey
    • DATASTORE_REGION for AWS region

    To set up the multi-bucket system, use the following environment variables:

    • DATASTORE_BUCKETPREFIX for prefix of bucket name (‘prj-‘ by default)
    • DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (‘rp-bucket’ by default)

    To set up the single-bucket system, use the following environment variables:

    • DATASTORE_DEFAULTBUCKETNAME for single-bucket name
    • RP_FEATURE_FLAGS: singleBucket

    MinIO

    MinIO is a high-performance distributed object storage server. It stays on top of S3 or any other cloud storage and allows to have a shared FS for several API, UAT & Jobs pods in Kubernetes.

    To set up MinIO in services, use the following variables:

    • DATASTORE_TYPE: minio
    • DATASTORE_ENDPOINT for endpoint (address)
    • DATASTORE_ACCESSKEY for accesskey
    • DATASTORE_SECRETKEY for secretkey

    To set the multi-bucket system, use the following environment variables:

    • DATASTORE_BUCKETPREFIX for prefix of bucket name (‘prj-‘ by default)
    • DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (‘rp-bucket’ by default)

    To set the single-bucket system, use the following environment variables:

    • DATASTORE_DEFAULTBUCKETNAME for single-bucket name
    • RP_FEATURE_FLAGS : singleBucket

    Container's File system

    The container's file system option is used when you want to store this data in a mounted folder in the service-api or/and service-uat containers.

    To use this option, set up environment variables like this:

    • DATASTORE_TYPE: filesystem
    • DATASTORE_PATH for path in filesystem to store files.

    It can be done in both Docker and Kubernetes ReportPortal versions.

    - +

    ReportPortal 23.1 File storage options

    In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins.

    • AWS S3
    • MinIO distributed object storage
    • File system

    Currently we have 2 file storage systems: multi-bucket and single-bucket.

    In the multi-bucket system structure of buckets looks like this:

    • bucketPrefix + ‘keystore’ (bucket for storing integration secrets)
    • bucketPrefix + ‘users’ (bucket for storing user data)
    • defaultBucketName (bucket for storing plugins)
    • bucketPrefix + projectId (bucket for storing project attachments)

    In the single-bucket system structure of single-bucket is the following:

    • singleBucketName/integration-secrets/ (prefix for integration secrets)
    • singleBucketName/user-data/ (prefix for user data)
    • singleBucketName/plugins/ (prefix for plugins)
    • singleBucketName/project-data/projectId (prefix for project attachments)

    AWS S3

    Amazon Simple Storage Service (Amazon S3) is an object storage service offering industry-leading scalability, data availability, security, and performance. Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition. A partition is a grouping of Regions.

    To set up AWS S3 in API, UAT & Jobs services use the following variables:

    • DATASTORE_TYPE: s3
    • DATASTORE_ACCESSKEY for AWS S3 AccessKey
    • DATASTORE_SECRETKEY for AWS S3 SecretKey
    • DATASTORE_REGION for AWS region

    To set up the multi-bucket system, use the following environment variables:

    • DATASTORE_BUCKETPREFIX for prefix of bucket name (‘prj-‘ by default)
    • DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (‘rp-bucket’ by default)

    To set up the single-bucket system, use the following environment variables:

    • DATASTORE_DEFAULTBUCKETNAME for single-bucket name
    • RP_FEATURE_FLAGS: singleBucket

    MinIO

    MinIO is a high-performance distributed object storage server. It stays on top of S3 or any other cloud storage and allows to have a shared FS for several API, UAT & Jobs pods in Kubernetes.

    To set up MinIO in services, use the following variables:

    • DATASTORE_TYPE: minio
    • DATASTORE_ENDPOINT for endpoint (address)
    • DATASTORE_ACCESSKEY for accesskey
    • DATASTORE_SECRETKEY for secretkey

    To set the multi-bucket system, use the following environment variables:

    • DATASTORE_BUCKETPREFIX for prefix of bucket name (‘prj-‘ by default)
    • DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (‘rp-bucket’ by default)

    To set the single-bucket system, use the following environment variables:

    • DATASTORE_DEFAULTBUCKETNAME for single-bucket name
    • RP_FEATURE_FLAGS : singleBucket

    File system

    The file system option is used when you want to store this data in a mounted folder in the service-api or/and service-uat.

    To use this option, set up environment variables like this:

    • DATASTORE_TYPE: filesystem
    • DATASTORE_PATH for path in filesystem to store files.

    It can be done in both Docker and Kubernetes ReportPortal versions.

    + \ No newline at end of file diff --git a/installation-steps/SetupTSLSSLInTraefik2.0.x/index.html b/installation-steps/SetupTSLSSLInTraefik2.0.x/index.html index aa5183df6..f2c0f216e 100644 --- a/installation-steps/SetupTSLSSLInTraefik2.0.x/index.html +++ b/installation-steps/SetupTSLSSLInTraefik2.0.x/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Setup TLS(SSL) in Traefik 2.0.x

    This is a short guideline that provides information on how to configure ReportPortal to use Let TLS/SSL certificate setup for your existing ReportPortal environment.

    Overview

    We use Traefik as a layer-7 load balancer with TLS/SSL termination for the set of micro-services used to run ReportPortal web application.

    Pre-requisites

    • Server with a public IP address, with Docker and docker-compose installed on it
    • Installed ReportPortal on this servers
    • Your own domain and the DNS configured accordingly so the hostname records

    Configuration

    Provided below is an example of using Traefik (gateway service) in docker-compose.yaml. If you don't have any custom configurations, you are free to use the example below.

    Create a directory on the server for Traefik data and storing certificates

    mkdir data/traefik/ && mkdir -p data/certs/traefik

    Check:

    data
    |-- certs
    |-- elasticsearch
    |-- postgres
    |-- traefik

    Create config file for Traefik with certificate and key path.

    cat << EOF | tee -a data/traefik/certs-traefik.yaml
    tls:
    certificates:
    - certFile: /etc/certs/examplecert.crt
    keyFile: /etc/certs/examplecert.key
    EOF

    Place certificate examplecert.crt and key examplecert.key to directory data/certs/traefik/ you created earlier.

    Edit Traefik service in the docker-compose.yaml

    Add the following volumes to Traefik:

    services:
    gateway:
    volumes:
    - "./data/traefik/dynamic/certs-traefik.yaml:/etc/traefik/dynamic/certs-traefik.yaml"
    - "./data/certs/traefik:/etc/certs/"

    commands:

    services:
    gateway:
    commands:
    - "--providers.file.directory=/etc/traefik/dynamic"
    - "--entrypoints.websecure.address=:443"

    and ports:

    services:
    gateway:
    ports:
    - "443:443"

    Check the Traefik part:

    version: '2.4'
    services:

    gateway:
    image: traefik:v2.0.5
    ports:
    - "8080:8080" # HTTP exposed
    - "8081:8081" # HTTP Administration exposed
    - "443:443" # TLS/SSL
    volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"
    - "./data/traefik/dynamic/certs-traefik.yaml:/etc/traefik/dynamic/certs-traefik.yaml"
    - "./data/certs/traefik:/etc/certs/"
    command:
    - "--providers.docker=true"
    - "--providers.docker.constraints=Label(`traefik.expose`, `true`)"
    - "--entrypoints.web.address=:8080"
    - "--entrypoints.traefik.address=:8081"
    - "--api.dashboard=true"
    - "--api.insecure=true"
    # TLS/SSL
    - "--providers.file.directory=/etc/traefik/dynamic"
    - "--entrypoints.websecure.address=:443"
    restart: always

    Add the following labels to existing services api, uat, index, ui, replacing <service> with the corresponding service name

    labels:
    - "traefik.http.routers.<service>.tls=true"

    Check the UI and API services as an example:

    version: '2.4'
    services:

    ui:
    image: reportportal/service-ui:5.3.4
    environment:
    - RP_SERVER_PORT=8080
    labels:
    - "traefik.http.middlewares.ui-strip-prefix.stripprefix.prefixes=/ui"
    - "traefik.http.routers.ui.middlewares=ui-strip-prefix@docker"
    - "traefik.http.routers.ui.rule=PathPrefix(`/ui`)"
    - "traefik.http.routers.ui.service=ui"
    - "traefik.http.services.ui.loadbalancer.server.port=8080"
    - "traefik.http.services.ui.loadbalancer.server.scheme=http"
    - "traefik.expose=true"
    - "traefik.http.routers.ui.tls=true" # label is here
    restart: always
    note

    Make sure that the required ports are opened. Please check your firewall settings.

    1. Traefik HTTPS&TLS Offical documentation
    2. Traefik 2 & TLS 101
    3. Traefik Routing TLS

    Issues

    Unable to find valid certification path to requested target

    Feb-2 00:00:00.000 [rp-io-1] ERROR Launch - [18] ReportPortal execution error
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    Solutions:

    1. Recomended. Add certificate to Java-machine
    2. Not recommended. Ignoring SSL certificate
    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToAddATestStackTraceToADescriptionAutomatically/index.html b/issues-troubleshooting/HowToAddATestStackTraceToADescriptionAutomatically/index.html index ece76d409..3a2049ba1 100644 --- a/issues-troubleshooting/HowToAddATestStackTraceToADescriptionAutomatically/index.html +++ b/issues-troubleshooting/HowToAddATestStackTraceToADescriptionAutomatically/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    How to add a test stack trace to a description automatically

    You can make your process of a test analysis more convenient and quick by adding a description for failed tests that will include a last error message from the test log.

    You will not need to open an every single test to see the failure reason. With this new functionality you will see test failures reasons right in a table on All launches (step level), so that you can perform group actions to items.

    How to activate this option:

    Change your listener to wrap log messages on error level with special text:

        <place your error message here>

    We have prepared an example how to extend a TestNG agent, and you can find it below:

    An extend agent service:

        public static class ParamTaggingTestNgService extends TestNGService {

    public ParamTaggingTestNgService(ListenerParameters parameters, ReportPortalClient reportPortalClient) {
    super(parameters, reportPortalClient);
    }

    @Override
    protected StartTestItemRQ buildStartStepRq(ITestResult testResult) {
    final StartTestItemRQ rq = super.buildStartStepRq(testResult);
    if (testResult.getParameters() != null && testResult.getParameters().length != 0) {
    final Set<String> tags = Optional.fromNullable(rq.getTags()).or(new HashSet<>());
    for (Object param : testResult.getParameters()) {
    tags.add(param.toString());
    }
    rq.setTags(tags);

    }
    return rq;
    }

    @Override
    protected FinishTestItemRQ buildFinishTestMethodRq(String status, ITestResult testResult) {
    FinishTestItemRQ finishTestItemRQ = super.buildFinishTestMethodRq(status, testResult);
    if (testResult.getThrowable() != null) {
    String description =
    "```error\n"
    + Throwables.getStackTraceAsString(testResult.getThrowable())
    + "\n```";
    description = description + Throwables.getStackTraceAsString(testResult.getThrowable());
    finishTestItemRQ.setDescription(description);
    }
    return finishTestItemRQ;
    }
    }

    An extend listener with your extended service:

        public static class ExtendedListener extends BaseTestNGListener {
    public ExtendedListener() {
    super(override(new TestNGAgentModule()).with((Module) binder -> binder.bind(ITestNGService.class)
    .toProvider(new TestNGProvider() {
    @Override
    protected TestNGService createTestNgService(ListenerParameters listenerParameters,
    ReportPortalClient reportPortalClient) {
    return new ParamTaggingTestNgService(listenerParameters, reportPortalClient);
    }
    })));
    }
    }
    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToAvoidLocalExecutionReportedIntoProjectSpace/index.html b/issues-troubleshooting/HowToAvoidLocalExecutionReportedIntoProjectSpace/index.html index 1a0c51578..d9ac0bca3 100644 --- a/issues-troubleshooting/HowToAvoidLocalExecutionReportedIntoProjectSpace/index.html +++ b/issues-troubleshooting/HowToAvoidLocalExecutionReportedIntoProjectSpace/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    How to avoid local execution reported into project space

    Option 1:

    Use a specific attribute for launches, which should represent the state.

    Create filters using those attributes. Build widgets and dashboards, based on those attributes.

    You can add those additional attributes via the CI command line.

    So, only Jenkins will generate launches with those attributes.

    Option 2:

    Put rp.mode=debug in all reportportal.properties files.

    For Jenkins executions, overload this param via the command line as rp.mode=default,

    so that all local launches will be in debug, all Jenkins – in launches.

    Option 3:

    Combine option #2 and option #3, in the launch name.

    rp.launch=xxx saved in all reportportal.properties files.

    For Jenkins executions, overload this param via the command line as rp.launch=yyy

    The auto-analysis will use only yyy launches for review.

    Use filter, based on your yyy name for widgets.

    Option 4:

    The same like option 2, but with rp.enable=false|true

    This will turn off reporting for local launches

    Option 5:

    Set all users on the project with the Role Operator. This role can’t report data into RP.

    Create an internal user for Jenkins executions, set him/her as a PROJECT MANAGER role.

    This will make it possible to create launches only for Jenkins users

    note

    It is also possible to combine all those options at the same time.

    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToCheckLDAPConnection/index.html b/issues-troubleshooting/HowToCheckLDAPConnection/index.html index dfeb74517..06d462ce9 100644 --- a/issues-troubleshooting/HowToCheckLDAPConnection/index.html +++ b/issues-troubleshooting/HowToCheckLDAPConnection/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    How to check LDAP connection

    Firstly, check the availability of your LDAP server from the server when ReportPortal is installed. For example, use the command ldapsearch.

    ldapsearch -x -h <ldap hostname> -p <ldap port> -D "<bind DN>" -w "<bind password>" -b "<base users DN>" "uid=user1"

    Output will be:

    # extended LDIF
    #
    # LDAPv3
    # base <dc=rp,dc=com> with scope subtree
    # filter: uid=user1
    # requesting: ALL
    #

    # user1, people, rp.com
    dn: cn=tester,ou=people,dc=rp,dc=com
    objectClass: inetOrgPerson
    cn: user1
    sn: user1
    uid: user1
    userPassword:: PASSWORD
    mail: user1@rp.com
    description: user1 for experiments

    # search result
    search: 2
    result: 0 Success

    # numResponses: 2
    # numEntries: 1

    Hints

    If you are using docker you can also use the internal container IP docker inspect -f '\{{range .NetworkSettings.Networks}}\{{.IPAddress}}\{{end}}' <LDAP container name>

    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingPGRepack/index.html b/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingPGRepack/index.html index dd9a54284..84bd78816 100644 --- a/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingPGRepack/index.html +++ b/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingPGRepack/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    How to clean up the ReportPortal database using PG_REPACK

    Description

    pg_repack is a PostgreSQL extension that lets you remove bloat from tables and indexes, and optionally restore the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing. pg_repack is efficient to boot, with performance comparable to using CLUSTER directly.

    Performance

    Initial Database SizeFinal Database SizeRepack durationDuration
    1500 Gb251 Gb1200 Gb7 hours

    Overall pg_repack performance has been tested during load tests running and without. The database load during pg_repack is pretty good by capacity and instance   High DB RAM Utilization faced at the pr_repack starting, but then the overall RAM Usage becomes normal. During reporting(load tests running) faced small response times and throughput degradation around 10 minutes, but then they became a regular performance. Also, no KO requests during reporting and pg_repack run in parallel, so that all Staging pg_repack configuration can be safely porting to Production.

    Detailed DB Resource Utilization Stats

    ResourcesUsed
    CPU utilization13 %
    CPU IOwait7%
    Disk IO Read/Write1800/30000 IOPS

    PG_REPACK installation

    To install PG_REPACK use the guide from the official GitHub page. If you use Amazon RDS follow the link

    PG_REPACK usage

    • Attach to Screen session:
    screen

    For more information about the Screen read this guide.

    • You need to add the path to the PG_REPACK executable file. The PATH variable is an environment variable that contains an ordered list of paths that Unix will search for executables when running a command. Run the following command:
    export PATH=$PATH:/usr/pgsql-12/bin/
    • Create .pgpass file and fill your data. The file .pgpass the file referenced by PGPASSFILE contain passwords to be used if the connection requires a password. Documentation.
    cat << EOF | tee -a /.pgpass
    <database_host>:<database_port>:<database_name>:<database_user>:<database_password>
    EOF

    For example, .pgpass file should look like this:

    reportportal-cdufjldqrau0.eu-west-3.rds.amazonaws.com:5432:reportportal:rpuser:strongpassword
    • Change permissions to .pgpasss file:
    chmod 600 /.pgpass
    • Set PGPASSFILE environment variable:
    export PGPASSFILE='/.pgpass'
    • Fill your data and run PG_REPACK:
    pg_repack -h <database_address> -U <database_user> -k <database_name> &>> /pg_repack-rpdb.log

    No password is needed for the database because you are using .pgpass.

    When you run the command, you will get artifact pg_repack-rpdb.log, where PG_REPACK will storage the logs. The pg_repack-rpdb.log file is stored in your root directory /.

    • To detach from the Screen session type Control+a+d (on OSX and Linux). The result will be similar to:
    [detached from 22556.pts-0.ip-10-68-38-165]

    22556 is ID of you screen session. You will get a different ID. Save it.

    • Attach to the Screen session:
    screen -r

    If you have one Screen session, you will join it. If you have two or more of them, you will get the following result:

    There are several suitable screens on:
    22556.pts-0.ip-10-68-38-165 (Detached)
    8175.pts-0.ip-10-68-38-165 (Detached)
    Type "screen [-d] -r [pid.]tty.host" to resume one of them.

    To join the PG_REPACK Screen session fill your Screen ID that you saved in step 4 and run the following command:

    screen -r <your_screen_id>
    • To view the process of running the command you can read pg_repack-rpdb.log with command:
    cat /pg_repack-rpdb.log

    In addition, you can stream log with the command:

    tail -F /pg_repack-rpdb.log

    Type Control+c (on OSX and Linux) to exit from Tail

    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingVacuumFull/index.html b/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingVacuumFull/index.html index 5d6aff60d..05f667b34 100644 --- a/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingVacuumFull/index.html +++ b/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingVacuumFull/index.html @@ -12,7 +12,7 @@ - + @@ -25,7 +25,7 @@ VACUUM FULL rewrites the entire contents of the table into a new disk file with no extra space, allowing unused space to be returned to the operating system. This form is much slower and requires an exclusive lock on each table while it is being processed.

    The main goals for performing VACUUM FULL at the ReportPoral database:

    • improve DB queries performance by removing dead tuples and updating statistics;
    • reclaim storage space occupied by dead tuples;
    • prevent bloating tables.

    Parameters

    ParameterDescription
    FULLSelects "full" vacuum, which can reclaim more space, but takes much longer and exclusively locks the table. This method also requires extra disk space, since it writes a new copy of the table and doesn't release the old copy until the operation is complete. Usually this should only be used when a significant amount of space needs to be reclaimed from within the table.
    FREEZESelects aggressive "freezing" of tuples. Specifying FREEZE is equivalent to performing VACUUM with the vacuum_freeze_min_age and vacuum_freeze_table_age parameters set to zero. Aggressive freezing is always performed when the table is rewritten, so this option is redundant when FULL is specified.
    VERBOSEPrints a detailed vacuum activity report for each table.
    ANALYZEUpdates statistics used by the planner to determine the most efficient way to execute a query.

    ⚠️ Important notes

    1. Assuming that VACUUM FULL required exclusive locks on the tables and required high time-consuming on the large databases, the suggestions are:

      • conduct testing of the VACUUM FULL execution at Staging/Dev/Non-Prod environment;
      • schedule the particular downtime for the Production database and shut down the application services except for the database.
    2. Сheck that the database disk has free space equal to or greater than the size of the largest table(with its indexes) in the database.

    The main suggestion is to perform VACUUM FULL operation periodically not for the whole database, but only for the particular tables defined below, which helps increase overall SQL queries performance. VACUUM FULL frequency for the databases more than 1Tb with high reporting amount - at least once per 3 months.

    Tables list and it's operations duration on our database(AWS RDS PostgreSQL Database spec: db.m5.4xlarge 16CPUs, 64Gb RAM):

    TableRows countVACUUM OperationDuration
    log614 372 224FULL14h 30m
    log614 372 224ANALYZE1h 30m
    test_item207 311 552FULL1h 50m
    test_item207 311 552ANALYZE21m
    statistics299 341 024FULL10m
    statistics299 341 024ANALYZE3m 49s
    test_item_results450 264 992FULL9m
    test_item_results450 264 992ANALYZE4m 12s

    VACUUM FULL execution

    Preconditions: Apply next configuration to PostgreSQL Parameter Group(database restart not needed after applying):

    maintenance_work_mem=8000000
    max_parallel_maintenance_workers=16
    • Configuration examples are defined for the database shape 16CPU, 64Gb RAM. The suggestion for other database shapes are: for maintenance_work_mem - 1/4 part of the total database RAM size; max_parallel_maintenance_workers - database CPUs count.

    Perform VACUUM FULL and ANALYZE on the each database table using the query:

    VACUUM (FULL, ANALYZE) my_table

    Or perform VACUUM FULL and VACUUM ANALYZE on all tables in the database using commands sequentially:

    VACUUM FULL
    VACUUM ANALYZE

    Postconditions: Apply regular configuration to PostgreSQL Parameter Group(database restart not needed after applying):

    maintenance_work_mem=2000000
    max_parallel_maintenance_workers=8

    Useful PostgreSQL queries

    Total database size:

    SELECT pg_size_pretty(pg_database_size('reportportal'));

    Show autovacuum stats:

    SELECT relname, last_vacuum, last_autovacuum FROM pg_stat_user_tables;

    Detailed statistic by each table and indexes:

    SELECT *, pg_size_pretty(total_bytes) AS total
    , pg_size_pretty(index_bytes) AS index
    , pg_size_pretty(toast_bytes) AS toast
    , pg_size_pretty(table_bytes) AS table
    FROM (
    SELECT *, total_bytes-index_bytes-coalesce(toast_bytes,0) AS table_bytes FROM (
    SELECT c.oid,nspname AS table_schema, relname AS table_name
    , c.reltuples AS row_estimate
    , pg_total_relation_size(c.oid) AS total_bytes
    , pg_indexes_size(c.oid) AS index_bytes
    , pg_total_relation_size(reltoastrelid) AS toast_bytes
    FROM pg_class c
    LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
    WHERE relkind = 'r'
    ) a
    ) a;

    Dead tuples amount per table:

    SELECT relname, n_dead_tup FROM pg_stat_user_tables order by n_dead_tup desc;
    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToResolveIssuesWithMigrationToTheNewVersion/index.html b/issues-troubleshooting/HowToResolveIssuesWithMigrationToTheNewVersion/index.html index 8eb6c3777..1ad816f9f 100644 --- a/issues-troubleshooting/HowToResolveIssuesWithMigrationToTheNewVersion/index.html +++ b/issues-troubleshooting/HowToResolveIssuesWithMigrationToTheNewVersion/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    How to resolve issues with migration to the new version

    Error: Dirty database version XX. Fix and force version.

    That means, migration process has been interrupted during XX migration (migration has been started but not finished)

    1. At first, you need to check the logs of migration (service itselft and database), it can be helpful, if yes, make some actions based on logs, if not then move next.
    2. You need to rollback all applied (if any) migration XX parts.

    The format for url is the next:

    https://github.com/reportportal/migrations/blob/develop/migrations/XX_some_name.up.sql

    (Usually nothing to rollback, but need check)

    1. Change in schema_migrations table, change values in this table to version=XX-1 (previous successful migration number), and dirty flag set to true.
    2. Restart migration.

    For instance, if you have "Error: Dirty database version 10. Fix and force version."

    1. Check the logs(service itselft and database), in case we've found nothing, move next.
    2. You need to check 10 migration (https://github.com/reportportal/migrations/blob/develop/migrations/10_attachment_size.up.sql) and rollback if you have some partly migration.
    3. Then execute #update schema_migrations set version=9, dirty=f
    4. Redeploy RP based on docker-composer for example (migration should be started automatically, if you followed by instructions of installation for this way.)

    Error: org.jasypt.exceptions.EncryptionOperationNotPossibleException: null. API doesn't start. ReportPortal unavailable.

    Minio files are used during migration to change integration passwords encryption. Files in Minio may be corrupted and deleted somehow before migration during Reportportal usage.

    Removing existing integrations from db before deploying can help. Creation of a new integration will use a new encryption type.

    1. Execute the next script in database to remove existing integrations before deploy:
    DELETE FROM integration WHERE type IN (SELECT id FROM integration_type WHERE name IN ('email', 'jira', 'ldap', 'ad'));

    1. Deploy Reportportal
    2. Create integrations again
    - + \ No newline at end of file diff --git a/issues-troubleshooting/IssuesWithJIRABugTrackingSystemHowToResolve/index.html b/issues-troubleshooting/IssuesWithJIRABugTrackingSystemHowToResolve/index.html index e16559077..d3b2d41f8 100644 --- a/issues-troubleshooting/IssuesWithJIRABugTrackingSystemHowToResolve/index.html +++ b/issues-troubleshooting/IssuesWithJIRABugTrackingSystemHowToResolve/index.html @@ -12,7 +12,7 @@ - + @@ -32,7 +32,7 @@ login name and password into the fields)
  • Submit the login form Screen with CAPTCHA should appears
  • Enter the symbols
  • Submit the credentials again
  • Now try to establish the connection to JIRA on ReportPortal project.
  • Fourth, maybe the connection to the jira instance requires a certificate, in this case you need to import the certificate inside the jira container:

    1. docker exec -it reportportal_jira_1 ash # go inside shell
    2. cd /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/
    3. wget url://to/your/foo.cert
    4. keytool -importcert -noprompt -file foo.crt -alias "JIRA CERT" -keystore cacerts -storepass abc123 (default password for keystore: changeit)
    5. exit and restart the docker jira
    6. Now try to establish the connection to JIRA on ReportPortal project.

    or

    1. docker cp cert.der reportportal_jira_1:/cert.der
    2. docker exec -t -i reportportal_jira_1 ./usr/lib/jvm/java-1.8-openjdk/jre/bin/keytool -import -alias rootcert -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -file /cert.der
    3. exit and restart the docker jira
    4. Now try to establish the connection to JIRA on ReportPortal project.
    note

    SSL instance of JIRA (even cloud version) can be accessed by JIRA API token, used instead of password.

    If these didn't resolve your issues, please contact us.

    - + \ No newline at end of file diff --git a/issues-troubleshooting/IssuesWithLDAPSHowToResolve/index.html b/issues-troubleshooting/IssuesWithLDAPSHowToResolve/index.html index 28e6e81da..6b9ee5ee9 100644 --- a/issues-troubleshooting/IssuesWithLDAPSHowToResolve/index.html +++ b/issues-troubleshooting/IssuesWithLDAPSHowToResolve/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Issues with LDAPS: how to resolve

    When configuring LDAP to work with ldaps:// users may see the following error when trying to log in:

    sun.security.validator.ValidatorException: PKIX path building failed: 
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

    This error can be solved by importing the needed certificate within the authorization container:

    # Enter service-authorization container as root
    docker exec -u 0 -it reportportal_uat_1 sh

    # Download certificates
    cd /usr/local/share/ca-certificates/
    wget url://to/your/foo.cert

    # Import the cert to keytool. if password is required the default should be "changeit"
    $JAVA_HOME/bin/keytool -import -alias ldap_cert -keystore $JAVA_HOME/lib/security/cacerts -file /usr/local/share/ca-certificates/foo.cert

    # exit container and restart it
    docker restart reportportal_uat_1
    - + \ No newline at end of file diff --git a/issues-troubleshooting/ResolveAnalyzerKnownIssues/index.html b/issues-troubleshooting/ResolveAnalyzerKnownIssues/index.html index 8fb7e586a..94993ec16 100644 --- a/issues-troubleshooting/ResolveAnalyzerKnownIssues/index.html +++ b/issues-troubleshooting/ResolveAnalyzerKnownIssues/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Resolve Analyzer Known Issues

    Problem 1. Auto-Analyser doesn't work. Analyzer health check status failed: Elasticsearch is not healthy

    Problem Description

    Analyzer log:

    2021-09-09 11:34:47,927 - analyzerApp - ERROR - Analyzer health check status failed: Elasticsearch is not healthy;
    [pid: 10|app: 0|req: 1/3] 127.0.0.1 () {28 vars in 294 bytes} [Thu Sep 9 11:34:46 2021] GET / => generated 43 bytes in 1643 msecs (HTTP/1.1 503) 3 headers in 120 bytes (1 switches on core 0)
    2021-09-09 11:35:48,737 - analyzerApp.utils - ERROR - Error with loading url: http://elasticsearch:9200/_cluster/health
    2021-09-09 11:35:48,752 - analyzerApp.utils - ERROR - HTTPConnectionPool(host='elasticsearch', port=9200): Max retries exceeded with url: /_cluster/health (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f5cb82d4290>: Failed to establish a new connection: [Errno 111] Connection refused'))
    2021-09-09 11:35:48,753 - analyzerApp.esclient - ERROR - Elasticsearch is not healthy
    2021-09-09 11:35:48,753 - analyzerApp.esclient - ERROR - list indices must be integers or slices, not str

    ElasticSearch container restarting all the time:

    STATUS                                     NAMES
    Up Less than a second (health: starting) reportportal_elasticsearch_1

    Solution

    Create a directory for ElasticSearch and assign permissions with the following commands

    mkdir -p data/elasticsearch
    chmod 777 data/elasticsearch
    chgrp 1000 data/elasticsearch

    Recreate ReportPortal services.

    Problem 2. Auto-Analyser doesn't work. KeyError: 'found_test_and_methods' not found

    Problem Description

    2021-09-09 11:35:48,737 - analyzerApp.utils - ERROR - KeyError: 'found_test_and_methods' not found

    Solution

    Regenerate index in the ElasticSearch. Project settings -> Auto-Analysis -> Genetate Index

    Problem 3. Amqp connection was not established

    Problem Description

    2021-09-09 11:32:00,579 - analyzerApp - INFO - Starting waiting for AMQP connection
    2021-09-09 11:32:00,586 - analyzerApp.amqp - INFO - Try connect to amqp://rabbitmq:5672/analyzer?heartbeat=600
    2021-09-09 11:32:00,595 - analyzerApp - ERROR - Amqp connection was not established

    Solution

    RabbitMQ container is not running. Wait for status running or recreate the RabbitMQ container.

    Problem 4. Performance

    Problem Description

    Slowing down analysis or waiting for a long time fore responce.

    Analyzer logs:

    DAMN ! worker 1 (pid: 9191) died, killed by signal 9 :( trying respawn ...
    Respawned uWSGI worker 1 (new pid: 9490)

    Solution

    Increase VM stats. We recommend using the minimum memory:

    Also you can reduce the number of Analyzer processes with processing environment variable UWSGI_WORKERS: 2 (default 4), then:

    However, UWSGI_WORKERS will slow down the Analyzer.

    - + \ No newline at end of file diff --git a/issues-troubleshooting/TuningCITool/index.html b/issues-troubleshooting/TuningCITool/index.html index 9c003054f..8a3aa0731 100644 --- a/issues-troubleshooting/TuningCITool/index.html +++ b/issues-troubleshooting/TuningCITool/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    Tuning CI tool

    How to provide parameters via system variables in the CI tool (for example - Jenkins) for our continuous testing platform.

    In order to provide specific parameters (Such as attributes) for different executions that are based on the parameters loading order, you can provide them as system variables.

    To do so, follow the steps below:

    1. Open the Job configuration in Jenkins.
    1. Select the "This build is parameterized" check-box.

    2. Click the "Add Parameter" and select "Text Parameter".

    1. Define any name for the parameter and set the default value (note that attributes should have semicolon-separated values, with no spaces).
    1. Update the execution command at the "Build" section: add ReportPortal parameters using –D for a system variable parameters. For attributes it is "rp.tags":
    1. Click the "Build with Parameters" button.
    1. In the opened dialog, specify the needed parameters, using semicolons to separate values.
    1. Then Click the "Build" button.
    - + \ No newline at end of file diff --git a/log-data-in-reportportal/HowToRunYourTests/index.html b/log-data-in-reportportal/HowToRunYourTests/index.html index 94898e177..db0dae943 100644 --- a/log-data-in-reportportal/HowToRunYourTests/index.html +++ b/log-data-in-reportportal/HowToRunYourTests/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/ImplementOwnIntegration/index.html b/log-data-in-reportportal/ImplementOwnIntegration/index.html index c9b11966a..1a491f5e4 100644 --- a/log-data-in-reportportal/ImplementOwnIntegration/index.html +++ b/log-data-in-reportportal/ImplementOwnIntegration/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/ImportDataToReportPortal/index.html b/log-data-in-reportportal/ImportDataToReportPortal/index.html index 08c360774..496f9ddf9 100644 --- a/log-data-in-reportportal/ImportDataToReportPortal/index.html +++ b/log-data-in-reportportal/ImportDataToReportPortal/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Import data to ReportPortal

    Import functionality gives the opportunity to upload log files via UI. To start the import process, you should hit the 'Import' button on the Launch page (All Launches tab). In a new pop-up window 'Import Launch' you can drop files or add them by adding a link.

    ReportPortal checks file size and format first. Imported files should meet the following requirements:

    • File format is zip archive or XML file.
    • File size is up to 32Mb.
    • Timestamp format is 2022-11-17T10:15:43

    If the file format is incorrect, it is marked in red and the reason is shown in the tooltip on hovering over the file in the pop-up window. This is to prevent any incorrect files from being run through the import process.

    If all the files added are correct you may hit the 'Import' or 'Cancel' buttons:

    • The Cancel button closes the pop-up window without any operation under log files.
    • The Import button starts copying files into the RP file storage and disables the 'Import' button.

    The System will start copying files into the RP file storage if the files meet the following requirements:

    • The File format is a zip archive.
    • The File size is up to 32Mb.
    • The XML files must have the JUnit structure in the zip archive.

    The system copies valid XML files into RP file storage and marked them in green in the Import pop-up window.

    If files from the zip archive have formats other than XML, the system will skip them.

    If the XML file is not in the JUnit structure, the system will interrupt the process of copying and mark the file in red. The reason is then shown on the tooltip when hovering the file in the pop-up window.

    note

    Files that were copied earlier stay in the RP file storage

    When all of the valid log files are downloaded and processed the 'OK' button is enabled. The 'OK' button closes the Import launches pop-up window. The Zip archive is then deleted after the Import is finished or canceled.

    You can only interrupt the import in UI when files are being downloaded into the RP file storage. In this case, you should hit the 'Cancel' button (or X button in the pop-up window) and confirm the cancellation of import and then hit the 'Cancel' button again.

    Import via API

    The details about import via API you can find on the ReportPortal menu at the bottom: API -> launch controller -> Import junit xml report

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/ReportingSDK/index.html b/log-data-in-reportportal/ReportingSDK/index.html index 7c9817b06..6c588b770 100644 --- a/log-data-in-reportportal/ReportingSDK/index.html +++ b/log-data-in-reportportal/ReportingSDK/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Cucumber/index.html b/log-data-in-reportportal/test-framework-integration/Java/Cucumber/index.html index 34315fb65..6393219db 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Cucumber/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Cucumber/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    ReportPortal Cucumber Integration

    There is an agent to integrate Cucumber with ReportPortal.

    Cucumber is a popular open-source framework for behavior-driven development (BDD) which based on Gherkin language and allows developers, testers, and business stakeholders to work together and define an application's behavior.

    Compatibility matrix for cucumber agents

    Version(s) of cucumber java and cucumber junitGherkin's version(s)Link to agent's github
    1.2.52.12.2sources/cucumber1
    2.0.0 - 2.4.03.2.0 - 5.1.0sources/cucumber2
    3.0.0 - 3.0.2_sources/cucumber3
    4.4.0 - 4.8.13.2.0 - 5.1.0sources/cucumber4
    5.0.0 - 5.7.0_sources/cucumber5
    6.0.0 - 7.0.06.0.0 - 7.0.0sources/cucumber6

    Installation guide

    Examples

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/JBehave/index.html b/log-data-in-reportportal/test-framework-integration/Java/JBehave/index.html index cae11ac19..aa8c6fad6 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/JBehave/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/JBehave/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/JUnit4/index.html b/log-data-in-reportportal/test-framework-integration/Java/JUnit4/index.html index eba305611..68d9601e6 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/JUnit4/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/JUnit4/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/JUnit5/index.html b/log-data-in-reportportal/test-framework-integration/Java/JUnit5/index.html index 64e385d51..017cdf581 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/JUnit5/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/JUnit5/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/ApacheHttpComponents/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/ApacheHttpComponents/index.html index 414c9b5c1..2e91d2f78 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/ApacheHttpComponents/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/ApacheHttpComponents/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Log4J/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Log4J/index.html index 904afbe62..ae19f4ec8 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Log4J/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Log4J/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Logback/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Logback/index.html index 504ec74e7..673bff913 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Logback/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Logback/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/OkHttp3/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/OkHttp3/index.html index 000132deb..7a56beab5 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/OkHttp3/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/OkHttp3/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/RestAssured/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/RestAssured/index.html index 1f5f9515a..45db65fb0 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/RestAssured/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/RestAssured/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Selenide/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Selenide/index.html index 7f5835904..cd39f0061 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Selenide/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Selenide/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/SoapUI/index.html b/log-data-in-reportportal/test-framework-integration/Java/SoapUI/index.html index dbb4f3312..482773984 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/SoapUI/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/SoapUI/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Spock/index.html b/log-data-in-reportportal/test-framework-integration/Java/Spock/index.html index a4a88dcc0..72fdfb899 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Spock/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Spock/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/TestNG/index.html b/log-data-in-reportportal/test-framework-integration/Java/TestNG/index.html index f30346b00..af530d13f 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/TestNG/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/TestNG/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    ReportPortal TestNG Integration

    There is an agent to integrate TestNG with ReportPortal.

    TestNG provides support for attaching custom listeners, reporters, annotation transformers and method interceptors to your tests.

    TestNG agent can handle next events:

    • Start launch
    • Finish launch
    • Start suite
    • Finish suite
    • Start test
    • Finish test
    • Start test step
    • Successful finish of test step
    • Fail of test step
    • Skip of test step
    • Start configuration (All «before» and «after» methods)
    • Fail of configuration
    • Successful finish of configuration
    • Skip configuration

    Installation guide

    Examples

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/index.html b/log-data-in-reportportal/test-framework-integration/Java/index.html index 9bca7574d..eca2e59f5 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Java

    To integrate your Java test framework with ReportPortal, you need to create a file named reportportal.properties in your in your Java project in a source folder src/main/resources or src/test/resources (depending on where your tests are located):

    reportportal.properties

    rp.endpoint={RP_SERVER_URL}

    rp.api.key={YOUR_TOKEN}

    rp.project={YOUR_PROJECT}

    rp.launch={NAME_OF_YOUR_LAUNCH}

    Property description

    rp.endpoint - the URL for the report portal server (actual link).

    rp.api.key - an access token for Report Portal which is used for user identification. It can be found on your report portal user profile page.

    rp.project - a project code on which the agent will report test launches. Must be set to one of your assigned projects.

    rp.launch - a user-selected identifier of test launches.

    This set of properties will allow you to report your tests. And there are more properties available for fine grain tuning of integration. Details available here.

    If you need a sophisticated and full-featured integration with a test framework, you can configure it by your self.

    All agents use client-java to communicate with ReportPortal API and as common code library. Also you can use any combination of agent and logger.

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Codecept/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Codecept/index.html index 9b8d7c9ae..f465cd4fe 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Codecept/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Codecept/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/CucumberJS/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/CucumberJS/index.html index 20bf178fa..7f0e87043 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/CucumberJS/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/CucumberJS/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Cypress/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Cypress/index.html index 513735c37..08051f2b9 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Cypress/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Cypress/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Jasmine/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Jasmine/index.html index 3d15ccedd..ab9e75276 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Jasmine/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Jasmine/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Jest/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Jest/index.html index bf0189d4b..5f07df44f 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Jest/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Jest/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Mocha/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Mocha/index.html index 61ba8f603..c53381035 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Mocha/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Mocha/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Nightwatch/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Nightwatch/index.html index 064ab964b..01bc7eafc 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Nightwatch/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Nightwatch/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Playwright/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Playwright/index.html index 1c5e748e8..8263d1112 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Playwright/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Playwright/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Postman/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Postman/index.html index 8e88e45ce..c25d56822 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Postman/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Postman/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/TestCafe/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/TestCafe/index.html index 7035d3834..9959eaa43 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/TestCafe/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/TestCafe/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/WebdriverIO/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/WebdriverIO/index.html index e8d6c534e..c0f83efc2 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/WebdriverIO/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/WebdriverIO/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/index.html index ecbe9175c..d33be752e 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/Loggers/Log4Net/index.html b/log-data-in-reportportal/test-framework-integration/Net/Loggers/Log4Net/index.html index 523f9b04a..ba43b73bd 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/Loggers/Log4Net/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/Loggers/Log4Net/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/Loggers/NLog/index.html b/log-data-in-reportportal/test-framework-integration/Net/Loggers/NLog/index.html index 75f3fb93a..c52ffe347 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/Loggers/NLog/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/Loggers/NLog/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/Loggers/Serilog/index.html b/log-data-in-reportportal/test-framework-integration/Net/Loggers/Serilog/index.html index f2b02e224..598948158 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/Loggers/Serilog/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/Loggers/Serilog/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/Loggers/TraceListener/index.html b/log-data-in-reportportal/test-framework-integration/Net/Loggers/TraceListener/index.html index 327b9c110..55082f28b 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/Loggers/TraceListener/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/Loggers/TraceListener/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/NUnit/index.html b/log-data-in-reportportal/test-framework-integration/Net/NUnit/index.html index 04f53e0f6..e9e393799 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/NUnit/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/NUnit/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/SpecFlow/index.html b/log-data-in-reportportal/test-framework-integration/Net/SpecFlow/index.html index e22b94133..260967dd3 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/SpecFlow/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/SpecFlow/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/VSTest/index.html b/log-data-in-reportportal/test-framework-integration/Net/VSTest/index.html index ca64f9b2e..20c58d9fe 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/VSTest/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/VSTest/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/index.html b/log-data-in-reportportal/test-framework-integration/Net/index.html index 769b59b11..0fd9d36db 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/xUnit/index.html b/log-data-in-reportportal/test-framework-integration/Net/xUnit/index.html index 4d83b4e73..247a6994a 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/xUnit/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/xUnit/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    ReportPortal xUnit Integration

    There is an agent to integrate xUnit with ReportPortal.

    xUnit is a testing framework for .NET applications. The "Arrange, Act, Assert" (AAA) pattern, which is a systematic method of designing test cases, is the foundation of xUnit. The AAA pattern places emphasis on how each test should clearly distinguish between how the test environment and data are set up, how the test code is executed, and how the test result is verified (Assert).

    Installation guide

    Examples

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Other/index.html b/log-data-in-reportportal/test-framework-integration/Other/index.html index 5d7478847..0a214cf3b 100644 --- a/log-data-in-reportportal/test-framework-integration/Other/index.html +++ b/log-data-in-reportportal/test-framework-integration/Other/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/PHP/Behat/index.html b/log-data-in-reportportal/test-framework-integration/PHP/Behat/index.html index c26a1c163..49f9433c3 100644 --- a/log-data-in-reportportal/test-framework-integration/PHP/Behat/index.html +++ b/log-data-in-reportportal/test-framework-integration/PHP/Behat/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/PHP/Codeception/index.html b/log-data-in-reportportal/test-framework-integration/PHP/Codeception/index.html index 764a89278..04de672f1 100644 --- a/log-data-in-reportportal/test-framework-integration/PHP/Codeception/index.html +++ b/log-data-in-reportportal/test-framework-integration/PHP/Codeception/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/PHP/PHPUnit/index.html b/log-data-in-reportportal/test-framework-integration/PHP/PHPUnit/index.html index b57bf8988..6a99864d0 100644 --- a/log-data-in-reportportal/test-framework-integration/PHP/PHPUnit/index.html +++ b/log-data-in-reportportal/test-framework-integration/PHP/PHPUnit/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/PHP/index.html b/log-data-in-reportportal/test-framework-integration/PHP/index.html index 57356ad80..d386d4056 100644 --- a/log-data-in-reportportal/test-framework-integration/PHP/index.html +++ b/log-data-in-reportportal/test-framework-integration/PHP/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/RobotFramework/index.html b/log-data-in-reportportal/test-framework-integration/Python/RobotFramework/index.html index 884a62814..804774f5c 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/RobotFramework/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/RobotFramework/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/behave/index.html b/log-data-in-reportportal/test-framework-integration/Python/behave/index.html index 3b7d7bc7b..b71c76084 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/behave/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/behave/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/index.html b/log-data-in-reportportal/test-framework-integration/Python/index.html index b82d8ce82..791c84037 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/nosetests/index.html b/log-data-in-reportportal/test-framework-integration/Python/nosetests/index.html index 6c59624a8..28df12df2 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/nosetests/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/nosetests/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/pytest/index.html b/log-data-in-reportportal/test-framework-integration/Python/pytest/index.html index 7ff3b5c3d..d7f3112d6 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/pytest/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/pytest/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/index.html b/log-data-in-reportportal/test-framework-integration/index.html index 013465ee9..af07ba5eb 100644 --- a/log-data-in-reportportal/test-framework-integration/index.html +++ b/log-data-in-reportportal/test-framework-integration/index.html @@ -12,7 +12,7 @@ - + @@ -27,7 +27,7 @@ For specific tool details, select your language and Test Framework in the sections below.

    Examples

    If you do not know anything about ReportPortal. If you just want to integrate ReportPortal with your Test Framework and view info about test case executions: a name, a status, a duration, parameters, attachments (files, screenshots, video and other), logs and others. So this section for you.

    You can review and mimic the following examples to start your integration with the ReportPortal.

    Test frameworksExamples
    Java Test Frameworkshttps://github.com/reportportal/examples-java
    JavaScript based Test Frameworkshttps://github.com/reportportal/examples-js
    .Net based Test Frameworkshttps://github.com/reportportal?q=example-net&type=&language=&sort=
    Python based Test Frameworkshttps://github.com/reportportal/examples-python
    - + \ No newline at end of file diff --git a/plugins/AzureDevOpsBTS/index.html b/plugins/AzureDevOpsBTS/index.html index 3f50df10e..60f04ba93 100644 --- a/plugins/AzureDevOpsBTS/index.html +++ b/plugins/AzureDevOpsBTS/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Azure DevOps BTS

    To install the Azure DevOps BTS plugin, see Upload plugin section.

    Integration with our centralized test automation tool can be helpful for projects which are already using Azure DevOps BTS (Bug Tracking System) as a tracking tool. This feature allows posting issues and linking/unlinking issues, getting updates on their statuses. For example, just a few clicks – and bug with detailed logs is created!

    Azure DevOps BTS integration can be configured on the global level (for all projects on the instance) or on the project level (only for one project).

    Global Azure DevOps BTS integration

    Add new global Azure DevOps BTS integration

    You might want to configure global integrations which will be applied on all projects if all projects on your instance are using the same Azure DevOps BTS projects.

    1. Log in as ADMIN.

    2. Go to Administrate > Plugins.

    3. Click on Azure DevOps plugin.

    4. Click on the “Add integration” button.

    1. Fill and Save the authorization form.

    Please, follow the steps below to get a token for Azure DevOps integration:

    You can choose predefined Azure DevOps ticket fields after you have created a connection with the Azure DevOps BTS project. These fields will be shown to you all the time when you post an issue to the Azure DevOps BTS.

    This feature also gives you the ability to choose proper issue type for newly created issues in Azure DevOps BTS.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions on the opened Configuration form:

    1. Choose issue type from the drop-down.

    2. 2.Check the fields needed and fill them in if necessary.

    3. Click on “Submit” button.

    Now team members on all your projects will be able to submit issues in Azure DevOps BTS. Options for Post Issue/Link issue are activated.

    You can add more integrations by clicking on “Add integration”.

    User can add several integrations, but with a different name to the one Azure DevOps BTS project.

    Use case:

    Situation: User wants to post to Azure DevOps BTS issues with type Issue and Task to the project NNN-MMM in Azure DevOps BTS. Is it possible? Yes!

    Solution: Add two integrations to the project NNN-MMM in Azure DevOps BTS with names e.g., “Project -1” and “Project -2”. Add to the “Project -1” issue type Issue and for “Project -2” - issue type Task. While posing issue procedure, choose integration with needed type.

    Update global Azure DevOps BTS integration

    If you need to edit Azure DevOps BTS integration authorization parameters, please perform actions:

    1. Log in as ADMIN.

    2. Go to Administrate > Plugins.

    3. Click on Azure DevOps plugin.

    4. Click on a tab with existing integration.

    5. Click on “Edit authorization” link.

    1. Change “Integration name”.

    2. Type your Azure DevOps credentials.

    3. Submit the form.

    note

    You can edit only “Integration name”. If you need other changes, please submit new integration.

    If you need to edit fields which should be posted in Azure DevOps BTS, please perform actions:

    1. Log in as ADMIN.

    2. Go to Administrate > Plugins.

    3. Click on Azure DevOps plugin.

    4. Click on the tab with existing integration.

    5. Click on “Configure” button.

    1. Choose issue type from the drop-down.

    2. Check the fields needed and fill them in if necessary.

    3. Click on “Submit” button.

    Remove global Azure DevOps BTS integration

    If you need to remove Azure DevOps BTS integration, please perform actions:

    1. Log in as ADMIN.

    2. Go to Administrate > Plugins.

    3. Click on Azure DevOps plugin.

    4. Click on the tab with existing integration.

    5. Click on “Remove integration”.

    1. Submit the action.

    Project Azure DevOps BTS integration

    Add new project Azure DevOps BTS integration

    If any project needs different Azure DevOps BTS configurations, you should unlink a project from Global configurations and add a Project configuration. It means that now when a new global integration is added to the ReportPortal, it won't be applied to the unlinked project.

    For that,

    1. Log in as an ADMIN or Project Manager.

    2. Go to Project Settings > Integrations.

    3. Click on the Azure DevOps integration panel.

    4. Click on “Unlink and setup manually” button.

    1. Fill and confirm the authorization form.
    note

    Please, have a look at Global Azure DevOps BTS integration for detailed configuration steps.

    You can choose predefined Azure DevOps ticket fields after you have created a connection with the Azure DevOps BTS project. These fields will be shown to you all the time when you post an issue to the Azure DevOps BTS.

    This feature also gives you the ability to choose proper issue type for newly created issues in Azure DevOps BTS.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions on the opened Configuration form:

    1. Choose issue type from the drop-down.

    2. Check the needed fields and fill them in if necessary.

    3. Click on “Submit” button.

    Now team members on this project will be able to submit issues in Azure DevOps BTS. Options for Post Issue/Link issue are activated.

    You can add more integrations by clicking on “Add integration” button.

    Reset to project Azure DevOps BTS Integrations

    If you want to delete project integrations with Azure DevOps BTS and link your project with global configurations, please perform actions described below:

    1. Log in as an ADMIN or Project Manager.

    2. Go to Project Settings > Integrations.

    3. Click on the Azure DevOps integration panel.

    4. Click on “Reset to global settings” button.

    5. Confirm the action.

    Post issue to Azure DevOps BTS

    Posting an issue to Azure DevOps BTS means creating a new issue in Azure DevOps BTS from ReportPortal and uploading logs and attachments from an execution.

    If you want to post a new issue to Azure DevOps BTS, you need to have a project or global integration with Azure DevOps BTS.

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator.

    2. Go to Launches.

    3. Choose a needed item.

    1. Click on the pencil icon to open “Make decision” modal.
    1. Choose “Post issue” option and then “Apply & Continue”.
    1. Fill in the “Post Issue” form with valid data and submit the form.
    1. A new issue will be posted in Azure DevOps BTS with information from ReportPortal.
    1. A label with issue ID will be added to the test item.

    Linking an issue with an issue in Azure DevOps BTS means adding a clickable link to an existing issue in Azure DevOps BTS from ReportPortal that will show a status of this issue.

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator.

    2. Go to Launches.

    3. Choose a needed item.

    1. Click on the pencil icon to open “Make decision” modal.
    1. Choose “Link issue” option and then “Apply & Continue”.
    1. Fill in the “Link issue” form with valid data and submit the form.
    1. A label with issue ID will be added to the test item.
    1. Link is redirected to this issue in Azure DevOps BTS.

    You can also unlink an issue.

    1. Click on the “remove” icon.
    1. Click “Unlink Issue”.
    1. Link to the issue in Azure DevOps BTS is removed.

    Custom issue type in Azure DevOps BTS

    You can configure any custom issue type (e.g., Bug for Adam) in Azure DevOps BTS and then choose it as predefined Azure DevOps ticket field. So, developer Adam will see on the Azure DevOps BTS all issues from ReporPortal which assigned to him.

    Follow the steps below to configure custom issue type:

    1. Log in to Azure portal.

    2. Go to Organization settings.

    1. Click on the “Process” menu item.
    1. Select three dots near the current process and create a new one.
    1. Click on the name of the just created process.
    1. Create custom issue type.
    1. Click on the project quantity and change the process for your project.
    1. Change Issue Type for Azure DevOps BTS integration on ReportPortal.
    1. Post issues to Azure DevOps BTS.

    2. Now you can see issues with custom issue type on Azure DevOps BTS.

    - + \ No newline at end of file diff --git a/plugins/EmailServer/index.html b/plugins/EmailServer/index.html index 391a5aade..34c05b32c 100644 --- a/plugins/EmailServer/index.html +++ b/plugins/EmailServer/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    E-mail server

    E-mail server plugin is available in ReportPortal on the Plugins page.

    You don't need to download . It is already available in ReportPortal on the Plugins page.

    Add E-mail server integrations

    You can integrate our centralized test automation tool with an E-mail server via SMTP protocol. With this integration, you will be able to perform such functions as:

    • invite a new user to the project
    • configure notification rules on launch finish

    Permissions:

    user with account role ADMINISTRATOR can configure E-mail integration for the whole instance or per project. User with account role PROJECT MANAGER can configure E-mail integration only on a project where he is assigned on as Project Manager.

    Global E-mail server integration

    To configure the SMTP server for the whole instance:

    1. Log in to the ReportPortal as an ADMIN user

    2. Then open the list on the right of the user's image.

    3. Click the 'Administrative' link

    4. Click the 'Plugins' from the left-hand sidebar

    5. Click on the 'Email Server' tab.

    6. Click on Add new integration

    7. The next fields should be present:

    `Host`: <host_name_of_email_server>
    `Protocol`: SMTP (predefined)
    `Default sender name`: (optional)
    `Port`: <port_number>
    `Authorization`: OFF/ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    'TLS' or 'SSL': should be checked depends on the selected port.

    Example of SMTP server configuration for Gmail email server (detailed info could be found here)

    `Host`: smtp.gmail.com
    `Protocol`: SMTP
    `Default sender name`: Report Portal
    `Port`: 465
    `Authorization`: ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    `SSL`: checkbox should be checked.

    Example of an SMTP server configuration for a Yandex email server (detailed info can be found here)

    `Host`: smtp.yandex.com
    `Protocol`: SMTP
    `Default sender name`: Report Portal
    `Port`: 465
    `Authorization`: ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    `SSL`: checkbox should be checked.
    1. Confirm data in the form

    After E-mail server integration adding, the configuration will be applied to all projects on the instance.

    Project E-mail integration

    If E-mail integration has not to be added on the project, or if Project Manager or Admin want to specified special configurations for a special project, they can configure E-mail server in the project settings.

    To configure SMTP server for one single project instance:

    1. Log in to the ReportPortal as an ADMIN or PM user
    2. Then click on the Project settings icon.
    3. Click on the Integrations tab.
    4. Click on the 'E-mail Server' tab.
    5. Click on the button "Unlink & Setup Manually"
    6. The next fields should be present:
    `Host`: <host_name_of_email_server>
    `Protocol`: SMTP (predefined)
    `Default sender name`: (optional)
    `Port`: <port_number>
    `Authorization`: OFF/ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    'TLS' or 'SSL': should be checked depends on the selected port.

    Example of SMTP server configuration for Gmail email server (detailed info could be found here)

    `Host`: smtp.gmail.com
    `Protocol`: SMTP
    `Default sender name`: Report Portal
    `Port`: 465
    `Authorization: ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    `SSL`: checkbox should be checked.

    Example of an SMTP server configuration for a Yandex email server (detailed info can be found here)

    Host: smtp.yandex.com
    `Protocol`: SMTP
    `Default sender name`: Report Portal
    `Port`: 465
    `Authorization`: ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    `SSL`: checkbox should be checked.
    1. Confirm data in the form

    After E-mail server integration adding, the configuration will be applied to all projects on the instance.

    note

    In case you unlink your project settings from Global settings, for the chosen project

    A possibility to provide custom host in links (started from 5.4 version)

    You can make this operation via API. For that just choose an API call Integration controller - Update project integration instance, and provide a link to your host in the field ' "rpHost": "custom_link.com" ''

    PUT/v1/integration/{projectName}/{integrationId}

    {
    "enabled": true,
    "integrationParameters": {
    "protocol": "smtp",
    "rpHost": "custom_link.com",
    "authEnabled": true,
    "port": "",
    "sslEnabled": false,
    "starTlsEnabled": true,
    "host": "smtp.com",
    "username": ""
    }
    }
    - + \ No newline at end of file diff --git a/plugins/JiraCloud/index.html b/plugins/JiraCloud/index.html index c3e5005c1..a3cddd958 100644 --- a/plugins/JiraCloud/index.html +++ b/plugins/JiraCloud/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ Yes!

    Solution: Add two integrations to the project NNN-MMM in Jira with names f.e. "Project -1" and "Project -2". Add to the "Project -1" issue type Defect and for "Project -2" - issue type Task. While posing issue procedure, choose integration with needed type.

    Update global Jira Cloud integration

    If you need to edit Jira Cloud integration authorization parameters, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Cloud plugin panel

    4. Click on a tab with existing integration

    5. Click on "Edit authorization" link

    6. Change "Integration name"

    7. Submit the form

    note

    You can edit the "Integration name" only. If you need other changes, please submit new integration.

    If you need to edit fields which should be posted in Jira Cloud, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Cloud plugin panel

    4. Click on a tab with existing integration

    5. Click on "Configure" button

    6. Choose issue type from the drop-down

    7. Check the needed fields and fill them in if necessary

    8. Click on "Submit" button

    Remove global Jira Cloud integration

    If you need to remove Jira Cloud integration, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Cloud plugin panel

    4. Click on a tab with existing integration

    5. Click on "Remove integration"

    6. Submit the action

    Project JIRA Cloud integration

    Add new project Jira Cloud integration

    If any project needs different Jira Cloud configurations, you should unlink a project from Global configurations and add a project configuration. It means that now when a new global integration is added to our test automation results dashboard, it won't be applied to the unlinked project.

    For that,

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the JIRA Cloud integration panel

    4. Click on "Unlink and setup manually" button

    5. Fill and confirm the authorization form

    'Integration Name': <The name which you want to give to your integration> - should be unique
    'Link to BTS': <valid URL of bug tracking system>
    'Project key in BTS': <project key in bug tracking system>
    'Email': <user email>
    'API Token': <user API Token>

    After you have created a connection with the JIRA project, you can choose predefined JIRA ticket fields. These fields will be shown to you all the time when you post the issue in Jira Cloud.

    This feature gives you the ability to choose which type you will post a ticket.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions:

    1. Click on "Configure" button

    2. Choose issue type from the drop-down

    3. Check the needed fields and fill them in if necessary

    4. Click on "Submit" button

    Now team members on this project will be able to submit issues in Jira Cloud. Options for Post Issue / Link issue are activated.

    You can add more integrations by clicking on "Add integration" button.

    Reset to project Jira Cloud Integrations

    If you want to delete project integrations with Jira Cloud and link your project with global configurations, please perform actions described below:

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the JIRA Cloud integration panel

    4. Click on "Reset to global settings" button

    5. Confirm the action

    Post issue to Jira Cloud

    Posting an issue to Jira Cloud means to create a new issue in Jira from ReportPortal and upload logs and attachments from an execution.

    If you want to post a new issue to Jira, you need to have a project or global integration with Jira Cloud.

    Post issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Post issue" option

    6. Fill in the "Post issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Predefined fields`: fields which you choose on Project Settings/ or Plugins
    `Included data`: which data should be posted to BTS (attachments, logs, comments)
    1. Submit the form

    2. A new issue will be posted in BTS with information from ReportPortal

    3. A label with issue ID will be added to the test item

    Linking an issue with an issue in Jira Cloud means adding a clickable link to an existing issue in Jira from ReportPortal that will show a status of this issue.

    Link issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Link issue" option

    6. Fill in the "Link issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Link to issue`: a full link to the item in BTS
    `Issue ID`: information which will be displayed on the label in ReportPortal
    1. Submit the form

    2. A label with issue ID will be added to the test item

    - + \ No newline at end of file diff --git a/plugins/JiraServer/index.html b/plugins/JiraServer/index.html index 606958938..f3e782c6d 100644 --- a/plugins/JiraServer/index.html +++ b/plugins/JiraServer/index.html @@ -12,7 +12,7 @@ - + @@ -25,7 +25,7 @@ Add to the "Project -1" issue type Defect and for "Project -2" - issue type Task. While posing issue procedure, choose integration with needed type.

    Update global Jira Server integration

    If you need to edit Jira Server integration authorization parameters, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Server plugin panel

    4. Click on a tab with existing integration

    5. Click on "Edit authorization" link

    6. Change "Integration name"

    7. Type your Jira Server credentials

    8. Submit the form

    note

    You can edit the "Integration name" only. If you need other changes, please submit new integration.

    If you need to edit fields which should be posted in Jira Server, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Server plugin panel

    4. Click on a tab with existing integration

    5. Click on "Configure" button

    6. Choose issue type from the drop-down

    7. Check the needed fields and fill them in if necessary

    8. Click on "Submit" button

    Remove global Jira Server integration

    If you need to remove Jira Server integration, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Server plugin panel

    4. Click on a tab with existing integration

    5. Click on "Remove integration"

    6. Submit the action

    Project JIRA Server integration

    Add new project Jira Server integration

    If any project needs different Jira Server configurations, you should unlink a project from Global configurations and add a project configuration. It means that now when a new global integration is added to the our centralized test automation tool, it won't be applied to the unlinked project.

    For that,

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the JIRA Server integration panel

    4. Click on "Unlink and setup manually" button

    5. Fill and confirm the authorization form

    'Integration Name': <The name which you want to give to your integration> - should be unique
    'Link to BTS': <valid URL of bug tracking system>
    'Project key in BTS': <project key in bug tracking system>
    'Authorization Type': Basic (predefined)
    'BTS Username': <JIRA user name>
    'BTS Password': <JIRA user password>

    After you have created a connection with the JIRA project, you can choose predefined JIRA ticket fields. These fields will be shown to you all the time when you post the issue in Jira.

    This feature gives you the ability to choose which type you will post a ticket.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions:

    1. Click on "Configure" button

    2. Choose issue type from the drop-down

    3. Check the needed fields and fill them in if necessary

    4. Click on "Submit" button

    Now team members on this project will be able to submit issues in Jira. Options for Post Issue / Link issue are activated.

    You can add more integrations by clicking on "Add integration" button.

    Reset to project Jira Server Integrations

    If you want to delete project integrations with Jira Server and link your project with global configurations, please perform actions described below:

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the JIRA Server integration panel

    4. Click on "Reset to global settings" button

    5. Confirm the action

    Some tricks when you create a new connection:

    1. Verify that the link to the JIRA Server system is correct. There are several possible variants are possible, for instance:
    https://jira.company.com/jira
    https://jiraeu.company.com
    1. Verify the project key in JIRA Server is correct. Please fill in the Project key field with project key-value, e.g. project ABC-DEF has key ABCDEF.

    2. Verify the username and password data. Make sure, that the login name and not the email are in the username field. In case all the data above is correct, but the error appears again, check whether the user's credentials to JIRA Server are not expired. As far as JIRA Server sends the request in HTML format, we are not able to display the real reason for the error. To check and/or resolve the issue, please do the next steps:

      • Open JIRA Server page
      • Log in to JIRA Server with domain credentials using basic authorization (i.e., fill in user's login name and password into the fields)
      • Submit the login form Screen with CAPTCHA should appear
      • Enter the symbols
      • Submit the credentials again
      • Now try to establish the connection to JIRA Server on the ReportPortal project.
    3. SSL instance of JIRA (even cloud version) can be accessed by JIRA API token, used instead of a password. After you have connected Jira and our test automation results dashboard, you can choose an issue type that you will be able to add to Jira during the “Post Issue” operation. Also, the user can add predefined fields that the user can fill.

    Post issue to Jira Server

    Posting an issue to Jira Server means to create a new issue in Jira from ReportPortal and upload logs and attachments from an execution.

    If you want to post a new issue to Jira, you need to have a project or global integration with Jira Server.

    Post issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Post issue" option

    6. Fill in the "Post issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Predefined fields`: fields which you choose on Project Settings/ or Plugins
    `Included data`: which data should be posted to BTS (attachments, logs, comments)
    `BTS username`: reporter login in Jira Server
    `BTS password`: reporter password in Jira Server
    1. Submit the form

    2. A new issue will be posted in BTS with information from ReportPortal

    3. A label with issue ID will be added to the test item

    Linking an issue with an issue in Jira Server means adding a clickable link to an existing issue in Jira from ReportPortal that will show a status of this issue.

    Link issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Link issue" option

    6. Fill in the "Link issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Link to issue`: a full link to the item in BTS
    `Issue ID`: information which will be displayed on the label in ReportPortal
    1. Submit the form

    2. A label with issue ID will be added to the test item

    - + \ No newline at end of file diff --git a/plugins/ManagePlugins/index.html b/plugins/ManagePlugins/index.html index 07c7ca9de..ba38f00f3 100644 --- a/plugins/ManagePlugins/index.html +++ b/plugins/ManagePlugins/index.html @@ -12,7 +12,7 @@ - + @@ -35,7 +35,7 @@ Pros: Project Manager or Administrator configures integrations per project, team members from different projects can not see configurations of each other.

    Use case 3:

    Situation: On ReportPortal instance there are several projects. Separate projects are added for different teams. But for one team has been added several projects. So several projects on ReportPortal have connections with one Jira (or Rally) project and several projects have a connection with different Jira (or Rally) projects. Solution: configure global integrations on the Management board, and configure project integrations for Jira (or Rally) plugin on the Project settings. Pros: Administrator configures integration once for those who need the same settings, and Project Manager or Administrator configures integrations per project, for those projects who need to limit access.

    - + \ No newline at end of file diff --git a/plugins/Rally/index.html b/plugins/Rally/index.html index b9e640273..7b1b85edd 100644 --- a/plugins/Rally/index.html +++ b/plugins/Rally/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ Yes!

    Solution: Add two integrations to the project NNN-MMM in RALLY with names f.e. "Project -1" and "Project -2". Add to the "Project -1" issue type Defect and for "Project -2" - issue type Task. While posing issue procedure, choose integration with needed type.

    Update global RALLY integration

    If you need to edit RALLY integration authorization parameters, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on RALLY plugin panel

    4. Click on a tab with existing integration

    5. Click on "Edit authorization" link

    6. Change "Integration name"

    7. Type your RALLY credentials

    8. Submit the form

    note

    You can edit only "Integration name". If you need other changes, please submit new integration.

    If you need to edit fields which should be posted in RALLY, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on RALLY plugin panel

    4. Click on a tab with existing integration

    5. Click on "Configure" button

    6. Choose issue type from the drop-down

    7. Check the needed fields and fill them in if necessary

    8. Click on "Submit" button

    Remove global RALLY integration

    If you need to remove RALLY integration, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on RALLY plugin panel

    4. Click on a tab with existing integration

    5. Click on "Remove integration"

    6. Submit the action

    Project RALLY integration

    Add new project RALLY integration

    If any project needs different RALLY configurations, you should unlink a project from Global configurations and add a project configuration. It means that now when a new global integration is added to the ReportPortal, it won't be applied to the unlinked project.

    For that,

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the RALLY integration panel

    4. Click on "Unlink and setup manually" button

    5. Fill and confirm the authorization form

    'Integration Name ': <The name which you want to give to your integration> - should be unique
    'Link to BTS': <valid URL of bug tracking system>
    'Project ID in BTS': <project ID in bug tracking system>
    'Authorization Type': Basic (predefined)
    'BTS Username': <RALLY user name>
    'BTS Password': <RALLY user password>

    After you have created a connection with the RALLY project, you can choose predefined RALLY ticket fields. These fields will be shown to you all the time when you post the issue in the RALLY.

    This feature gives you the ability to choose which type you will post a ticket with.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions:

    1. Click on "Configure" button

    2. Choose issue type from the drop-down

    3. Check the needed fields and fill them in if necessary

    4. Click on "Submit" button

    Now team members on this project will be able to submit issues in RALLY. Options for Post Issue / Link issue are activated.

    You can add more integrations by clicking on "Add integration" button.

    Reset to project RALLY Integrations

    If you want to delete project integrations with RALLY and link your project with global configurations, please perform actions described below:

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the RALLY integration panel

    4. Click on "Reset to global settings" button

    5. Confirm the action

    Post issue to Rally

    Posting an issue to Rally means to create a new issue in Rally from ReportPortal and upload logs and attachments from an execution.

    If you want to post a new issue to Rally, you need to have a project or global integration with Rally.

    Post issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Post issue" option

    6. Fill in the "Post issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Predefined fields`: fields which you choose on Project Settings/ or Plugins
    `Included data`: which data should be posted to BTS (attachments, logs, comments)
    `ApiKey`: user apikey
    1. Submit the form

    2. A new issue will be posted in BTS with information from ReportPortal

    3. A label with issue ID will be added to the test item

    Linking an issue with an issue in Rally means adding a clickable link to an existing issue in Rally from ReportPortal that will show a status of this issue.

    Link issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Link issue" option

    6. Fill in the "Link issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Link to issue`: a full link to the item in BTS
    `Issue ID`: information which will be displayed on the label in ReportPortal
    1. Submit the form

    2. A label with issue ID will be added to the test item

    - + \ No newline at end of file diff --git a/plugins/SauceLabs/index.html b/plugins/SauceLabs/index.html index a55354f67..24c862699 100644 --- a/plugins/SauceLabs/index.html +++ b/plugins/SauceLabs/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Sauce Labs

    To install the Sauce Labs plugin, see Upload plugin section.

    Add the Sauce Labs integration

    Configure the integration with Sauce Labs to watch a video of test executions in the our centralized test automation tool.

    Permissions:

    • User with account role ADMINISTRATOR can configure the integration for the whole instance or per project.
    • User with account role PROJECT MANAGER can configure the integration only on a project where they are assigned on as Project Manager.

    Global Sauce Labs integration

    To configure Sauce Labs for the whole instance:

    1. Log in to ReportPortal as an ADMIN user.

    2. Open the list on the right of the user's image.

    3. Click the 'Administrative' link.

    4. Click 'Plugins' from the left-hand sidebar.

    5. Click the 'Sauce Labs' tab.

    6. Click 'Add integration'.

    7. The following fields should be present:

      `User name`: <host_name_of_email_server>
      `Access token`: <your access token>
      `Data center`: <Europe, USA>
    8. Confirm data in the form.

    After you've added the Sauce Labs integration, you can use the Sauce Labs in ReportPortal.

    Project Sauce Labs integration

    If the plugin is configured on the global level, then all projects at this instance will use this configuration by default.

    However, you can unlink the integration from the global level and use a project level configuration instead.

    To unlink the integration, click 'Unlink & Setup Manually', then follow the on-screen instructions.

    How to use the Sauce Labs integration

    Before using this feature, you should report test results to ReportPortal with the attribute: SLID: XXXXXXXX.

    Where: SLID = Sauce Labs ID and XXXXXXXX = # of job in Sauce Labs

    The SLID: XXXXXXXX attribute links the execution in ReportPortal and a job in Sauce Labs. If a test item has attribute SLID: XXXXXXXX, and there is a global or project integration with Sauce Labs, a user will be able to view a video from Sauce Labs for the appropriate job in ReportPortal on a log view.

    - + \ No newline at end of file diff --git a/quality-gates/AssessmentOfTestResultsUsingQualityGates/index.html b/quality-gates/AssessmentOfTestResultsUsingQualityGates/index.html index b91dc7d1f..ab9ebb602 100644 --- a/quality-gates/AssessmentOfTestResultsUsingQualityGates/index.html +++ b/quality-gates/AssessmentOfTestResultsUsingQualityGates/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ Second, let's check how to send assessment results to CI/CD.

    Quality Gate Analysis

    How to run Quality Gates Manually

    By default, all launches have "N\A" status. It means that Quality Gate analysis has not been run for these launches.

    If you want to run Quality Gate analysis manually, click on the label "N/A" and click on the "Run Quality Gate" in the opened pop-up.

    How to recalculate Quality Gates

    If you want to recalculate Quality Gate status for a launch, just perform next actions:

    • click on the label with a status of a launch
    • click on the "Recalculate" in the opened pop-up

    Quality Gates can not be run for launches in progress.

    note

    If Quality Gate status has been already sent to CI/CD, a status can not be recalculated for a such launch.

    How to run Quality Gates Automatically

    You can configure Auto Quality Gate Analysis on the Project Settings. If you switch Quality Gate Analysis ON, the system will start QG analysis on the launch finish.

    Quality Gate Status and Timeout

    When a launch finishes, the system starts Quality Gate Analysis.

    First, the system checks if there Quality Gate for a launch under analysis. If there is no, such Quality Gate, the system shows error message. Second, if Quality Gates is found, the systems checks all rules in Quality Gate one by one and define a status for each rule Third, if all rules are done, the system defines the status of a whole Quality Gate.

    How is status calculated:

    StatusCalculationMeaning
    PassedAll rules in a Quality Gate have status PASSEDQuality Assessment passed, a test run matches specified quality criteria
    UndefinedIf Quality Gate does not have FAILED, IN PROGRESS rules, but at least one rule has status UndefinedQuality Assessment can not be finished ❓
    In ProgressIf Quality Gate does not have FAILED rules, but at least one rule in a Quality Gate has status IN PROGRESSQuality Assessment is in progress
    FailedAt least one rule in a Quality Gate has status FAILEDQuality Assessment failed, a test run does not match specified quality criteria

    Forth, if there is an integration with CI/CD, the system sends status to CI/CD tools to a pipeline.

    ❓ The reasons why Quality Gates can get a status Undefined:

    • For "Amount of issues" rule: if a number of To Investigate issues in the analyzed launch is more than allowable To Investigate level
    • For "New Failure": if a baseline is not found in the system

    If you get this status, you can proceed with launch analysis (or choose another baseline) and rerun Quality Gates. For that check the section ### How to recalculate Qulaity Gates.

    Timeout

    Specially for integration with CI\CD, Quality Gates has parameter Timeout. If a launch whose status should be sent to a pipeline, gets UNDEFINED status, the system uses a value from Timeout. Default Timeout equals to 2 hours. It means, that after 2 hours after launch finish, the system force recaluculats Quality Gate Status and defined status.

    Jenkins Job StatusQuality Gate StatusDescription
    SUCCESSPASSEDAll Rulles Passed
    FAILEDFAILEDAt least one rule does not pass

    If you want to choose other options for a timeout, you can do it:

    • Login ReportPortal as Project Manager or Admin
    • Open Project Settings> Quality Gates
    • Click on the pencil on the Quality Gate rule
    • Click on "Edit Details."
    • Choose needed option in a dropdown "Timeout"
    • Save a Quality Gate

    If there is no needed option in the dropdown, you can specify custom value via API.

    Quality Gate Report

    A Quality Gate report is a full report that shows information on Quality gate results. This is a table that shows:

    • all rules in a Quality Gate
    • rule status: Passed/Failed/Skipped
    • expected results
    • actual results

    All actual results are clickable in the report except New Failure. A clickable area for New failure will be available in the version 5.7. So user can drill down and investigate items, that became a reason of build failure.

    - + \ No newline at end of file diff --git a/quality-gates/DeleteQualityGates/index.html b/quality-gates/DeleteQualityGates/index.html index b7f8dc2bd..617170009 100644 --- a/quality-gates/DeleteQualityGates/index.html +++ b/quality-gates/DeleteQualityGates/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/quality-gates/FeatureOverview/index.html b/quality-gates/FeatureOverview/index.html index 9197124f7..b7afd9150 100644 --- a/quality-gates/FeatureOverview/index.html +++ b/quality-gates/FeatureOverview/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Feature overview

    Quality Gate analysis provides capabilities to speed up CI/CD pipeline by sending auto-feedback to your CI/CD tools. ReportPortal assesses the build quality and sends auto feedback to CI/CD.

    Quality Gates plugin adds to our continuous testing platform possibilities:

    • to create quality rules based on general test automation KPI: number of executed tests and executed tests, failure rate, failure of critical components, number of issues in completed tests, number of essential issues in the critical parts, new failures & new errors in the build
    • run Quality Gates analysis for build and view build report that helps to troubleshoot issues in the build
    • automatically send Quality Gates status to CI/CD.
    - + \ No newline at end of file diff --git a/quality-gates/HowToInstallQualityGates/index.html b/quality-gates/HowToInstallQualityGates/index.html index c4c502f43..92e60ea83 100644 --- a/quality-gates/HowToInstallQualityGates/index.html +++ b/quality-gates/HowToInstallQualityGates/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/quality-gates/IntegrationWithCICD/IntegrationWithGitLabCI/index.html b/quality-gates/IntegrationWithCICD/IntegrationWithGitLabCI/index.html index b2b0d3c31..436054bba 100644 --- a/quality-gates/IntegrationWithCICD/IntegrationWithGitLabCI/index.html +++ b/quality-gates/IntegrationWithCICD/IntegrationWithGitLabCI/index.html @@ -12,7 +12,7 @@ - + @@ -137,7 +137,7 @@ shell scripts and console commands. We also implemented HashiCorp Vault integration to store our test secrets securely. To provide more outlook we described how to run tests in Kotlin and Python.

    And here are the corresponding pipeline files, which we implemented:

    - + \ No newline at end of file diff --git a/quality-gates/IntegrationWithCICD/IntegrationWithJenkins/index.html b/quality-gates/IntegrationWithCICD/IntegrationWithJenkins/index.html index be5eb4cdf..e65e13414 100644 --- a/quality-gates/IntegrationWithCICD/IntegrationWithJenkins/index.html +++ b/quality-gates/IntegrationWithCICD/IntegrationWithJenkins/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    Integration with Jenkins

    Jenkins configuration

    1. Go to “Manage Jenkins” -> “Manage Plugins”.
    2. Make sure that the necessary Jenkins plugin is installed:

    a. Switch to the “Installed” tab and search for the “Webhook Step” plugin.

    b. If no results of the search:

    i. Switch to the “Available” tab;

    ii. Search for “Webhook Step”;

    iii. Install the plugin with “Download now and install after restart”.

    1. Define webhook configuration to the Jenkins job/pipeline before tests execution:
    def hook = registerWebhook();
    def encodedUrl = sh(script: "echo -n ${hook.getURL().toString()} | base64 -w 0", returnStdout: true)

    encodedUrl – this is a unique string that will be generated from the Jenkins job/pipeline and connect each reported launch with the appropriate Jenkins run from which the launch was reported.

    Put the encodedUrl variable into the test execution string at the enumeration of RP.attributes. For example(Maven build):

    Drp.attributes='k1:v1;k2:v2;rp.webhook.key:${encodedUrl}'
    1. Configure webhook waiting data from RP:

    a. Option #1

    This option allows sending the Quality Gates result status to the separate pipeline stage. It doesn’t affect the tests execution stage, and the status of that stage will be determined by the result of the Quality Gate status. Add additional pipeline stage Wait for webhook and define the particular TIMEOUT_TIME, how long Jenkins should wait for data from RP:

    stage('Wait for webhook') {
    timeout(time: params.TIMEOUT_TIME, unit: params.TIMEOUT_UNIT) {

    echo 'Waiting for RP processing...'
    data = waitForWebhook hook;
    echo "Processing finished... ${data}"

    def jsonData = readJSON text: data
    assert jsonData['status'] == 'PASSED'
    }
    }

    Parameters for TIMEOUT_TIME and TIMEOUT_UNIT can be defined like that:

    parameters {
    string(name: 'TIMEOUT_TIME', defaultValue: '30', description: '')
    string(name: 'TIMEOUT_UNIT', defaultValue: 'SECONDS', description: '')
    }

    b. Option #2

    This option should send the results from the RP to the tests run pipeline stage, and the status of that stage(tests execution) will be determined by the result of the Quality Gate status. Add next code in the pipeline stage, where tests run:

    echo 'Waiting for RP processing...'
    data = waitForWebhook hook;
    echo "Processing finished... ${data}"

    def jsonData = readJSON text: data
    assert jsonData['status'] == 'PASSED'

    If the Jenkins received a response about QualityGate status from RP, the build status should be appropriately marked:

    Jenkins Job StatusQuality Gate StatusDescription
    SUCCESSPASSEDQuality Gate is passed
    ABORTEDUNDEFINEDThe Jenkins timeout has been exceeded
    FAILEDFAILEDQuality Gate is failed
    - + \ No newline at end of file diff --git a/quality-gates/IntegrationWithCICD/index.html b/quality-gates/IntegrationWithCICD/index.html index dc8184ebb..07bc355d4 100644 --- a/quality-gates/IntegrationWithCICD/index.html +++ b/quality-gates/IntegrationWithCICD/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/quality-gates/QualityGateEdit/index.html b/quality-gates/QualityGateEdit/index.html index b17b16f5f..b8841563a 100644 --- a/quality-gates/QualityGateEdit/index.html +++ b/quality-gates/QualityGateEdit/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/quality-gates/QualityGatePurpose/index.html b/quality-gates/QualityGatePurpose/index.html index 91f5063be..c426e3f81 100644 --- a/quality-gates/QualityGatePurpose/index.html +++ b/quality-gates/QualityGatePurpose/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Quality Gate Purpose

    ReportPortal is a continuous testing platform with build-in functionality - Quality Gates.

    The primary Quality Gate purpose is to speed up a CI/CD pipeline.

    Quality Gates plugin supports the next user flow:

    • Create Quality Gate rules in ReportPortal
    • Start a test job in CI/CD with webhook
    • ReportPortal assesses launch quality using created rules
    • ReportPortal sends auto feedback to CI/CD tool with status Passed or Failed
    • Based on ReportPortal Feedback, CI/CD tool fails a build or promotes it to the next stage

    The second purpose of Quality Gate is to simplify interactions between a QA team and business stakeholders. Quality Gates provides a possibility to create business-friendly rules such as:

    • define required number of tests in a job
    • specify tests that should be executed (features, components)
    • define minimum executed tests failure rate
    • new failure of critical components
    • define a number of issues in executed tests
    • define a number of critical issues in the critical components
    • new failures & new errors in the build

    And it leads us to the third purpose of Quality Gates. It is a full-featured report on Quality Gates analysis results which helps to troubleshoot problems and fix them.

    - + \ No newline at end of file diff --git a/quality-gates/QualityRulesConfiguration/index.html b/quality-gates/QualityRulesConfiguration/index.html index 5a3222a68..dc2e3ca18 100644 --- a/quality-gates/QualityRulesConfiguration/index.html +++ b/quality-gates/QualityRulesConfiguration/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ Failure rate = items with type STEP with status FAILED / ALL items with type STEP in the analyzed launch

    You can add only 1 "All tests failure rate" rule to 1 Quality Gate.

    Failure rate in a component/feature/etc

    You can also track the failure rate of tests that belong to a feature, component, priority or others in a launch. For that, tests in the analyzed launch should have attributes (f.i. feature: Payment, or component: Payment, or priority: critical, or any others).

    Then you need to add an "amount" rule with an attribute option:

    1. Open Project Settings> Quality Gate
    2. Click on the pencil on the Quality Gate
    3. Click on the drop-down: "Add a new rule"
    4. Choose the option "Percent"
    5. Choose option "Tests with attributes"
    6. Add a % of min allowable failure rate - N%
    7. Click on the tick
    8. The rule is added to the Quality Gate

    In this case, on the finish, the system will automatically analyze a launch and compare the failure rate of tests with a specified attribute in the analyzed launch with failure rate from the rule in the Quality Gate. If the failure rate is more than specified in the rule, the system fails the rule and Quality Gate.

    note

    How a failure rate is calculated

    Failure rate for tests with a attribute = items with type STEP with status FAILED and with a specified attribut / ALL items with type STEP in the analyzed launch and with a specified attribut

    You can add several "Tests with attribute percent" rules to the Quality Gate. But it is impossible to create duplicates.

    Not passing rate in the launch or a component/feature/etc.

    You can use the "Percent rule" in several options: Failure /Not passed.

    The failure rule is described in the previous sections.

    If you choose the "Not passed" option, the system will use another calculation method.

    note

    How a notpassed rate is calculated

    Not passed rate = items with type STEP with status FAILED and SKIPPED / ALL items with type STEP in the analyzed launch

    Not passed rate for tests with a attribute = items with type STEP with status FAILED and SKIPPED and with a specified attribut / ALL items with type STEP > in the analyzed launch and with a specified attribut

    Amount of issues in the run

    Case 1: You want to track that the regression suite run should not have a critical issue or Product bugs.

    Case 2: Regression suite contains 500 tests with critical priority. You want to track that the run should not have critical issues or Product bugs (or any other) in these 500 tests.

    Amount of issues also has 2 options "All tests" and "Tests with the attribute". The purpose of the rule is to limit the number of unwanted defects in the run. With the option "All tests", you can restrict issues for all tests in the launch.

    With the option "Test with attributes", you can limit issues in the critical features, components, etc.

    Ammount of issues in the launch

    For adding this rule Project Manager or Admin should:

    1. Open Project Settings> Quality Gate
    2. Click on the pencil on the Quality Gate
    3. Click on the drop-down: "Add a new rule"
    4. Choose the option "Amount of issues"
    5. Choose the option "All tests"
    6. Choose a defect type: "Total Defect Types" or "Defect Type"
    7. Add a number of min allowable issues - N%
    8. Click on the tick
    9. The rule is added to the Quality Gate

    On the finish, the system will automatically analyze a launch and compare a number of specified defects in the analyzed launch with a issues numbers in the "amount issues" rule in the Quality Gate. If the a number of issues in the launch is more than in the rule, the system fails the rule and Quality Gate.

    note

    How a number of issues is calculated

    if in the rule specified "Total Defect type"

    A number of issues in the test run = SUM of items with defect types which belong to the Defect type group

    if in the rule specified "Defect type"

    A number of issues in the test run = number of items with specified defect types

    Ammount of issues in tests with attribute

    For this rule a user can choose an option Tests with an attribute". The logic for this rule is the same as for rule "Amount of tests with an attribute".

    Allowable level of To investigate

    When you choose a rule "Amount of issues", the system automatically adds a parameter "Allowable To investigate level" to the Quality Gate.

    What does this parameter mean?

    The purpose of the rule is a check and a guarantee that the run does not contain specified issues. But if a launch includes "To investigate", the system can not make an analysis of the system and guarantee that the forbidden problems are absent in a launch.

    For this reason, we have added the parameter "Allowable To investigate level". By default, this parameter equals 0. But you can change this parameter and set your custom value.

    For this Project Manager or Admin can edit Quality Gate:

    • Open Project Settings> Quality Gates
    • Click on the pencil on the Quality Gate
    • Click on the button "Edit Details"
    • Change value in the field "Allowable TI"
    • Click on the button "Save"

    New failures in the run

    Case 1: Regression suite has 1000 tests. In the last released version, five tests failed in a regression suite. You want to track that the regression runs on the version in development should not have new failures.

    Case 2: Regression suite contains 500 tests with critical priority. In the last released version 1 test with critical priority failed. You want to track that critical tests in the regression run on the version in development should not have new failures.

    The purpose of the rule is to block a run that has new failures compared to a chosen baseline.

    New failures also have 2 options "All tests" and "Tests with an attribute". The purpose of the rule is to block a run that has new failures compared to a chosen baseline.

    1. Open Project Settings> Quality Gate
    2. Click on the pencil on the Quality Gate
    3. Click on the drop-down: "Add a new rule."
    4. Choose the option "New failure."
    5. Choose the option "All tests"/"Test with attributes."
    6. Click on the tick
    7. The rule is added to the Quality Gate

    In this case, on the finish, the system will automatically analyze a launch and compare failed tests /or failed tests with the specified attribute in the analyzed launch with tests in the baseline. It fails a rule if the system detects a new failure in the launch or in tests with specified attributes.

    How does the rule works

    For defining test uniqueness, our continuous testing platform uses Test Case ID principles.

    note

    For now, ReportPortal can not process items with the same Test Case ID correctly.

    How to choose a Baseline for the "New failures" rule

    Default Baseline

    By default, a system will use a previous launch for comparison. For example, for "Launch A #3", the system will use "Launch A #2" as a baseline. If there is no "Launch A #2" (f.e. this launch has been deleted by retention job) in the system, the system will use "Launch A #1".

    If there is no fitting launch in the system, the "New failure" rule will get the status "Undefine".

    Customized Baseline

    If you want to choose other options for a baseline, you can do it:

    • Login ReportPortal as Project Manager or Admin
    • Open Project Settings> Quality Gates
    • Click on the pencil on the Quality Gate rule
    • Click on "Edit Details."
    • Unclick a checkbox on "Choose a previous launch as a baseline."
    • The system activates fields for baseline configuration
    CaseFileds configuration
    You want to specify a static launch that should always be usedSelect launch name and add launch number in the baseline section
    You want to specify dynamic launcgSelect launch name and check a button "Latest" ❓

    ❓ When you use "latest", the system will use the latest launch with a specified launch name, which has been run before the analyzed launch. If you want to specify a baseline, you also can add launch attributes. In this case, the system will use the latest launch with specified launch name and attributes, which have been run before the analyzed launch.

    New errors in the run

    “Unique errors” functionality with a new Quality Gates rule – New Errors – was implemented in version 5.7. This feature saves your time for searching and analyzing repeated errors in launches. “New Errors” rule will help to group errors into new and known ones and, for example, fail build if there are new error not seen previously.

    To begin using this functionality, you need to create a Quality Gate and add the “New Errors” rule. Please follow the steps below:

    1) Log in to ReportPortal as Admin/PM.

    2) Go to Project Settings.

    3) Select Quality Gates section.

    4) Click Create Quality Gate button.

    5) Enter Quality Gate Name and Analyzed Launch, then click Save button.

    note

    if you want the Quality Gate not to run for all launches, you can adjust it only for the launches with specific attributes. Click Add attribute and specify value and key, e.g., browser.

    On the example in the screenshot above Quality Gate will run for launches with name “Test” with attributes Browser Chrome, Feature Reporting, Device MacBook.

    6) Click on the Add a new rule dropdown and select New Errors.

    Click the “confirm” icon.

    note

    Please, note that “New Errors” rule can be created with “All tests” condition only.

    Before running automation tests, make sure that “Quality Gates” feature is ON.

    Now everything is ready to use.

    7) Go to automation testing tool.

    8) Run autotests.

    9) Go to ReportPortal.

    10) Open the Launches section and click the Refresh button at the top.

    11) Verify the Quality Gates' status.

    Passed - there are no failures.

    Failed - there are new errors.

    N/A - appears if the quality gate was created after a launch was finished, or there is no quality gate for this launch. If the status is Not Available, click on the “N/A” and then click “Run Quality Gate” button (+ “Refresh”).

    12) To look at the failed test results, click on the Failed status and then click on the number under Current column.

    You will be redirected to the Unique errors tab with a list of all new error logs of the launch. If you want to see known issues as well, open the All Unique Errors dropdown at the top and click the Known Errors checkbox.

    By default, a previous launch execution is used as a Baseline Launch for the Quality Gate. Besides, you can as well define any other launch by specifying its name and sequence number or select Latest for the prior run of the specified launch to be used as a baseline.

    To make these changes, click Edit Details on the Quality Gate page and uncheck the Choose a previous launch as a baseline checkbox.

    Follow the steps below depending on the preferable settings for the Baseline Launch.

    In this way you can compare analyzed launch not only with its previous execution but also with another launch.

    - + \ No newline at end of file diff --git a/quality-gates/UploadQualityGateToReportPortal/index.html b/quality-gates/UploadQualityGateToReportPortal/index.html index 513b00ac1..c12172df1 100644 --- a/quality-gates/UploadQualityGateToReportPortal/index.html +++ b/quality-gates/UploadQualityGateToReportPortal/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Upload Quality Gate to ReportPortal

    The default configuration of our continuous testing platform doesn't contain Quality Gate. For adding this feature, you need to receive a link to the .jar file from ReportPortal.

    Download the .jar file and upload it to ReportPortal. Fo that pleases perform, following actions:

    • Login ReportPortal as an Admin
    • Open Admin Page > Plugins
    • Click on the button Upload
    • Add .jar file to the modal Upload plugin
    • And click the button Upload
    • Reload page

    As soon as the plugin has been added to the ReportPortal, a new Quality Gates tab will be added to the Project Settings.

    On the All launches page, the system adds a label "N/A" to each launch. A label "N/A" means that the Quality Gates has not been run for a launch yet.

    - + \ No newline at end of file diff --git a/reportportal-configuration/ComponentsOverview/index.html b/reportportal-configuration/ComponentsOverview/index.html index 630591155..c0da624bf 100644 --- a/reportportal-configuration/ComponentsOverview/index.html +++ b/reportportal-configuration/ComponentsOverview/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ below and creates internal OAuth2 token which is used by UI and agents. There are two types of tokens:
  • UI (expiring token)
  • API - non-expiring token, intended to use on agent side
  • Analyzer Service

    Keeps index of user logs per project and provides ability to perform search by that index. Used by auto-analysis functionality.
    Collects and processes the information, then sends it to Elasticsearch.

    Migrations Service

    Database migrations written in Go. Migrate reads migrations from sources and applies them in correct order to a database.

    Index Service

    The Index services handle requests that do not match any pattern of other services. It also aggregates some information/health data from other services to provide UI with that information.

    UI Service

    All statics for user interface.

    - + \ No newline at end of file diff --git a/reportportal-configuration/CreationOfProjectAndAddingUsers/index.html b/reportportal-configuration/CreationOfProjectAndAddingUsers/index.html index 309beac28..3fc708711 100644 --- a/reportportal-configuration/CreationOfProjectAndAddingUsers/index.html +++ b/reportportal-configuration/CreationOfProjectAndAddingUsers/index.html @@ -12,7 +12,7 @@ - + @@ -20,31 +20,31 @@

    Creation of project and adding users

    The main question of how you can organize your working space in ReportPortal. -Let's see two use cases which can help you to make a decision.

    Use Case 1:

    Situation: We have a small team. Everybody can see everything. We need one dashboard which shows information about the whole project.

    Solution: Create one project. Assign all users on the created project. View all types of test cases (UI, API, Unit and so on) on this project. Divide executions by custom filters. Create a dashboard with a widget based on filters.

    Pros: You have a dashboard that can combine all results needed for your team. You need to configure only one project.

    Cons: All team members can see all results, you can not configure permissions rules.

    Use Case 2:

    Situation: We have a big team with a difficult permission structure and nested streams. Only persons with granted permissions can see results of a certain stream.

    Solution: Create separate projects for different streams. Assign users to appropriate projects. Create a dashboard with a widget based on filters for each project.

    Pros: Security, only users with granted permission will have access to the data.

    Cons: You can not see a single dashboard for several dashboards.

    If you choose a strategy, it is time to create your first project.

    Permission: -Via "Administrate" section ADMINISTRATOR can create, configure, delete projects and add/invite/assign/unassign users on/to the projects.

    Create a project

    To create a project for a team:

    • Login to the ReportPortal as an ADMIN user
    • Open menu at the bottom.
    • Click the 'Administrate' link
    • Select 'Projects' from the left-hand sidebar
    • Click the 'Add New Project' button in the right top corner
    • Then enter a name of the project
    • Click the 'Add' button.

    A confirmation message in the status bar should appear.

    note

    The name of the project should contain between 3-256 symbols. +Let's see two use cases which can help you to make a decision.

    Use Case 1:

    Situation: We have a small team. Everybody can see everything. We need one dashboard which shows information about the whole project.

    Solution: Create one project. Assign all users on the created project. View all types of test cases (UI, API, Unit and so on) on this project. Divide executions by custom filters. Create a dashboard with a widget based on filters.

    Pros: You have a dashboard that can combine all results needed for your team. You need to configure only one project.

    Cons: All team members can see all results, you can not configure permissions rules.

    Use Case 2:

    Situation: We have a big team with a difficult permission structure and nested streams. Only persons with granted permissions can see results of a certain stream.

    Solution: Create separate projects for different streams. Assign users to appropriate projects. Create a dashboard with a widget based on filters for each project.

    Pros: Security, only users with granted permission will have access to the data.

    Cons: You can not see a single dashboard for several dashboards.

    If you choose a strategy, it is time to create your first project.

    Permission: +Via "Administrate" section ADMINISTRATOR can create, configure, delete projects and add/invite/assign/unassign users on/to the projects.

    Create a project

    To create a project for a team:

    • Login to the ReportPortal as an ADMIN user
    • Open menu at the bottom.
    • Click the 'Administrate' link
    • Select 'Projects' from the left-hand sidebar
    • Click the 'Add New Project' button in the right top corner
    • Then enter a name of the project
    • Click the 'Add' button.

    A confirmation message in the status bar should appear.

    note

    The name of the project should contain between 3-256 symbols. It can include Latin and numeric characters, as well as underscores and dashes. The name should be unique and cannot be changed after saving.

    An Admin can configure the project settings or leave them as the default. Project members with PROJECT_MANAGER roles are able to set up the project settings. To know how project settings could be updated, go to the ProjectConfiguration section.

    To know more about the project's management, go to "Administrate" section > "All Projects" page.

    You have a project, now add your team members to it. You can create a new user and send credentials for them - Add user or you can send them an invite link - Invite user.

    Add users to project

    Permission: -Via "Administrate" section, only ADMINISTRATOR can add users.

    To add a user, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All users" page.

    3. Click "Add User" button.

    4. Fill all fields with valid data in the "Add user" form and click on the "Add" button.

    'login': <unique_login_name>
    'Full Name': <user_full_name>
    'Email': <unique_email_address>
    'Account role': USER (by default)
    'Project Role': MEMBER (by default)
    'Password': could be entered manually (at least 6 symbols required) or generated via the link under the field.

    Example of user creation:

    Enter the user's login: Demo
    Enter the user's full name: Demo user
    Enter the user's email: demo_user@example.com
    'Account role': USER (by default)
    'Project Role': MEMBER (by default)
    Add password: 1q2w3e
    note

    This is the only place in the system where an Administrator can be created +Via "Administrate" section, only ADMINISTRATOR can add users.

    To add a user, perform the following steps:

    1. Login into ReportPortal instance as Administrator.
    2. Navigate to the "Administrate" section -> "All users" page.
    3. Click "Add User" button.
    4. Fill all fields with valid data in the "Add user" form and click on the "Add" button.
    'login': <unique_login_name>
    'Full Name': <user_full_name>
    'Email': <unique_email_address>
    'Account role': USER (by default)
    'Project Role': MEMBER (by default)
    'Password': could be entered manually (at least 6 symbols required) or generated via the link under the field.

    Example of user creation:

    Enter the user's login: Demo
    Enter the user's full name: Demo user
    Enter the user's email: demo_user@example.com
    'Account role': USER (by default)
    'Project Role': MEMBER (by default)
    Add password: 1q2w3e
    note

    This is the only place in the system where an Administrator can be created from. "Project role" is disabled, if "Administrator" value has been selected in the "Account role" field. The "ProjectRole" parameter is not specified for -Administrator, the Administrator has full privileges on the project.

    Submit the form.

    A confirmation message in the status bar should appear.

    The notification email letter is sent to the email address of the new user.

    note

    Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.

    By default, the system creates a personal project for new users. All new users which have been added to the ReportPortal will have a personal project along with the project where they have been assigned on. The user will be assigned to "Personal Project" with the PROJECT MANAGER project role.

    note

    If you do not need a personal project, ADMINISTRATOR can delete it. This project will be removed from the instance. But if the user is unassigned from all projects in the system, and he/she will log in to the ReportPortal after that - the deleted personal project will be created once more time.

    If you wish to know more about adding user options, go to "Administrate" section > "All Users" page.

    Invite a user to a project

    Permission: -Via Administrate section, only ADMINISTRATOR can invite users. -Via Project Space, ADMINISTRATOR and PROJECT MANAGER can invite users.

    To invite a user on the "All Users" page, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All users" page.

    3. Click on the "Invite User" button.

    4. Fill all fields with valid data in the "Invite user" form and click on the "Invite" button. - The invitation +Administrator, the Administrator has full privileges on the project.

    Submit the form.

    A confirmation message in the status bar should appear.

    The notification email letter is sent to the email address of the new user.

    note

    Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.

    By default, the system creates a personal project for new users. All new users which have been added to the ReportPortal will have a personal project along with the project where they have been assigned on. The user will be assigned to "Personal Project" with the PROJECT MANAGER project role.

    note

    If you do not need a personal project, ADMINISTRATOR can delete it. This project will be removed from the instance. But if the user is unassigned from all projects in the system, and he/she will log in to the ReportPortal after that - the deleted personal project will be created once more time.

    If you wish to know more about adding user options, go to "Administrate" section > "All Users" page.

    Invite a user to a project

    Permission: +Via Administrate section, only ADMINISTRATOR can invite users. +Via Project Space, ADMINISTRATOR and PROJECT MANAGER can invite users.

    To invite a user on the "All Users" page, perform the following steps:

    1. Login into ReportPortal instance as Administrator.
    2. Navigate to the "Administrate" section -> "All users" page.
    3. Click on the "Invite User" button.
    4. Fill all fields with valid data in the "Invite user" form and click on the "Invite" button. - The invitation has been sent. You can copy the link to the invitation from the "Link to -invitation" field.

    5. The user will receive an email with the link to the invitation. Registration +invitation" field.

    6. The user will receive an email with the link to the invitation. Registration link will be active until the user registers in the system by this reference, -but not more than 24 hours. When the user clicks the link, he/she will see a registration form.

    7. The user needs to fill in the registration form and click the "Register" button to complete the registration. +but not more than 24 hours. When the user clicks the link, he/she will see a registration form.

    8. The user needs to fill in the registration form and click the "Register" button to complete the registration. The user will be assigned to the project that was specified by you during the invitation, -and to "Personal Project" with the PROJECT MANAGER project role.

    Assign user to the project

    Permission: -Via "Administrate" section, only ADMINISTRATOR can assign users. -Via Project Space ADMINISTRATOR and PROJECT MANAGER can assign users.

    Perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Users" page.

    3. Find a user and click "+ Assign to project" button.

    4. Fill the name of project.

    5. Select a project role.

    6. Click on the "Tick" button. - The user will be assigned to the project.

    Edit project role

    Permission: -Via "Administrate" section, only ADMINISTRATOR can edit the project role. -Via Project Space ADMINISTRATOR and PROJECT MANAGER can edit the project role.

    To edit the project role, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Users" page.

    3. Find a user and their project in the "Projects and roles" column.

    4. Click on the name of project.

    5. Select a new value from the "Project Role" drop-down.

    6. Click on the "Tick" icon.

    Unassign user from the project

    Permission: -Via "Administrate" section, only ADMINISTRATOR can unassign users. -Via Project Space ADMINISTRATOR and PROJECT MANAGER can unassign users.

    note

    Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.

    Depending on the project needs the assignment could be removed. -To unassign the assignment for the user on the project, perform the following steps:

    1. Navigate to the "Administrate" section -> "All Users" page.

    2. Find a user and their project in the "Projects and roles" column.

    3. Click on the name of project.

    4. Click on "Cross" icon near the needed project.

    5. Confirm the action. - The user will be unassigned from the current project but will stay in the system.

    note

    Users can not be unassign from their own personal projects.

    - +and to "Personal Project" with the PROJECT MANAGER project role.

    Assign user to the project

    Permission: +Via "Administrate" section, only ADMINISTRATOR can assign users. +Via Project Space ADMINISTRATOR and PROJECT MANAGER can assign users.

    Perform the following steps:

    1. Login into ReportPortal instance as Administrator.
    2. Navigate to the "Administrate" section -> "All Users" page.
    3. Find a user and click "+ Assign to project" button.
    4. Fill the name of project.
    5. Select a project role.
    6. Click on the "Tick" button. - The user will be assigned to the project.

    Edit project role

    Permission: +Via "Administrate" section, only ADMINISTRATOR can edit the project role. +Via Project Space ADMINISTRATOR and PROJECT MANAGER can edit the project role.

    To edit the project role, perform the following steps:

    1. Login into ReportPortal instance as Administrator.
    2. Navigate to the "Administrate" section -> "All Users" page.
    3. Find a user and their project in the "Projects and roles" column.
    4. Click on the name of project.
    5. Select a new value from the "Project Role" drop-down.
    6. Click on the "Tick" icon.

    Unassign user from the project

    Permission: +Via "Administrate" section, only ADMINISTRATOR can unassign users. +Via Project Space ADMINISTRATOR and PROJECT MANAGER can unassign users.

    note

    Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.

    Depending on the project needs the assignment could be removed. +To unassign the assignment for the user on the project, perform the following steps:

    1. Navigate to the "Administrate" section -> "All Users" page.
    2. Find a user and their project in the "Projects and roles" column.
    3. Click on the name of project.
    4. Click on "Cross" icon near the needed project.
    5. Confirm the action. - The user will be unassigned from the current project but will stay in the system.
    note

    Users can not be unassign from their own personal projects.

    + \ No newline at end of file diff --git a/reportportal-configuration/HowToGetAnAccessTokenInReportPortal/index.html b/reportportal-configuration/HowToGetAnAccessTokenInReportPortal/index.html index 3fd224335..89808637a 100644 --- a/reportportal-configuration/HowToGetAnAccessTokenInReportPortal/index.html +++ b/reportportal-configuration/HowToGetAnAccessTokenInReportPortal/index.html @@ -12,16 +12,16 @@ - +
    -

    How to get an access token in ReportPortal

    There are two ways to authorize in the ReportPortal API:

    1. Authorization with user’s login and password

    This is the main and recommended way to get access to ReportPortal API.

    Make the following HTTP request to get user's access token using login and password:

    POST <report_portal_url>/uat/sso/oauth/token

    BODY with parameters:
    grant_type: password
    username: <username>
    password: <password>

    Or you can use the following curl request:

    curl --header "Content-Type: application/x-www-form-urlencoded" \
    --request POST \
    --data "grant_type=password&username=<username>&password=<password>" \
    --user "ui:uiman" \
    <report_portal_url>/uat/sso/oauth/token

    Then you will receive a response with an access token:

    {
    "access_token": <access_token>,
    "token_type": "bearer",
    "expires_in": <token_lifetime_ms>,
    "refresh_token": <refresh_token>,
    ...
    }

    Now you can use “access_token” with any request to API by sending it as HTTP Authorization header:

    HTTP Header:
    Authorization: Bearer <access_token>

    2. Authorization with user's API Key (for agents)

    Another method involves using the API Key found on the user's Profile page.

    The API Key is a unique token that grants access to the ReportPortal REST API.

    To use it, log in and navigate to the Profile page, then find the API Keys tab. If you've previously created a token, it now has been converted to a Legacy API Key at the moment of migration to newest version and it remains valid and operational.

    note

    It will continue to work even if you generate new API Keys.

    Thus, you can use several API keys at the same time. And revoke unused, expired or publicly exposed keys.

    To generate a new API key in the ReportPortal app, click on the "Generate API Key" button.

    You are free to assign any name to this API key, as long as it is unique and consists of 1 to 40 characters. Keep in mind that duplicate API key names are not allowed.

    The system will automatically prefix the generated API key with its assigned name for easy identification. If the API key name contains spaces or underscores, these will be replaced by hyphens in the API key prefix.

    It's crucial to understand that the API key will be visible only at the point of creation. We strongly recommend copying and securely storing it for future use, as it will be impossible to retrieve later. This practice aligns with stringent security measures and standards.

    You have the ability to create multiple API keys for various purposes, such as for automation or for integration with third-party services. However, it's important to note that all API keys generated from the user's Profile page are functionally equivalent from the permissions standpoint.

    Users can also revoke an API key at any time. Upon revocation, all related information will be removed from the database, and the revoked API key will no longer be usable.

    An API key functions similarly to a regular token. When making requests to the ReportPortal API, simply include it in the HTTP Authorization header as follows:

    HTTP Header:
    +

    How to get an access token in ReportPortal

    There are two ways to authorize in the ReportPortal API:

    1. Authorization with user’s login and password

    This is the main and recommended way to get access to ReportPortal API.

    Make the following HTTP request to get user's access token using login and password:

    POST <report_portal_url>/uat/sso/oauth/token

    BODY with parameters:
    grant_type: password
    username: <username>
    password: <password>

    Or you can use the following curl request:

    curl --header "Content-Type: application/x-www-form-urlencoded" \
    --request POST \
    --data "grant_type=password&username=<username>&password=<password>" \
    --user "ui:uiman" \
    <report_portal_url>/uat/sso/oauth/token

    Then you will receive a response with an access token:

    {
    "access_token": <access_token>,
    "token_type": "bearer",
    "expires_in": <token_lifetime_ms>,
    "refresh_token": <refresh_token>,
    ...
    }

    Now you can use “access_token” with any request to API by sending it as HTTP Authorization header:

    HTTP Header:
    Authorization: Bearer <access_token>

    2. Authorization with user's API Key (for agents)

    Another method involves using the API Key found on the user's Profile page.

    The API Key is a unique token that grants access to the ReportPortal REST API.

    To use it, log in and navigate to the Profile page, then find the API Keys tab. If you've previously created a token, it now has been converted to a Legacy API Key at the moment of migration to newest version and it remains valid and operational.

    note

    It will continue to work even if you generate new API Keys.

    Thus, you can use several API keys at the same time. And revoke unused, expired or publicly exposed keys.

    To generate a new API key in the ReportPortal app, click on the "Generate API Key" button.

    You are free to assign any name to this API key, as long as it is unique and consists of 1 to 40 characters. Keep in mind that duplicate API key names are not allowed.

    The system will automatically prefix the generated API key with its assigned name for easy identification. If the API key name contains spaces or underscores, these will be replaced by hyphens in the API key prefix.

    It's crucial to understand that the API key will be visible only at the point of creation. We strongly recommend copying and securely storing it for future use, as it will be impossible to retrieve later. This practice aligns with stringent security measures and standards.

    You have the ability to create multiple API keys for various purposes, such as for automation or for integration with third-party services. However, it's important to note that all API keys generated from the user's Profile page are functionally equivalent from the permissions standpoint.

    Users can also revoke an API key at any time. Upon revocation, all related information will be removed from the database, and the revoked API key will no longer be usable.

    An API key functions similarly to a regular token. When making requests to the ReportPortal API, simply include it in the HTTP Authorization header as follows:

    HTTP Header:
    Authorization: Bearer <access_token>

    note

    Please be aware that this type of token is specifically designed for use by ReportPortal client tools (agents). We do not recommend using it to provide direct access to API endpoints.

    - + \ No newline at end of file diff --git a/reportportal-configuration/IntegrationViaPlugin/index.html b/reportportal-configuration/IntegrationViaPlugin/index.html index f247ee28e..b8c317d33 100644 --- a/reportportal-configuration/IntegrationViaPlugin/index.html +++ b/reportportal-configuration/IntegrationViaPlugin/index.html @@ -12,16 +12,16 @@ - +
    -

    Integration via plugin

    Users can reinforce ReportPortal with adding additional integrtions with:

    If you want to integrate ReportPortal with these external systems, and you can not find a needed tab on the Project Settings, please check the section in documentation Plugins.

    Integration configurations can be added on the global level (for all projects on the instance) in the Administrate section or the project level (only for one project) on Project Settings.

    If you have another configuration than other projects have or you want to integrate only your project with an external system, you should perform the next actions:

    1. Log in to ReportPortal as PROJECT MANAGER or ADMIN

    2. Go to Project settings > Integrations

    3. Click on one of the integration panels

    4. And click the button "Unlink and setup manually"

    By this action, you unlink the current project from the global settings and configure your integration.

    note

    If you unlink project setting and ADMIN changes global settings for the whole instance, your project will use your project settings.

    To return global settings, you need to click a button "Reset to global settings". +

    Integration via plugin

    Users can reinforce ReportPortal with adding additional integrtions with:

    If you want to integrate ReportPortal with these external systems, and you can not find a needed tab on the Project Settings, please check the section in documentation Plugins.

    Integration configurations can be added on the global level (for all projects on the instance) in the Administrate section or the project level (only for one project) on Project Settings.

    If you have another configuration than other projects have or you want to integrate only your project with an external system, you should perform the next actions:

    1. Log in to ReportPortal as PROJECT MANAGER or ADMINISTRATOR
    2. Go to Project settings > Integrations
    3. Click on one of the integration panels
    4. And click the button "Unlink and setup manually"

    By this action, you unlink the current project from the global settings and configure your integration.

    note

    If you unlink project setting and ADMIN changes global settings for the whole instance, your project will use your project settings.

    To return global settings, you need to click a button "Reset to global settings". In this case, your settings will be deleted, and integration will use global settings.

    You can always reset to the global settings.

    - + \ No newline at end of file diff --git a/reportportal-configuration/ProjectConfiguration/index.html b/reportportal-configuration/ProjectConfiguration/index.html index fe7d695c2..4f956298e 100644 --- a/reportportal-configuration/ProjectConfiguration/index.html +++ b/reportportal-configuration/ProjectConfiguration/index.html @@ -12,7 +12,7 @@ - + @@ -21,34 +21,30 @@

    Project configuration

    To see the list of available projects and open a project, click the drop-down list in the top of the left menu.

    ReportPortal supports customization of the default settings.

    Permission: Users with the Administrator role can edit project settings on the project "Settings" page in Administrate section and on the Project space. -Users with the PROJECT_MANAGER role can edit the settings on the project space only. -MEMBER/ OPERATOR/ CUSTOMER can only view applied project settings.

    Project settings

    To go to the project settings page, click the "Project Settings" icon in the left menu.

    The project configuration page will be opened.

    The project settings are divided into following tabs: "General", "Integrations", "Notifications", "Defect Types", "Analyzer", "Pattern Analysis", "Demo Data" and "Quality Gates" (if you have our premium feature).

    General settings

    Our test automation results dashboard allows you to control the amount of the stored data (launches, test items, logs and attachments) by removing outdated elements using Quartz jobs. -Functionality of data removing depends on two configurations.

    The first one is API service back-end environment variables that are described in ReportPortal jobs configuration

    The second one is the "General" tab you can configure parameter of data storage in ReportPortal for this project:

    • Name – is a disabled field as the project name cannot be changed.

    • Launch inactivity timeout - this parameter specifies the scheduled time for a job to interrupt inactive launches (launches which have the status 'in progress', but there is no any items during the chosen period). There are six options:

    • 1 hour,
    • 3 hours,
    • 6 hours,
    • 12 hours,
    • 1 day,
    • 7 days.
    • Keep launches - this parameter specifies how long the system will keep old launches in the data base. There are five options:
    • 7 days,
    • 14 days,
    • 21 days,
    • 30 days,
    • 90 days.

    After this period a launch will be deleted, and you can not see it in ReportPortal.

    • Keep logs - this parameter specifies how long the system will keep old logs in launches. Related launch structures will be saved, to keep statistics. There are five options:
    • 7 days,
    • 14 days,
    • 21 days,
    • 30 days,
    • 90 days.
    • Keep attachments - this parameter specifies how long to keep binary data (screenshots, files, video, and others attachments) -in the system. There are five options:
    • 7 days,
    • 14 days,
    • 21 days,
    • 30 days,
    • 90 days.

    Integrations

    The "Integration" tab can allow the project to connect ReportPortal with external systems or rewrite global configurations for third party systems.

    For more information on this topic, please refer to Integration with external systems.

    E-mail notifications

    The "Notifications" tab provides the administrator with the ability to activate e-mail notifications on the project.

    ReportPortal provides a way to add multiple rules with specific conditions. The Notification rule should be unique per project, have a unique parameter set, and specify recipients. For Example: In case, Launch names, attributes).

    Permissions: -Users with Administrator a role can configure "Notifications" in the Administrate section. -Users with PROJECT_MANAGER roles can edit the settings on the project space only.

    To do that, perform the following steps:

    1. Login to the ReportPortal.

    2. Navigate to the Project -> Project "Settings" page.

    3. Open the "Notifications" tab and click on a button "Create new notification rule"

    4. Enter your email into the "From" field. This email will be used as a notification sender.

    5. Select recipients. To do that, start typing any symbols into the "Recipients" field. +Users with the PROJECT_MANAGER role can edit the settings on the project space only. +MEMBER/ OPERATOR/ CUSTOMER can only view applied project settings.

      Project settings

      To go to the project settings page, click the "Project Settings" icon in the left menu.

      The project configuration page will be opened.

      The project settings are divided into following tabs: "General", "Integrations", "Notifications", "Defect Types", "Analyzer", "Pattern Analysis", "Demo Data" and "Quality Gates" (if you have our premium feature).

      General settings

      Our test automation results dashboard allows you to control the amount of the stored data (launches, test items, logs and attachments) by removing outdated elements using Quartz jobs. +Functionality of data removing depends on two configurations.

      The first one is API service back-end environment variables that are described in ReportPortal jobs configuration

      The second one is the "General" tab you can configure parameter of data storage in ReportPortal for this project:

      • Name – is a disabled field as the project name cannot be changed.

      • Launch inactivity timeout - this parameter specifies the scheduled time for a job to interrupt inactive launches (launches which have the status 'in progress', but there is no any items during the chosen period). There are six options:

        • 1 hour,
        • 3 hours,
        • 6 hours,
        • 12 hours,
        • 1 day,
        • 7 days.
      • Keep launches - this parameter specifies how long the system will keep old launches in the data base. There are five options:

        • 7 days,
        • 14 days,
        • 21 days,
        • 30 days,
        • 90 days.

      After this period a launch will be deleted, and you can not see it in ReportPortal.

      • Keep logs - this parameter specifies how long the system will keep old logs in launches. Related launch structures will be saved, to keep statistics. There are five options:

        • 7 days,
        • 14 days,
        • 21 days,
        • 30 days,
        • 90 days.
      • Keep attachments - this parameter specifies how long to keep binary data (screenshots, files, video, and others attachments) +in the system. There are five options:

        • 7 days,
        • 14 days,
        • 21 days,
        • 30 days,
        • 90 days.

      Integrations

      The "Integration" tab can allow the project to connect ReportPortal with external systems or rewrite global configurations for third party systems.

      For more information on this topic, please refer to Integration with external systems.

      E-mail notifications

      The "Notifications" tab provides the administrator with the ability to activate e-mail notifications on the project.

      ReportPortal provides a way to add multiple rules with specific conditions. The Notification rule should be unique per project, have a unique parameter set, and specify recipients. For Example: In case, Launch names, attributes).

      Permissions: +Users with ADMINISTRATOR a role can configure "Notifications" in the Administrate section. +Users with PROJECT_MANAGER roles can edit the settings on the project space only.

      To do that, perform the following steps:

      1. Login to the ReportPortal.
      2. Navigate to the Project -> Project "Settings" page.
      3. Open the "Notifications" tab and click on a button "Create new notification rule"
      4. Enter your email into the "From" field. This email will be used as a notification sender.
      5. Select recipients. To do that, start typing any symbols into the "Recipients" field. You can select an item from the auto-complete tool-tip using the keyboard (use the "Up" and "Down" arrows and "Enter" button). You can also enter a custom email into the "Recipients" field. To add a custom -email, just enter the email address and press "Enter".

      6. The "Launch owner" is selected by default. Uncheck "Launch owner" to exclude -him/her from the notification.

      7. Select the "In Case" setting. To do that, select one of the following options from the "In Case" drop-down.

      8. Select launches (optional). To do that, start typing any symbols into the "Launch names" field. -You can select an item from the auto-complete tool-tip using the "Up" and "Down" arrows and clicking "Enter" on the keyboard. This is an alternate way you can add a new launch name that does not exist on the project. Several launches names can be selected; the recipients will receive notifications when each of them finishes.

      9. Then Select attributes (optional). To do that, start typing any symbols into the "Attribute key" and "Attribute value" fields. The system will suggest the results in the drop-down, after at least 1 symbol is provided. It is also possible to add a new attribute (that does not exist on the project). Several attributes can be selected at once; the corresponding recipients will receive notifications about the launches that have all the specified attributes.

      10. Switch ON Notifications

      11. The system will activate the "Email notification" option. After the launch is finished, the recipients will receive a notification via email.

      12. Add more rules, if needed. Each Notification rule should be unique.

      13. You can edit/ copy/enable/disable notification rule by clicking on the appropriate controls on the notification rule.

      note

      Users with a MEMBER/ OPERATOR/ CUSTOMER project role will not have the capability to edit the project settings, however, they do have the permissions to view them.

      tip

      For using this functionality be sure that the E-mail server is configured.

      Custom defect types

      The "Defect Types" tab allows users with permissions to create custom defect types as subtypes of default defects on the project.

      After Installation the ReportPortal by default sets-up the following defect types groups:

      To investigate - means that no investigation was performed on this defect -yet.

      Product Bug - defect was investigated and a production bug was found as a -cause for this test failure.

      Automation Bug - defect was investigated and an automation test is not -correct.

      System Issue - defect was investigated and it turns out that it is a system-level -issue, like the app, crashed and caused the test to fail.

      No Defect - defect was investigated and defined as not a defect.

      ReportPortal allows the use of existing defect types (Product Bug, Automation Bug, System Issue, No Defect, To investigate) and or to create custom ones on the project settings page.

      To create custom defect types, perform the following steps:

      1. Login into the ReportPortal.

      2. Navigate to Projects -> Project "Settings" page.

      3. Open "Defect Types" tab

      4. Click "Add Defect Type" button under any default defect type

      5. Add new defect type form will appear

      6. Enter "Defect name" and "Abbreviation", select color for defect presentation on the launches grid and widgets.

      7. Submit form. You will see an added defect type on the chart preview.

      Add more custom defects, if you need it. The system allows us to add up to ten subtypes of each default defect type.

      Now you can do bug triage and set defect types as default Product Bug/Automation Bug/System Issue/No Defect/TO investigate or custom defects. All of them will be available to select on the Defect Type editor. +email, just enter the email address and press "Enter".

    6. The "Launch owner" is selected by default. Uncheck "Launch owner" to exclude +him/her from the notification.
    7. Select the "In Case" setting. To do that, select one of the following options from the "In Case" drop-down.
    8. Select launches (optional). To do that, start typing any symbols into the "Launch names" field. +You can select an item from the auto-complete tool-tip using the "Up" and "Down" arrows and clicking "Enter" on the keyboard. This is an alternate way you can add a new launch name that does not exist on the project. Several launches names can be selected; the recipients will receive notifications when each of them finishes.
    9. Then Select attributes (optional). To do that, start typing any symbols into the "Attribute key" and "Attribute value" fields. The system will suggest the results in the drop-down, after at least 1 symbol is provided. It is also possible to add a new attribute (that does not exist on the project). Several attributes can be selected at once; the corresponding recipients will receive notifications about the launches that have all the specified attributes.
    10. Switch ON Notifications
    11. The system will activate the "Email notification" option. After the launch is finished, the recipients will receive a notification via email.
    12. Add more rules, if needed. Each Notification rule should be unique.
    13. You can edit/ copy/enable/disable notification rule by clicking on the appropriate controls on the notification rule.
    note

    Users with a MEMBER/ OPERATOR/ CUSTOMER project role will not have the capability to edit the project settings, however, they do have the permissions to view them.

    tip

    For using this functionality be sure that the E-mail server is configured.

    Custom defect types

    The "Defect Types" tab allows users with permissions to create custom defect types as subtypes of default defects on the project.

    After Installation the ReportPortal by default sets-up the following defect types groups:

    • To investigate - means that no investigation was performed on this defect yet.
    • Product Bug - defect was investigated and a production bug was found as a cause for this test failure.
    • Automation Bug - defect was investigated and an automation test is not correct.
    • System Issue - defect was investigated and it turns out that it is a system-level issue, like the app, crashed and caused the test to fail.
    • No Defect - defect was investigated and defined as not a defect.

    ReportPortal allows the use of existing defect types (Product Bug, Automation Bug, System Issue, No Defect, To investigate) and or to create custom ones on the project settings page.

    To create custom defect types, perform the following steps:

    1. Login into the ReportPortal.
    2. Navigate to Projects -> Project "Settings" page.
    3. Open "Defect Types" tab
    4. Click "Add Defect Type" button under any default defect type
    5. Add new defect type form will appear
    6. Enter "Defect name" and "Abbreviation", select color for defect presentation on the launches grid and widgets.
    7. Submit form. You will see an added defect type on the chart preview.

    Add more custom defects, if you need it. The system allows us to add up to ten subtypes of each default defect type.

    Now you can do bug triage and set defect types as default Product Bug/Automation Bug/System Issue/No Defect/TO investigate or custom defects. All of them will be available to select on the Defect Type editor. For more information refer to the Investigation of failure topic.

    note

    Default defects cannot be modified and or deleted from the system. Custom defect types can be deleted at any time.

    You can create up to 15 custom defect types for each group.

    tip

    If you have deleted a custom type from the system, all test executions with this deleted defect type get the parent type of the group in which deleted defect has belonged. Statistics updates in all launches where a deleted defect was present.
    For example, if you create a custom "Product Bug-1" as a subtype of "Product Bugs" group and investigate a few defects as "Product Bug-1", then remove "Product Bug-1" from your project, all investigated "Product Bug-1" defects will be shown as "Product Bug".

    Auto-analysis and Pattern analysis

    The "Auto-Analysis" and "Pattern analysis" tabs can allow reducing test failure analysis routine on the project.

    For more information on this topic, please refer to Analysis.

    Demo data

    The "Demo Data" tab provides a way to generate demo data on the project.

    The generated data could demonstrate how the launches, filter, and dashboard will look. On the other hand, demo data could be -modified or removed without any effect of your real objects.

    Management of users on the project

    On the "Project Members" page users with the appropriate roles can invite new members.

    Permissions:

    User with Administrator role and users with project role PROJECT_MANAGER.

    Invite user on a project

    To invite a user on the "Project Members" page, perform the following steps:

    1. Login into ReportPortal instance as with the PROJECT_MANAGER project role.

    2. Navigate to the "Project Members" page on the left menu.

    3. Click the "Invite User" tab.

    4. Enter the email address of the user in case he/she is not present in the ReportPortal database or enter his/her login name.

    5. In case the user is already available in the ReportPortal, his/her name will appear in the suggestion list. -If not, the Admin should enter the correct email address.

    6. Select an appropriate role.

    7. Then click 'Invite'.

    8. In case the user is already available in ReportPortal s/he will be assigned to the project -If not, the letter with an invitation link will be sent to the user email address.

    9. The user will receive an email with the link to the registration. -When the user clicks the link, he/she will see a registration form.

    10. The user needs to fill in the registration form and click the "Register" -button to complete the registration.

    11. The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT -MANAGER project role.

    Project role

    Every user is given a specific Project role within a specific project.

    Depends on the role, the user is able or not able to perform some actions. For more details, please see the "Permissions map".

    There are 4 possible Project roles in ReportPortal:

    • PROJECT MANAGER
    • MEMBER
    • OPERATOR
    • CUSTOMER
    note

    The administrator has all privileges on the project.

    Edit project role

    To edit the project role, perform the following steps:

    1. Login into the ReportPortal as a user with PROJECT_MANAGER project role.

    2. Navigate to the "Project Members" page on the left menu.

    3. Select a new value from the "Project Role" drop-down for the user. - The new project role will be automatically saved.

    Unassign user from the project

    Depending on the project needs the assignment could be removed. -To unassign the assignment for the user on the project, perform the following steps:

    1. Login into the ReportPortal as a user with PROJECT_MANAGER project role.

    2. Navigate to the "Project Members" page on the left menu.

    3. Find the required member.

    4. Click the 'Unassign' button for the user.

    5. Confirm the action in the popup.

    6. The user will be unassigned from the current project but will stay in the system.

    note

    Invite user, Assign/Unassign internal user to/from the project, change user's role on a project action can be done for a user +modified or removed without any effect of your real objects.

    Management of users on the project

    On the "Project Members" page users with the appropriate roles can invite new members.

    Permissions:

    User with ADMINISTRATOR role and users with project role PROJECT_MANAGER.

    Invite user on a project

    To invite a user on the "Project Members" page, perform the following steps:

    1. Login into ReportPortal instance as with the PROJECT_MANAGER project role.
    2. Navigate to the "Project Members" page on the left menu.
    3. Click the "Invite User" tab.
    4. Enter the email address of the user in case he/she is not present in the ReportPortal database or enter his/her login name.
    5. In case the user is already available in the ReportPortal, his/her name will appear in the suggestion list. +If not, the Admin should enter the correct email address.
    6. Select an appropriate role.
    7. Then click 'Invite'.
    8. In case the user is already available in ReportPortal s/he will be assigned to the project +If not, the letter with an invitation link will be sent to the user email address.
    9. The user will receive an email with the link to the registration. +When the user clicks the link, he/she will see a registration form.
    10. The user needs to fill in the registration form and click the "Register" +button to complete the registration.
    11. The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT +MANAGER project role.

    Project role

    Every user is given a specific Project role within a specific project.

    Depends on the role, the user is able or not able to perform some actions. For more details, please see the "Permissions map".

    There are 4 possible Project roles in ReportPortal:

    • PROJECT MANAGER
    • MEMBER
    • OPERATOR
    • CUSTOMER
    note

    The ADMINISTRATOR has all privileges on the project.

    Edit project role

    To edit the project role, perform the following steps:

    1. Login into the ReportPortal as a user with PROJECT_MANAGER project role.
    2. Navigate to the "Project Members" page on the left menu.
    3. Select a new value from the "Project Role" drop-down for the user. - The new project role will be automatically saved.

    Unassign user from the project

    Depending on the project needs the assignment could be removed. +To unassign the assignment for the user on the project, perform the following steps:

    1. Login into the ReportPortal as a user with PROJECT_MANAGER project role.
    2. Navigate to the "Project Members" page on the left menu.
    3. Find the required member.
    4. Click the 'Unassign' button for the user.
    5. Confirm the action in the popup.
    6. The user will be unassigned from the current project but will stay in the system.
    note

    Invite user, Assign/Unassign internal user to/from the project, change user's role on a project action can be done for a user with a similar and lower role only.

    - + \ No newline at end of file diff --git a/reportportal-configuration/ReportPortalJobsConfiguration/index.html b/reportportal-configuration/ReportPortalJobsConfiguration/index.html index c61a21610..8c5a8a0f9 100644 --- a/reportportal-configuration/ReportPortalJobsConfiguration/index.html +++ b/reportportal-configuration/ReportPortalJobsConfiguration/index.html @@ -12,21 +12,21 @@ - +
    -

    ReportPortal jobs configuration

    Currently, ReportPortal has 5 configurable jobs for data removing:

    • Clean launches
    • Clean logs
    • Clean attachments info
    • Clean attachments binaries
    • Project binary storage size recalculation

    Job execution period can be configured using environment variables, where period value should be provided as spring cron expression:

    • /30 * * * * - every 30 seconds
    • 0 /2 * * * - every 2 minutes
    • 0 0 /24 * * - every 24 hours (every day)

    Job environment variables example for docker

    Clean launches job

    Clean launches job removes launches, their test items and logs. -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON=0 /10 * * * - specifies how often job will be started (every 10 minutes)

    Clean logs job

    Clean logs job removes logs. -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON=0 /5 * * * - specifies how often job will be started (every 5 minutes)

    Clean attachments info job

    Clean attachments info job removes attachments data from main database storage and puts into temporary table to remove binaries from the file storage -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON=0 /2 * * * - specifies how often job will be started (every 2 minutes)

    Clean attachments binaries job

    Clean attachments binaries job uses data from the temporary table (filled by previous job) +

    ReportPortal jobs configuration

    Currently, ReportPortal has 5 configurable jobs for data removing:

    • Clean launches
    • Clean logs
    • Clean attachments info
    • Clean attachments binaries
    • Project binary storage size recalculation

    Job execution period can be configured using environment variables, where period value should be provided as spring cron expression:

    • */30 * * * * * - every 30 seconds
    • 0 */2 * * * * - every 2 minutes
    • 0 0 */24 * * * - every 24 hours (every day)

    Job environment variables example for docker

    Clean launches job

    Clean launches job removes launches, their test items and logs. +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON=0 */10 * * * * - specifies how often job will be started (every 10 minutes)

    Clean logs job

    Clean logs job removes logs. +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON=0 */5 * * * * - specifies how often job will be started (every 5 minutes)

    Clean attachments info job

    Clean attachments info job removes attachments data from main database storage and puts into temporary table to remove binaries from the file storage +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON=0 */2 * * * * - specifies how often job will be started (every 2 minutes)

    Clean attachments binaries job

    Clean attachments binaries job uses data from the temporary table (filled by previous job) and removes binaries from the file storage -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON=/30 * * * * - specifies how often job will be started (every 30 seconds)
    • RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSize=1000 - specifies the size of the batch to be selected from the temporary table to be removed

    Project binary storage size recalculation job

    Project binary storage size recalculation job updates allocated storage value of the project based on the existing attachments at the moment. -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON=0 /1 * * * - specifies how often job will be started (every minute)
    - +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON=*/30 * * * * * - specifies how often job will be started (every 30 seconds)
    • RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSize=1000 - specifies the size of the batch to be selected from the temporary table to be removed

    Project binary storage size recalculation job

    Project binary storage size recalculation job updates allocated storage value of the project based on the existing attachments at the moment. +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON=0 */1 * * * * - specifies how often job will be started (every minute)
    + \ No newline at end of file diff --git a/reportportal-configuration/authorization/ActiveDirectory/index.html b/reportportal-configuration/authorization/ActiveDirectory/index.html index 415378f06..6cc61a56f 100644 --- a/reportportal-configuration/authorization/ActiveDirectory/index.html +++ b/reportportal-configuration/authorization/ActiveDirectory/index.html @@ -12,18 +12,18 @@ - +
    -

    Active Directory

    Active Directory plugin is available in ReportPortal on the Plugins page.

    To set up access with Active Directory:

    1. Log in to the ReportPortal as an ADMIN user

    2. Then open the list on the right of the user's image.

    3. Click the 'Administrative' link

    4. Click the 'Plugins' from the left-hand sidebar

    5. Click on the'Activate Directory' tab.

    6. Click on Add new integration

    7. The next fields should be present:

    'Domain*': text
    'URL*': text
    'Base DN*': text
    'Email attribute*': text
    'Full name attribute' : text
    'Photo attribute' : text
    'UserSearchFilter' (the same as for LDAP): text

    Mandatory fields are marked with red. +

    Active Directory

    Active Directory plugin is available in ReportPortal on the Plugins page.

    To set up access with Active Directory:

    1. Log in to the ReportPortal as an ADMIN user
    2. Then open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Plugins' from the left-hand sidebar
    5. Click on the'Activate Directory' tab.
    6. Click on Add new integration
    7. The next fields should be present:
    'Domain*': text
    'URL*': text
    'Base DN*': text
    'Email attribute*': text
    'Full name attribute' : text
    'Photo attribute' : text
    'UserSearchFilter' (the same as for LDAP): text

    Mandatory fields are marked with red. Click the 'Submit' button. All users of Active Directory will have access to the ReportPortal instance.
    -For entrance to ReportPortal, the user should use their domain credentials (Login and password).

    Please find the example with configurations for Microsoft Active Directory that worked successfully provided by our user:

    Table with properties and values for LDAP Microsoft Active Directory

    PropertyValue
    Urlauth-servers.domain.org.int:3358
    Base DNOU=MAIN,DC=DOMAIN,DC=ORG,DC=INT
    Manager DNcn=Service UserBind,ou=Service Accounts,ou=Colombia,ou=America,ou=ServiceAccounts,dc=DOMAIN,dc=ORG,dc=INT
    User search filter(&(objectClass=user)(sAMAccountName={0}))
    Password encoder typeNO
    Email attributemail
    Full name attributedisplayName
    Photo attributethumbnailPhoto
    - +For entrance to ReportPortal, the user should use their domain credentials (Login and password).

    Please find the example with configurations for Microsoft Active Directory that worked successfully provided by our user:

    Table with properties and values for LDAP Microsoft Active Directory

    PropertyValue
    Urlauth-servers.domain.org.int:3358
    Base DNOU=MAIN,DC=DOMAIN,DC=ORG,DC=INT
    Manager DNcn=Service UserBind,ou=Service Accounts,ou=Colombia,ou=America,ou=ServiceAccounts,dc=DOMAIN,dc=ORG,dc=INT
    User search filter(&(objectClass=user)(sAMAccountName={0}))
    Password encoder typeNO
    Email attributemail
    Full name attributedisplayName
    Photo attributethumbnailPhoto
    + \ No newline at end of file diff --git a/reportportal-configuration/authorization/GitHub/index.html b/reportportal-configuration/authorization/GitHub/index.html index cb92d49f7..491dbfc29 100644 --- a/reportportal-configuration/authorization/GitHub/index.html +++ b/reportportal-configuration/authorization/GitHub/index.html @@ -12,20 +12,20 @@ - +
    -

    GitHub

    Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow.

    Presequences

    To enable this feature you need to register new application in Github

    Fill the following fields:

    NameValueDescription
    Application nameReport PortalJust something which allow you recognize what's this.
    Homepage URLhttps://{HOST}:{PORT}/uat/sso/userReplace with {HOST} and {PORT} with appropriate values of your instance. Naturally you can omit :{PORT} if it's default port for HTTPS protocol.
    Authorization callback URLhttps://{HOST}:{PORT}/uat/sso/login/githubAs in the previous field replace with {HOST} and {PORT} with your appropriate values.

    Once new application is created, you will have Client ID. Click on "Generate a new client secret" to get Client Secret, but do not close the window until you configure the Authorization on RP, since it will never show you the Secret again.

    ReportPortal configuration

    To setup access with GitHub auth on ReportPortal:

    1. Log in to the ReportPortal as an ADMIN user
    2. Open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Server Settings' from the left-hand sidebar
    5. Go to the 'Authorization Configuration' tab
    6. Then change the switcher position of 'Activate GitHub Authorization' to ON
    7. The Next fields should appear:
    'Client ID': <value_of_clientId>
    'Client Secret': <value_of_clientSecret>
    'Add GitHub Organization' button-link: (optional)
    note

    In case the 'Organization Name' is not added, all GitHub users will have access to the ReportPortal instance.
    +

    GitHub

    Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow.

    Presequences

    To enable this feature you need to register new application in Github

    Fill the following fields:

    NameValueDescription
    Application nameReport PortalJust something which allow you recognize what's this.
    Homepage URLhttps://{HOST}:{PORT}/uat/sso/userReplace with {HOST} and {PORT} with appropriate values of your instance. Naturally you can omit :{PORT} if it's default port for HTTPS protocol.
    Authorization callback URLhttps://{HOST}:{PORT}/uat/sso/login/githubAs in the previous field replace with {HOST} and {PORT} with your appropriate values.

    Once new application is created, you will have Client ID. Click on "Generate a new client secret" to get Client Secret, but do not close the window until you configure the Authorization on RP, since it will never show you the Secret again.

    ReportPortal configuration

    To setup access with GitHub auth on ReportPortal:

    1. Log in to the ReportPortal as an ADMIN user
    2. Open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Server Settings' from the left-hand sidebar
    5. Go to the 'Authorization Configuration' tab
    6. Then change the switcher position of 'Activate GitHub Authorization' to ON
    7. The Next fields should appear:
    'Client ID': <value_of_clientId>
    'Client Secret': <value_of_clientSecret>
    'Add GitHub Organization' button-link: (optional)
    note

    In case the 'Organization Name' is not added, all GitHub users will have access to the ReportPortal instance.
    If the 'Organization Name' is specified, only users of this organization will have an access to ReportPortal instance.
    If the Name of GitHub organization is not validated, verify that the name is correct.

    Example of GitHub auth configuration: Fill in the form:

    'Client Id': 8767988c424a0e7a2640
    'Client Secret': ef22c9f804257afaf399a2dada7c8f22dee5fd1b
    'Organization Name': reportportal

    Click on 'Submit' button. A confirmation message in status bar should be shown. A 'Login with GitHub' button will appear on login form.

    - + \ No newline at end of file diff --git a/reportportal-configuration/authorization/LDAP/index.html b/reportportal-configuration/authorization/LDAP/index.html index f4f3dcedd..33612fb12 100644 --- a/reportportal-configuration/authorization/LDAP/index.html +++ b/reportportal-configuration/authorization/LDAP/index.html @@ -12,17 +12,17 @@ - +
    -

    LDAP

    LDAP plugin is available in ReportPortal on the Plugins page.

    To set up access with LDAP:

    1. Log in to the ReportPortal as an ADMIN user

    2. Then open the list on the right of the user's image.

    3. Click the 'Administrative' link

    4. Click the 'Plugins' from the left-hand sidebar

    5. Click on the'LDAP' tab.

    6. Click on Add new integration

    7. The next fields should be present:

    'URL*': text
    'Base DN*': text
    'Manager DN': text
    'Manager password': text
    'User DN pattern': text
    'User search filter': text
    'Group search base': text
    'Group search filter': text
    'Password encoder type': text
    'Email attribute*': text
    'Full name attribute' : text
    'Photo attribute' : text

    Mandatory fields are marked with red. +

    LDAP

    LDAP plugin is available in ReportPortal on the Plugins page.

    To set up access with LDAP:

    1. Log in to the ReportPortal as an ADMIN user
    2. Then open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Plugins' from the left-hand sidebar
    5. Click on the'LDAP' tab.
    6. Click on Add new integration
    7. The next fields should be present:
    'URL*': text
    'Base DN*': text
    'Manager DN': text
    'Manager password': text
    'User DN pattern': text
    'User search filter': text
    'Group search base': text
    'Group search filter': text
    'Password encoder type': text
    'Email attribute*': text
    'Full name attribute' : text
    'Photo attribute' : text

    Mandatory fields are marked with red. Click the 'Submit' button. All users of LDAP will have access to the ReportPortal instance. For access to the ReportPortal, the user should use their domain credentials (Login and password).

    - + \ No newline at end of file diff --git a/reportportal-configuration/authorization/SAMLProvider/AzureSAML/index.html b/reportportal-configuration/authorization/SAMLProvider/AzureSAML/index.html index 842c5c1cd..8c3f45f2b 100644 --- a/reportportal-configuration/authorization/SAMLProvider/AzureSAML/index.html +++ b/reportportal-configuration/authorization/SAMLProvider/AzureSAML/index.html @@ -12,15 +12,35 @@ - +
    -

    Azure SAML

    SAML plugin is available in ReportPortal on the Plugins page.

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    Login to ReportPortal via Azure SAML is available starting from version 5.7 (SAML Okta was implemented in versions before 5.7).

    Azure SAML is a useful authorization method for big companies with 100+ employees, especially if this organization is already presented in Azure service. The main benefit here is no need for manual account creation. Users can log in to the ReportPortal using Azure SAML in an uncomplicated way: select login with SAML, then choose Azure, and upon login users’ data is synchronized with ReportPortal automatically.

    If your organization is using Azure SAML and some employees left, there is no need to remove their accounts from ReportPortal and from other Azure applications – just clearing their accounts in Azure will be enough.

    To configure authorization via Azure SAML we need to synchronize Azure and ReportPortal.

    Firstly, configure SAML on Azure side.

    Configure SAML on Azure side

    1. Log in to Azure portal using your organization creds.

    2. Click App Services.

    1. Click View in the Manage Azure Active Directory section.
    1. Click Manage Tenants.

    Create organization in Azure

    1. If you haven’t configured organization in Azure yet, click Create.
    note

    if you have configured organization in Azure, please, go to step 9.

    1. Select a tenant type (Azure Active Directory) and click Next: Configuration > button.
    1. Fill in the necessary fields and click Next: Review + create > button.
    1. Pass the Captcha verification and click the Create button.

    Create your application in Azure

    1. After the creation of an organization go to the Enterprise Applications section.
    1. Click New application.
    1. Click Create your own application.
    1. Enter the name of your application, choose Integrate any other application you don't find in the gallery (Non-gallery) bullet and click Create button.

    Assign users to the application in Azure

    1. Assign users (e.g., yourself) to this application. Please, follow the next screenshots:

    Configure Single sign-on on Azure

    1. Go to the Single sign-on section.
    1. Choose SAML.

    Basic SAML Configuration

    1. Configure Basic SAML Configuration settings as follows:

    Add Azure attributes

    1. Edit Attributes & Claims settings and add email, firstName and lastName attributes (default Azure attributes have ugly format). Please follow the next screenshots:

    SAML configuration is completed on Azure side after adding these attributes.

    Lastly, configure SAML on ReportPortal side.

    Configure SAML on ReportPortal side

    1. Log in to ReportPortal as Admin.

    2. Open Menu at the bottom and choose Administrate section.

    1. Select Plugins.
    1. Open SAML.
    1. Click the Add integration button.

    Synchronize Azure SAML and ReportPortal

    1. Synchronize Azure SAML and ReportPortal as follows:

    Finally, you can log in to ReportPortal using Azure SAML.

    - +

    Azure SAML

    SAML plugin is available in ReportPortal on the Plugins page.

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    Login to ReportPortal via Azure SAML is available starting from version 5.7 (SAML Okta was implemented in versions before 5.7).

    Azure SAML is a useful authorization method for big companies with 100+ employees, especially if this organization is already presented in Azure service. The main benefit here is no need for manual account creation. Users can log in to the ReportPortal using Azure SAML in an uncomplicated way: select login with SAML, then choose Azure, and upon login users’ data is synchronized with ReportPortal automatically.

    If your organization is using Azure SAML and some employees left, there is no need to remove their accounts from ReportPortal and from other Azure applications – just clearing their accounts in Azure will be enough.

    To configure authorization via Azure SAML we need to synchronize Azure and ReportPortal.

    Firstly, configure SAML on Azure side.

    Configure SAML on Azure side

    1. Log in to Azure portal using your organization creds.
    2. Click App Services. +
    3. Click View in the Manage Azure Active Directory section. +
    4. Click Manage Tenants. +

    Create organization in Azure

    1. If you haven’t configured organization in Azure yet, click Create.
      note

      if you have configured organization in Azure, please, go to step 9.

    2. Select a tenant type (Azure Active Directory) and click Next: Configuration > button. +
    3. Fill in the necessary fields and click Next: Review + create > button. +
    4. Pass the Captcha verification and click the Create button. +

    Create your application in Azure

    1. After the creation of an organization go to the Enterprise Applications section. +
    2. Click New application. +
    3. Click Create your own application. +
    4. Enter the name of your application, choose Integrate any other application you don't find in the gallery (Non-gallery) bullet and click Create button. +

    Assign users to the application in Azure

    1. Assign users (e.g., yourself) to this application. Please, follow the next screenshots: +

    Configure Single sign-on on Azure

    1. Go to the Single sign-on section. +
    2. Choose SAML. +

    Basic SAML Configuration

    1. Configure Basic SAML Configuration settings as follows: +

    Add Azure attributes

    1. Edit Attributes & Claims settings and add email, firstName and lastName attributes (default Azure attributes have ugly format). Please follow the next screenshots: +

    SAML configuration is completed on Azure side after adding these attributes.

    Lastly, configure SAML on ReportPortal side.

    Configure SAML on ReportPortal side

    1. Log in to ReportPortal as Admin.
    2. Open Menu at the bottom and choose Administrate section. +
    3. Select Plugins. +
    4. Open SAML. +
    5. Click the Add integration button. +

    Synchronize Azure SAML and ReportPortal

    1. Synchronize Azure SAML and ReportPortal as follows: +

    Finally, you can log in to ReportPortal using Azure SAML.

    + \ No newline at end of file diff --git a/reportportal-configuration/authorization/SAMLProvider/OktaSAML/index.html b/reportportal-configuration/authorization/SAMLProvider/OktaSAML/index.html index 9e312d20d..fd0fc23da 100644 --- a/reportportal-configuration/authorization/SAMLProvider/OktaSAML/index.html +++ b/reportportal-configuration/authorization/SAMLProvider/OktaSAML/index.html @@ -12,18 +12,18 @@ - +
    -

    Okta SAML

    SAML plugin is available in ReportPortal on the Plugins page.

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    To set up access with SAML:

    1. Log in to the ReportPortal as an ADMIN user

    2. Then open the list on the right of the user's image.

    3. Click the 'Administrative' link

    4. Click the 'Plugins' from the left-hand sidebar

    5. Click on the'SAML' tab.

    6. Click on Add new integration

    7. The next fields should be present:

    'Identity provider name ID*': text
    'Provider name*': text
    'Metadata URL*': URL
    'RP callback URL': URL - RP host/uat
    'Email attribute*': text
    'Name attributes mode' :
    'Last name attribute' text
    'First name attribute' text
    or
    'Full name attribute' : text

    Mandatory fields are marked with red. +

    Okta SAML

    SAML plugin is available in ReportPortal on the Plugins page.

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    To set up access with SAML:

    1. Log in to the ReportPortal as an ADMIN user
    2. Then open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Plugins' from the left-hand sidebar
    5. Click on the'SAML' tab.
    6. Click on Add new integration
    7. The next fields should be present:
    'Identity provider name ID*': text
    'Provider name*': text
    'Metadata URL*': URL
    'RP callback URL': URL - RP host/uat
    'Email attribute*': text
    'Name attributes mode' :
    'Last name attribute' text
    'First name attribute' text
    or
    'Full name attribute' : text

    Mandatory fields are marked with red. Click the 'Submit' button. All users of SAML will have access to the ReportPortal instance.
    Just click on the button 'Login with SAML' and choose a needed integration from the drop-down

    On Octa side you should to specify SSO url. The format for url is the next:

    https://your domain adress/uat/saml/sp/SSO/alias/report-portal-sp

    “RP callback URL” field is an optional field to provide a redirect base path right in SAML integration settings. Fill in the field in format “RP host/uat”. The format for url is the next:

    https://reportportal.com/uat

    Once you have submitted an integration with “RP callback URL”, the URL will be applied to all SAML integrations.

    - + \ No newline at end of file diff --git a/reportportal-configuration/authorization/SAMLProvider/index.html b/reportportal-configuration/authorization/SAMLProvider/index.html index 71ea850b6..6f3ae9af4 100644 --- a/reportportal-configuration/authorization/SAMLProvider/index.html +++ b/reportportal-configuration/authorization/SAMLProvider/index.html @@ -12,16 +12,16 @@ - +
    -

    SAML provider

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    This plugin allows you to configure a connection with a SAML provider.

    Integration with SAML will allow you to login into ReportPortal using SSO instead of tedious manual user creation.

    The plugin provides a mechanism to exchange information between ReportPortal and SAML provider, such as the possibility to login to ReportPortal with SAML credentials.

    SAML provider requirements

    • SAML 2.0 version
    • HTTP-POST Binding
    • URL to download SAML IdP Metadata
    • HTTPS connection for SAML Metadata
    • Support SAML attributes:
      • email
      • first name
      • last name
      • full name (instead first and last name)
    tip

    There are detailed manuals for configuration of Azure SAML and Okta SAML.

    Add integration

    ReportPortal contains the SAML Plugin by default.

    1. Go to Administration -> Plugins -> SAML

    2. Select Add integration.

    Set up connection

    Identity provider configuration

    ReportPortal SSO initial URL

    You need to provide a URL for a SAML Provider to deliver SAML data for the identity federation.

    https://<host>/uat/saml/sp/SSO/alias/report-portal-sp

    Identifier

    Set up identifier (aka Audience Restriction, aka Entity ID) for application as report.portal.sp.id. -You can specify personal Entity id when you deploy the Authorization service by environment variable RP_AUTH_SAML_ENTITYID.

    Custom attribute as claims in token

    The IDp app user profile must provide attributes like this:

    - user.email
    - user.firstName
    - user.lastName

    Also, Make sure there is a mapping created according to the values that you use in the ReportPortal SAML plugin like this:

    - user.email -> Email
    - user.firstName -> FirstName
    - user.lastName -> LastName

    ReportPortal configuration

    Identity provider name ID (Optional)

    Identity provider name ID (aka name identifier formats) controls how the users at identity providers are mapped to users at service providers.

    We support next formats:

    UNSPECIFIED - used by default

    urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

    EMAIL

    urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

    PERSISTENT

    urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

    Provider name

    Provider name associated with IDP.

    Metadata URL

    URL that provides data with information about SAML Provider.

    Email

    Attribute name from SAML metadata which contains an user email.

    <saml:Attribute Name="Email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">neuromancer@cyberspace.net</saml:AttributeValue>
    </saml:Attribute>

    ReportPortal Callback URL (Optional)

    This field provides a redirect base path.

    Once you have submitted an integration with “RP callback URL”, the URL will be applied to all SAML integrations.

    https://<host>/uat

    First name

    Attribute name from SAML metadata which contains an user first/given name.

    <saml:Attribute Name="FirstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">William</saml:AttributeValue>
    </saml:Attribute>

    Last name

    Attribute name from SAML metadata which contains an user last/family name.

    <saml:Attribute Name="LastName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">Gibson</saml:AttributeValue>
    </saml:Attribute>

    Full name

    Attribute name from SAML metadata which contains a full user name. You can use either two separate attributes for first name and last name or a combined first and last name attribute. This solely depends on your SAML provider.

    <saml:Attribute Name="FullName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">William Gibson</saml:AttributeValue>
    </saml:Attribute>
    - +

    SAML provider

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    This plugin allows you to configure a connection with a SAML provider.

    Integration with SAML will allow you to login into ReportPortal using SSO instead of tedious manual user creation.

    The plugin provides a mechanism to exchange information between ReportPortal and SAML provider, such as the possibility to login to ReportPortal with SAML credentials.

    SAML provider requirements

    • SAML 2.0 version
    • HTTP-POST Binding
    • URL to download SAML IdP Metadata
    • HTTPS connection for SAML Metadata
    • Support SAML attributes:
      • email
      • first name
      • last name
      • full name (instead first and last name)
    tip

    There are detailed manuals for configuration of Azure SAML and Okta SAML.

    Add integration

    ReportPortal contains the SAML Plugin by default.

    1. Go to Administration -> Plugins -> SAML
    2. Select Add integration.

    Set up connection

    Identity provider configuration

    ReportPortal SSO initial URL

    You need to provide a URL for a SAML Provider to deliver SAML data for the identity federation.

    https://<host>/uat/saml/sp/SSO/alias/report-portal-sp

    Identifier

    Set up identifier (aka Audience Restriction, aka Entity ID) for application as report.portal.sp.id. +You can specify personal Entity id when you deploy the Authorization service by environment variable RP_AUTH_SAML_ENTITYID.

    Custom attribute as claims in token

    The IDp app user profile must provide attributes like this:

    - user.email
    - user.firstName
    - user.lastName

    Also, Make sure there is a mapping created according to the values that you use in the ReportPortal SAML plugin like this:

    - user.email -> Email
    - user.firstName -> FirstName
    - user.lastName -> LastName

    ReportPortal configuration

    Identity provider name ID (Optional)

    Identity provider name ID (aka name identifier formats) controls how the users at identity providers are mapped to users at service providers.

    We support next formats:

    UNSPECIFIED - used by default

    urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

    EMAIL

    urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

    PERSISTENT

    urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

    Provider name - Provider name associated with IDP.

    Metadata URL - URL that provides data with information about SAML Provider.

    Email - Attribute name from SAML metadata which contains an user email.

    <saml:Attribute Name="Email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">neuromancer@cyberspace.net</saml:AttributeValue>
    </saml:Attribute>

    ReportPortal Callback URL (Optional) - This field provides a redirect base path.

    Once you have submitted an integration with “RP callback URL”, the URL will be applied to all SAML integrations.

    https://<host>/uat

    First name - Attribute name from SAML metadata which contains an user first/given name.

    <saml:Attribute Name="FirstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">William</saml:AttributeValue>
    </saml:Attribute>

    Last name - Attribute name from SAML metadata which contains an user last/family name.

    <saml:Attribute Name="LastName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">Gibson</saml:AttributeValue>
    </saml:Attribute>

    Full name - Attribute name from SAML metadata which contains a full user name. You can use either two separate attributes for first name and last name or a combined first and last name attribute. This solely depends on your SAML provider.

    <saml:Attribute Name="FullName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">William Gibson</saml:AttributeValue>
    </saml:Attribute>
    + \ No newline at end of file diff --git a/reportportal-configuration/authorization/index.html b/reportportal-configuration/authorization/index.html index ff4b6f1c5..8338dca01 100644 --- a/reportportal-configuration/authorization/index.html +++ b/reportportal-configuration/authorization/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/reportportal-glossary/index.html b/reportportal-glossary/index.html index e6d54625f..f4fa032fc 100644 --- a/reportportal-glossary/index.html +++ b/reportportal-glossary/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    ReportPortal Glossary

    Agent

    Agents are direct test framework integrations. If you integrate your tests with an agent then you don’t need to do anything, except adding properties and test metadata. Basically, each agent has the same naming convention: agent-{ language }-{ framework }. E.G. “agent-python-pytest”. The best way to see which agents we do have and check out the latest documentation for them is to go on ReportPortal organization page on GitHub and start searching.

    Each agent project contains a README with the latest installation instructions. Agent pages usually are being updated along with the agent code. If you found any issue with the documentation you are free to correct it with a PR or post an issue.

    Agents are complete and self-sufficient integrations, all you need is to provide correct properties and optionally test metadata (like attributes and steps).

    Client

    Clients are basically interfaces for our Rest API, like agents they have its naming convention: client-{ language }. E.G. “client-java”. And, like Agents, the best way to find the latest library version and documentation is to find it on GitHub.

    Unlike agents, Clients are not self-sufficient. They provide convenient way to call ReportPortal API, but you must do this in your code. It is also your part of responsibility which metadata you send to ReportPortal if you decided to use a Client.

    Logger

    Loggers are special type of libraries which a responsible for saving logs into ReportPortal. They can be attached to logging framework or a test tool, E.G. Selenide, to report steps and log records. Basically, you can report logs yourself with certain methods inside Clients, but Loggers do this for you.

    Here is an example of how OkHttp3 logger works:

    Like agents and clients, loggers have their own naming pattern: logger-{ language }-{ framework / tool }.

    Plugin

    Plugins are co-applications which add additional functionality to ReportPortal. We have separate examples and development guide for our users. You are free to extend our test automation results dashboard as you wish, we don’t limit or obligate our users with any clauses. ReportPortal provides some plugins for free like Jira and Rally integrations but also has closed plugins, which we provide only with our paid plans, e.g., “Quality Gates” plugin:

    Launch

    The first reporting-related word in our list. The Launch is a collection of all reported tests which were run at single test execution. Launches allows you to monitor your application-under-test state. The idea is that you take certain number of tests and test suites and run them periodically on different environments and our widgets draws you the picture of your application health from launch to launch. You are not obligated to stop adding new test reports into a launch after the launch finish, you are free to add more data. Or, for example, you can create several Launches and merge them into one. Or run your tests in a distributed way and report everything into a single Launch. The key concept here is that Launch is the biggest data point on our widgets, everything else is up to you.

    Suite

    For the convenience of locating and navigating data, you can put your tests into test suites. Features, Stories, Suites, Test Classes, Test (sic!), etc., they are all Suites from ReportPortal view, just with different names. Suites are hierarchical, to put one Suite inside another you should specify Parent Suite UUID. Also, as a limitation, child Suite and Items start time should not be earlier than Parent Suite start time due to Database limitations, please keep that in mind.

    Step

    Step is the only entity with statistics in our centralized test automation tool. Every time you report a step, ReportPortal adds 1 to test count and every time a Step fails it counts it as a test failure.

    Nested step

    Nested steps are like suites but located as child step elements. They are like containers for test logs and represented as dropdown lists inside Log View. On the screen below Nested step is the first entity.

    Log

    Logs are textual data necessary for debugging and problem solving. Our Analyzer uses them in the same way. Logs should be neat and informative, but not too much verbose. Tons of logs usually the same problem as their full absence.

    Test Case ID

    The ID which is used along with Steps. It is unique signature of tests by which we build test history. In general, you don’t need to manipulate these IDs, since every agent usually generates them with Code reference and parameters. But if you want to customize your history view this is the first point where to look. Agents usually generate Test Case IDs based on code reference and have a way to customize it.

    - + \ No newline at end of file diff --git a/reportportal-tutorial/index.html b/reportportal-tutorial/index.html index d4b2167d3..f8cbabca2 100644 --- a/reportportal-tutorial/index.html +++ b/reportportal-tutorial/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    ReportPortal Tutorial

    Overview

    The goal of this tutorial is to introduce all ReportPortal capabilities. Along the way, you'll learn how to use ReportPortal features and how to get the most out of them, as well as expert tips for using our test automation results dashboard.

    How to explore ReportPortal without installation

    One day you found ReportPortal which promises to simplify the analysis of failed tests and bring many more benefits.

    “Really? I don’t believe it”, – your first reaction.

    Do you just want to see how ReportPortal works to make sure you need it? It is easy! Just visit our Demo instance and use default credentials for login:

    login: default

    password: 1q2w3e

    Or you can use a button "Login with GitHub" to login.

    How to deploy ReportPortal instance

    You tried the demo session. You are impressed with ReportPortal features / possibilities and decided to install a ReportPortal. Excellent! Visit our detailed documentation on how deploy ReportPortal:

    Please also check the technical requirements for your system

    If you don’t want to deal with technical details, we will be happy to assist you.

    How to invite Team to ReportPortal

    Finally, you logged into ReportPortal. And you see just empty tabs... Looks confusing for the first step. What can we do to get started?

    Let’s start by inviting your team members. You can also do it as a final step, but it would be nice to investigate ReportPortal together.

    In order to add other users to ReportPortal you can send invitations via email. To make sure that the Email service is configured, please follow the next steps (as an admin user): E-mail server configuration. Once emailing is configured, you can either invite new users or create a new user in the project.

    After this step you will have emailing capabilities enabled, and several more users invited to ReportPortal.

    How to generate first data in ReportPortal

    The main section for work with ReportPortal is Launches tab in the left menu. But Launches table is empty and it’s hard to understand what ReportPortal can do and what to do next.

    Generate demo data feature can help you with this, by generating a set of demo launches (test executions), filters and dashboards.

    Once generated, you will see 5 launches (each Launch is equivalent to a testing session, or testing execution, or one Jenkins job). On the Filters tab you will find 1 filter. And Dashboards will have a Demo dashboard with visualizations/widgets built on top of the data from launches.

    Let’s understand how ReportPortal works based on demo data, and later we can return to the upload of your actual data from your testing frameworks. You can navigate to this section right now if you wish.

    How to triage test failures with ReportPortal

    So far you have Demo launches in ReportPortal. You see the list of test executions on the Launches page with Total/Passed/Failed/Skipped numbers of test cases, and some of the issues are already sorted: Product Bug, Auto Bug, System Issue. But some issues required the attention of engineers, and they are marked with the “To Investigate” flag.

    The next step and the main goal for QA engineers is defect triage. This means opening each test case, identifying the root of the failure reason, and categorizing/associating it with a particular defect type. We call this action “Make decision”.

    Based on test results, you can make decisions on further steps to improve your product. For example, you can arrange a call with a Development Team Leader to discuss bug fixing, if you have a lot of Product Bugs.

    In case of a large number of System Issues, you can ask a DevOps engineer to fix the environment or to review the testing infrastructure. Thus, you won‘t waste your team's effort and time by receiving failed reports due to an inconsistent environment.

    If you have a lot of Automation Bugs, put more effort into the test cases stabilization, and convert test automation (flaky) fails into valuable test cases, which will test your application for real.

    Moreover, you can post and link issues in just a few clicks using Bug Tracking System plugins:

    Jira Server

    Jira Cloud

    Azure DevOps

    Rally

    How to filter test executions in ReportPortal

    To distinguish executions by type and focus only on required or related to your team today, you can use filters. Filters have “tab” capabilities, so you can easily navigate between different selections. You can filter by different criteria like launch name, description, number of failed or passed test cases, attributes, etc.

    How to add more attributes for filtering launches in ReportPortal

    There is also a possibility to filter by attributes. You can find an example of setting attributes in your profile. You can include them in the parameters of automation, then additional attributes will appear under the Launch name, and you can filter test executions by these attributes as well.

    How to visualize test results in ReportPortal

    So, you’ve separated your own test data from others. Now let’s visualize our test results. Navigate to the Dashboards tab and open the Demo Dashboard. Here you can see basic visualizations that will help you understand the state of the product.

    You can also create new Dashboards. Since managers love charts, let’s practice building some self-updated charts! And let them see the actual statistics and value of your test automation along with you, at any given moment of the time, since dashboards and widgets will be updated in real-time. The best widget to start from is Investigated percentage of launches which shows how well the QA team analyzes failures.

    Once QA team categorized all issues, we can understand why automation tests fail. Create Launch statistics chart widget for that. It shows the reasons of failures, for example, broken environment, outdated tests, product bugs.

    The next step can be creating the Overall statistics chart to define the Total test cases number and how many of them are Passed/Failed/Skipped. This widget can be applied for all launches or for the latest launches only.

    We've reviewed basic widgets. How can I get some insights from launches? Our suggestion is to create a Flaky test cases table to find tests that often change status from passed to failed in different launches. These unstable tests do not give any confidence. The widget allows you to identify them so that you can pay special attention to them and fix them faster.

    Next, you might want to understand how long it takes to pass each test case. Most time-consuming test cases widget helps to find the longest scenarios.

    How to use ML power of ReportPortal

    ML suggestions feature prompts similar tests and defect types they have. In this way we don’t waste time re-reading the log but use ML hints instead.

    ML suggestions analysis is running every time you enter "Make decision" editor. ML suggestions are executed for all test items no matter what defect type they currently have.

    How to use Pattern Analysis

    Pattern Analysis feature helps to find static repeating patterns within automation. For example, you know that a 404 error in your application might be caused by a specific product bug. Create the rule with a problem phrase, launch a test run, and Pattern Analysis will find all failed items which have known patterns in error logs. This allows you to draw a quick conclusion.

    How to run Auto-Analysis in ReportPortal

    ReportPortal has Auto-Analysis feature which makes it possible for the application to independently check and perform some of the routine tasks.

    When you have test executions on the Launches page, you might need to analyze them automatically using ML. You can switch ON Auto-Analysis in the settings – then it will start as soon as any launch finishes. Auto-Analysis takes a part of your routine work and defines the reason for the test item failure based on the previous launches and sets: a defect type; a link to BTS (in case it exists); comment (in case it exists). As a result, you save time, and you can create new test cases instead of analyzing test results.

    You can run Auto-Analysis manually as well.

    When the test item is analyzed by ReportPortal, a label “AA” is set on the test item on a Step Level.

    How to see the historical trend of the causes of falls

    And now let's build a more detailed “Launch statistics chart” widget with the historical changes in tests results. So, I can see how the results of my launches have changed over time.

    Use case

    Goal: Create a widget to show historical changes in Passed/Failed test cases in my API tests.

    Follow the instructions below to create this Launch statistics chart.

    Here you can see the historical distribution of your test results: there are Passed or Failed tests.

    Instead of just Failed tests, you can see the dynamics of the total number of Product bugs, Automation bugs, System issues and No Defect.

    In this way, you see the historical trend of the causes of falls.

    How to make automated test results part of my pipeline

    ReportPortal supports Continuous Testing with built-in functionality – Quality Gates (premium feature). Quality Gate is a set of predefined criteria that should be met in order launch run to be considered as successful.

    Firstly, navigate to Project settings and create a Quality Gate with the rules which will be applied to a specific launch that matches the conditions.

    Finally, configure integration with CI/CD to send results to the pipeline.

    How to use nested steps and attributes in ReportPortal

    Usually, you see the results of automation as a carpet of error logs, and only an automation engineer can understand what is happening inside. Adding nested steps (Java, Python) allows applying a one-time change in the test code to make a logical grouping of steps and make these error logs more readable for the whole team.

    You can also use attributes on any level (launch/suite/test/step) to provide more contextual information.

    How to evaluate product health with ReportPortal

    You can create a “Component health check” widget based on attributes to understand which components do not work well, and which areas we need to pay more attention to.

    Use case 1

    Goal: define which features are affected by failed scenarios.

    You can see scenarios on the first screenshot.

    Select failed scenario to see which features were affected.

    Finally, let’s see what is the priority of the failed test cases.

    Use case 2

    Goal: define the priority of failed test cases.

    You can see that failures occurred in test cases with critical priority.

    Select Critical to understand which operating system is having problems.

    Next, select Android to see the list of features that need more attention.

    Use case 3

    Goal: define state of test cases on mobile devices.

    On the screenshot below you can see that our trouble spot is Android.

    You can go to the test cases level and see what problems they had.

    How to add test results to ReportPortal

    You have checked demo test results, dashboards and widgets. And now you want to see your real data in ReportPortal.

    ReportPortal is a TestOps service that integrates with your Test Framework, listens to events and visualizes test results. You cannot execute results right from ReportPortal, but you can integrate ReportPortal with a Test Framework or Implement own integration.

    - + \ No newline at end of file diff --git a/saved-searches-filters/CreateFilters/index.html b/saved-searches-filters/CreateFilters/index.html index ed9fc295a..ac468d0db 100644 --- a/saved-searches-filters/CreateFilters/index.html +++ b/saved-searches-filters/CreateFilters/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Create filters

    Filters in the our test automation reporting dashboard are saved searches of the launches.

    Filters could be used as an independent object and for creating widgets as well.

    Permission: all users of the project despite their role.

    To create a filter, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Click on the "Add Filter" button.

    3. The new tab will be opened. Now you can configure your filter. The unsaved filter is marked with an asterisk (*).

    4. Add filtering parameters to have the relevant data.

    5. Click 'Save' button.

    6. 'ADD FILTER' popup will appear.

    7. Enter a new filter name (3-55 symbols long) and click "Add" button.

    Your new filter will be saved and shown on the "Filters" page.

    note

    ReportPortal allows saving a filter on the "Launches" mode only. It's impossible to save filters on the "Debug" tab.

    - + \ No newline at end of file diff --git a/saved-searches-filters/FiltersPage/index.html b/saved-searches-filters/FiltersPage/index.html index d8a1b3ebd..9120d1caf 100644 --- a/saved-searches-filters/FiltersPage/index.html +++ b/saved-searches-filters/FiltersPage/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Filters page

    You can see the list of your saved searches and filters created by other team members on the "Filters" page.

    The following information is present on the "Filters" page:

    • Filter name and description
    • Options: criteria of search
    • Owner: the user who created the filter
    • Display on launches: ON/OFF switcher
    • Delete option

    To open launches based on saved filter, click the link of filter's name. The filter will be opened as a tab on the "Launches" page.

    It is the only place where it is possible to delete the filter from our test report&analytics dashboard.

    To do this, click the 'delete' icon of your filter and confirm the action. The filter will be deleted but not launches in it.

    - + \ No newline at end of file diff --git a/saved-searches-filters/ManageFilters/index.html b/saved-searches-filters/ManageFilters/index.html index c44e55c06..6d8a5e1a6 100644 --- a/saved-searches-filters/ManageFilters/index.html +++ b/saved-searches-filters/ManageFilters/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Manage filters

    Filters feature is a base for data visualization in test automation because widgets are built on their basis.

    OPERATIONS WITH FILTERS

    After the filter is saved, there are some options to manage them.

    EDIT FILTER

    This option allows edit filter name and description.

    To edit a filter, perform the following steps:

    1. Open your filter from the tab on the "Launches" page.

    2. Click the "Edit" option on the tab menu.

    3. The Edit filter popup window will appear.

    4. Make changes.

    5. To save the updates, select the "Save" option from the filter context menu.

    Your changes for the filter will be saved.

    CLONE

    This option allows you to create a new tab with the same criteria.

    To clone an already existed filter, perform the following steps:

    1. Open any filter on the "Launches" page.

    2. Click the "Clone" option on the tab menu.

    3. Enter the unique name, description and submit.

    4. The content of filter will be the same as in original filter.

    DISCARD

    This option helps to reset unsaved filter changes.

    To discard unsaved changes, perform the following steps:

    1. Open any filter on the "Launches" page.

    2. Add new criteria to the filter options.

    3. Asterisk mark appears for the filter.

    4. Click 'Discard' to remove most recent changes.

    5. All unsaved changes are removed.

    6. Asterisk mark removed for the filter tab.

    CLOSE

    This option allows to close filter tab with all selected criteria. The option is available on the filter tab.

    DELETE option is available from 'Filters' page only.

    - + \ No newline at end of file diff --git a/search/index.html b/search/index.html index 341cc8990..f214766c9 100644 --- a/search/index.html +++ b/search/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Search the documentation

    - + \ No newline at end of file diff --git a/terms-and-conditions/GoogleAnalyticsUsageByReportPortal/index.html b/terms-and-conditions/GoogleAnalyticsUsageByReportPortal/index.html index 66805dfec..85b25f836 100644 --- a/terms-and-conditions/GoogleAnalyticsUsageByReportPortal/index.html +++ b/terms-and-conditions/GoogleAnalyticsUsageByReportPortal/index.html @@ -12,7 +12,7 @@ - + @@ -27,7 +27,7 @@ everything with OK button. The changes will be applied after the system restart.

    Build systems

    Some build systems can set environment variables on their own we can use this feature to set the variable.

    Gradle

    Gradle has environment keyword which sets variables for child processes, so all you need to do is to set it in test task:

    test {
    environment "AGENT_NO_ANALYTICS", "1"
    }

    Maven

    maven-surefire-plugin has option to set environment variables for forked processes, so you can configure the plugin accordingly:

    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.epam.reportportal.example</groupId>
    <artifactId>example-mute</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
    <forkMode>once</forkMode>
    <environmentVariables>
    <AGENT_NO_ANALYTICS>1</AGENT_NO_ANALYTICS>
    </environmentVariables>
    </configuration>
    </plugin>
    </plugins>
    </build>
    </project>

    tox

    Python's tox automation tool also provides a way to set necessary variables with setenv parameter in tox.ini file:

    [testenv]
    setenv =
    AGENT_NO_ANALYTICS = 1

    Docker

    If your tests are wrapped in a docker container you need to bypass this variable through command-line with -e flag:

    docker run --rm -it \
    -e "AGENT_NO_ANALYTICS=1"
    selenium/standalone-chrome:103.0

    Or you can use ENV keyword in your Dockerfile when building the image:

    ENV AGENT_NO_ANALYTICS=1

    Thanks to Google Analytics, we can deliver interesting and helpful features to ReportPortal. As a result, you will have effective working instruments and better customer support.

    - + \ No newline at end of file diff --git a/terms-and-conditions/PremiumFeatures/index.html b/terms-and-conditions/PremiumFeatures/index.html index 45d4b7b46..3e60a6e2e 100644 --- a/terms-and-conditions/PremiumFeatures/index.html +++ b/terms-and-conditions/PremiumFeatures/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Premium Features

    At ReportPortal, we understand that every enterprise's testing environment is unique, requiring tailored solutions that address specific needs. To cater to this demand, we've introduced our Premium Features, exclusively available to our Managed Services and SaaS subscription clients.

    Our Premium Features have been meticulously designed and developed with large-scale, enterprise-level needs in mind. They are the cornerstone for organizations seeking to establish true continuous testing within their operational setup. Whether it's the ability to navigate the complexities of testing at scale, or the demand for more granular insights to drive decision-making, these premium options are equipped to handle it all.

    We invite you to explore our Premium Features, understanding their objectives and benefits in detail on our documentation page. We are confident that you'll find the value they add to be well worth the investment. As always, we're here to answer any questions and assist you in getting the most out of your ReportPortal experience.

    Available Premium Features:

    - + \ No newline at end of file diff --git a/user-account/EditPersonalInformation/index.html b/user-account/EditPersonalInformation/index.html index 69dd03714..28668760d 100644 --- a/user-account/EditPersonalInformation/index.html +++ b/user-account/EditPersonalInformation/index.html @@ -12,7 +12,7 @@ - + @@ -25,7 +25,7 @@ name and email fields will become available.

    The full name allows: 3-256 symbols, English, Latin, Cyrillic, numeric characters and the following symbols: hyphen, underscore, dot, and space. The email should be unique in ReportPortal.

    Make changes and click the "Save" button.

    note

    Personal information for a GitHub user cannot be changed.

    Change password

    To change your password in ReportPortal, click on the "Change password" button above the form and enter:

    • Old password
    • New password
    • Confirm new password

    Check the box "Show password" to verify the password entered is what you intended to enter.

    Fill in these fields and click the "Submit" button under the form.

    note

    GitHub users cannot change the password on ReportPortal.

    - + \ No newline at end of file diff --git a/user-account/RestoreAPassword/index.html b/user-account/RestoreAPassword/index.html index d3996ce02..ef82e4976 100644 --- a/user-account/RestoreAPassword/index.html +++ b/user-account/RestoreAPassword/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    Restore a password

    If you forgot your password, you can restore it on the login page. To do that, perform the following steps:

    1. Click the "Forgot your password?" link on the login page.

    2. Enter your email in the form that appears and click the "Change Password" button. The password recovery instructions will be sent to your email.

    3. Follow the link from the email. The Restore Password form will appear.

    4. Fill in the restore password form and click the "Change Password" button. Now you can log in ReportPortal with the new credentials.

    note

    GitHub user cannot restore the password on ReportPortal.

    - + \ No newline at end of file diff --git a/user-role-guides/index.html b/user-role-guides/index.html index 7ac25c351..1e5e32439 100644 --- a/user-role-guides/index.html +++ b/user-role-guides/index.html @@ -12,7 +12,7 @@ - + @@ -48,7 +48,7 @@ Saved searches (Filters)
    Dashboards and Widgets
    User account

    - + \ No newline at end of file diff --git a/work-with-reports/FilteringLaunches/index.html b/work-with-reports/FilteringLaunches/index.html index c95640e99..8bea5ba90 100644 --- a/work-with-reports/FilteringLaunches/index.html +++ b/work-with-reports/FilteringLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -47,7 +47,7 @@ Defect Comments "abcd", "zabc", "zabcd", "abc".

    • contains - shown all test items that contain specified combination in the defect comment;
    • not contains - shown all test items that don't contain specified combination in the defect comment;
    • equals - shown all test items which defect comment is absolutely equal to the specified combination;
    • not equals - shown all test items without items which defect comment is absolutely equal to the specified combination;
    • Attributes - 1 symbol is enough for this search. The system searches for the items with or without a specified Attribute(s). Multiple Attributes may be specified at once. The following filtering conditions are available: ALL/ANY and WITHOUT ALL/WITHOUT ANY.
    • all ( in API: 'filter.has.attributes') - shown all test items which contain all specified Attributess;
    • without all( in API:'filter.!in.attributes') - shown all test items without specified Attributess in any combinations;
    • any ( in API:filter.in.attributes) - shown all test items which contain any combinations of specified attributes;
    • without any ( in API:'filter.!has.attributes') - shown all test items without all specified attributes in case, when both of attributes present in the test item;
    • Analysed by RP (AA) - there are two options: With AA mark, Without AA mark.

    • Ignored in AA - there are two options: With Ignore mark, Without ignoring mark.

    • Issue in BTS - there are two options: 1 symbol is enough for autocomplete. The system searches for the items with or without a specified Issue in BTS. Multiple Issues may be specified at once. The following filtering conditions are available: ALL/ANY and WITHOUT ALL/WITHOUT ANY.

    • all (has) - shown all test items which contain all specified Issues;
    • without all(!has) - shown test items without all specified Issies in any combinations;
    • any (in) - shown all test items which contain any combinations of specified Issues;
    • without any (!in) - shown all test items without any specified Issues
    • Pattern name - all patterns names, which a PM creates on Project Settings

    • Has retries/Hasn't retries - there are two options: Has retries/ No retries.

    - + \ No newline at end of file diff --git a/work-with-reports/HistoryOfLaunches/index.html b/work-with-reports/HistoryOfLaunches/index.html index 02c0a3ebc..3d34c7157 100644 --- a/work-with-reports/HistoryOfLaunches/index.html +++ b/work-with-reports/HistoryOfLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -20,16 +20,14 @@

    History of launches

    Historical trend of executions

    The historical trend of executions represents your history view for the list of test items in our test execution dashboard. This feature can help you to find -the most unstable test cases in your suites/ launches/ builds.

    To see a table of the historical trend of executions, navigate to the "Launches" page and drill down to launch structure/ or launch statistics.

    History table: Test Case ID or Unique ID

    ReportPortal acquires a lot of real-time test results and you can choose by which parameter you want the history of test results to get defined. -There are 2 options:

    Difference between Test Case ID and Unique ID

    Please find the description of what Test Case ID and Unique by the links:

    They are both a unique identifiers of executions uniquness.

    But Unique ID (deprecated) generates on the base of a launch name where test execution is situated. -And Test Case ID usually doesn't contain a launch name.

    So that the main difference between a history table based on Unique ID (deprecated) and Test Case ID is that:

    • History on Unique ID (deprecated) shows only executions from launches with the same name
    • History on Test Case ID shows executions from all launches.

    Unique ID history

    (deprecated/ will be replaced by Test Case ID gradually)

    1. Take the ReportPortal release version 5.2.2 or higher. docker-compose.yml

    2. Add an environment variable to the service-API service:

    RP_ENVIRONMENT_VARIABLE_HISTORY_OLD=true
    1. Redeploy ReportPortal

    Test Case ID history

    Run ReportPortal without env variable.

    History table

    Where you can find History table.

    Drill down to the Step view (test executions list).

    Click the "History" button.

    You will see a historical trend in a table.

    History trends have the following color scheme:

    • Red - indicates the launches with failed or interrupted cases

    • Green - indicates passed launches

    • Yellow – indicates the launches with several equal test items present within a required level

    • Grey - indicates the test item with no descendants in this run.

    • Animated - still without state [in progress]

    You can select the depth of history: 3, 5, 10, 15, 20, 25 or 30 launches from the "History -Depth" drop-down menu.

    There are two options for a History table:

    • history for all launches
    • history for launches with the same name

    If your are using History table based on Test Case ID, you will be able to use both of this options. +the most unstable test cases in your suites/ launches/ builds.

    To see a table of the historical trend of executions, navigate to the "Launches" page and drill down to launch structure/ or launch statistics.

    History table based on Test Case Hash

    Test case hash is a parameter that is automatically generated based on the Test Case ID (if specified) or the full path to the test.

    You can read about the Test Case ID here.

    Unique ID history

    (deprecated)

    1. Take the ReportPortal release version 5.2.2 or higher. docker-compose.yml

    2. Add an environment variable to the service-API service:

    RP_ENVIRONMENT_VARIABLE_HISTORY_OLD=true
    1. Redeploy ReportPortal

    Test Case Hash history

    Run ReportPortal without env variable.

    History table

    Where you can find History table.

    Drill down to the Step view (test executions list).

    Click the "History" button.

    You will see a historical trend in a table.

    History trends have the following color scheme:

    • Red - indicates the launches with failed or interrupted cases

    • Green - indicates passed launches

    • Yellow – indicates the launches with several equal test items present within a required level

    • Grey - indicates the test item with no descendants in this run.

    • Animated - still without state [in progress]

    You can select the depth of history: 3, 5, 10, 15, 20, 25 or 30 launches from the "History +Depth" drop-down menu.

    There are two options for a History table:

    • history for all launches
    • history for launches with the same name

    If your are using History table based on Test Case Hash, you will be able to use both of this options. In case you use a history table based on UID, a history table will show you results in mode: "History for launches with the same name".

    History for all launches

    If you have configured ReportPortal with TestCase History table. -This option is for you.

    How you can open a history table with execution from all launches?

    • Open All launches tab
    • Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics
    • Click on the button 'History'
    • Choose the option 'All launches' in the drop-down 'BASE'

    What information is shown on the table based on Test Case ID?

    On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from all launches on the project. +This option is for you.

    How you can open a history table with execution from all launches?

    • Open All launches tab
    • Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics
    • Click on the button 'History'
    • Choose the option 'All launches' in the drop-down 'BASE'

    What information is shown on the table based on Test Case Hash?

    On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from all launches on the project. Each column on the history table is equaled to a number of the execution.

    Let's see an example.

    Use case: You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux. After test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: Regression_MacOS, Regression_Win, Regression_Linux. If you click on the Total statistic for the launch Regression_MacOS and click on the 'History' button, you will see a History table with all test cases in the suite and their 10 last executions from all launches on the project (e.g. from Regression_MacOS, Regression_Win, Regression_Linux)

    Test case nameExecution #3Execution #2Execution #1
    Test 1PassedFailedPassed
    Test 2FailedPassedPassed
    Test 3FailedPassedPassed

    When you hover one of the cells on the table, you will be able to see to what launch this execution belongs to.

    History table for launches with the same name

    If you have configured ReportPortal with TestCase History table or with Unique ID (deprecated). -This option is for you.

    How you can open a history table with execution launches with the same name?

    • Open All launches tab
    • Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics
    • Click on the button 'History'
    • Choose the option 'Launches with the same name' in the drop-down 'BASE'

    What information is shown on the table based on Unique ID (deprecated) ot Test Case ID (with option "Launches with the same name"?)

    On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from only launches with the same name on the project. +This option is for you.

    How you can open a history table with execution launches with the same name?

    • Open All launches tab
    • Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics
    • Click on the button 'History'
    • Choose the option 'Launches with the same name' in the drop-down 'BASE'

    What information is shown on the table based on Unique ID (deprecated) or Test Case Hash (with option "Launches with the same name"?)

    On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from only launches with the same name on the project. Each column on the history table is equaled to a number of the execution.

    Let's see an example.

    Use case: You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux. After test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: Regression_MacOS, Regression_Win, Regression_Linux. If you click on the Total statistic for the launch Regression_MacOS and click on the 'History' button and you choose the option 'Launches with the same name', you will see executions only from launches with name Regression_MacOS.

    Test case nameExecution #2
    Test 1Passed
    Test 2Passed
    Test 3Passed

    Actions

    From the History table you will be able to perform the next actions:

    For that:

    • Hover the cell on the history table
    • Click on the checkbox
    • Check needed item
    • Click on the button 'Action'
    • Choose needed action

    Compare launch results with the filter

    You can add a custom column with the latest filter results to the History table.

    Use case: You have a test suite for the regression. You run this suite for different versions (version 1, version2, version 3). @@ -44,8 +42,8 @@ using the defect editor block.

    To come into a certain execution of an appropriate launch, hit a launch number above the item.

    Also on a History line, you can see an "i" label, it means that the item with this label has a defect comment or/and a link to the Bug Tracking System.

    History across All launches

    By default system shows history across Launches with the same name.

    But you can choose option "History across All Launches" and system will show you executions of the test cases which have been executed in launches with different names.

    On hover user can find launch name of test and all launch attributes.

    Duration fluctuation

    If test execution has duration growth in comparison with previous run, the system marks such items with red triangles:

    No duration growth - 0 triangles

    duration growh from 0 to 20% - 1 triangles

    duration growh from 21% - 50% - 2 trianges

    duration growh from 51% - 100% - 3 trianges

    duration growh from 101% and higher - 4 trianges

    Load more History

    By default the system shows 12 latest executions. If you need more history you can click on the button "Load more 9 items and the system loaded more executions on history line. Max number of items on History line is 30 executions.

    User can move on History line using horizontal scroll.

    Test Item actions history

    Test Item actions history will show you the history of actions, which have been made to a certain test item. You can see the kind of activity, and who performed it.

    The following actions are shown on the history of actions:

    user changed defect type of test item

    user posted a comment to the test item

    user posted a bug to the Bug Tracking System or added a link to the existing in Bug Tracking System issue.

    analyzer changed defect type of test item based on the item (where "item" is a link to a log view of an item which has been chosen by Analyzer as the most relevant result)

    analyzer posted a comment to the test item

    analyzer posted a bug to the Bug Tracking System or added a link to the existing in the Bug Tracking System issue.

    To see the history of actions, navigate to a certain child item. By default you -will see the last action in one line.

    Use spoiler to maximize actions history:

    - +will see the last action in one line.

    Use spoiler to maximize actions history:

    + \ No newline at end of file diff --git a/work-with-reports/InvestigationOfFailure/index.html b/work-with-reports/InvestigationOfFailure/index.html index 5d20643eb..ec097bc43 100644 --- a/work-with-reports/InvestigationOfFailure/index.html +++ b/work-with-reports/InvestigationOfFailure/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Investigation of failure

    Set defect type

    ReportPortal provides the possibility for test failure analysis of your runs. The investigation includes setting the appropriate defect type of failed items, posting a defect for them or linking the ID of a defect that is already created in the bug tracking system.

    Using “Make decision” modal, you can choose the real reason of your failure and provide a comment for this fail.

    When a defect is found in a test, the bug triage should be performed and proper defect type should be assigned to it, in order to have accurate test runs statistics. You will be able to change a defect type for a test and mark it as a Product Bug/Automation Bug/System Issue/No Defect at any time.

    The available defect types are described below:

    “To investigate” means that no investigation has been made on this defect yet.

    “Product bug” means that the defect was investigated and a production bug found as the reason for the failure of this test.

    “Automation bug” means that the defect was investigated and the automation test is not correct.

    “System issue” means that the defect was investigated and it turns out that a system-level issue, like an app crash, caused the test to fail.

    “No defect” means that the defect was investigated and was defined to be not a defect.

    Post bug to Bug Tracking System

    ReportPortal allows to connect some popular bug tracking systems with our test automation reporting platform and post a bug to them or link the ticket ID of the already posted defect to the test item in ReportPortal.

    Before posting/linking a bug, make sure that the bug tracking systems are connected to the project on the project settings page. To check it, please, find the user guides below:

    - + \ No newline at end of file diff --git a/work-with-reports/OperationsUnderLaunches/index.html b/work-with-reports/OperationsUnderLaunches/index.html index fab47d27c..0eb3d4566 100644 --- a/work-with-reports/OperationsUnderLaunches/index.html +++ b/work-with-reports/OperationsUnderLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -36,7 +36,7 @@ and select "Move to All Launches" from the 'Actions' list.

    Force finish launches

    The system allows finishing launches on the "Launches" and the "Debug" pages manually.

    Permission: Next users are able to stop launches:

    • Administrator

    • User with PROJECT MANAGER Project Role

    • User with one of Project Role {MEMBER, CUSTOMER} on the project - Launch Owner

    In order to finish a launch that is in progress now, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select the "Force Finish" option in the context menu on the left hand of the launch name.

    3. The warning popup will be opened.

    4. Click the "Finish" button.

    5. The launch will be stopped and shown in the launches table with the "stopped" tag and the "stopped" description. All the statistics collected by this time will be displayed.

    In order to finish some launches simultaneously those are in progress now, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select required launches that are in progress by click on their checkboxes

    3. Open 'Actions' list

    4. Select "Force Finish" from the list

    5. The warning popup will be opened.

    6. Confirm the action

    7. All selected launches will be stopped and shown in the launches table with the "stopped" tag and the "stopped" description. All the statistics collected by this time will be displayed.

    Export launches reports

    The system allows exporting launches reports on the "Launches" and the "Debug" modes. You can export the launch report in the following formats: PDF, XML, HTML.

    In order to export a launch, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select the required format from the "Export" option in the context menu on the left hand of the launch name.

    3. The launch report in the selected format will be opened.

    note

    The export operation works for a separate launch only. No multiple actions for the export of launches.

    Delete launches

    The system allows deleting launches on the "Launches" and "Debug" pages.

    Permission: next users are able to delete launches:

    • Administrator

    • User with PROJECT MANAGER Project Role

    • User with one of Project Role {MEMBER, CUSTOMER} on the project - Launch Owner

    There are two ways how the launch/es can be deleted

    In order to delete a launch, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select the "Delete" option in the context menu on the left hand of the launch name.

    3. The warning popup will be opened.

    4. Click the "Delete" button.

    5. The launch will be deleted from ReportPortal. All related content will be deleted: test items, logs, screenshots.

    In order to delete more than one launch simultaneously, perform the following steps:

    1. Navigate to the "Launches" page

    2. Select required launches by click on their checkboxes

    3. Open 'Actions' list

    4. Click 'Delete' option

    5. The warning popup will be opened.

    6. Confirm the action

    7. The launches will be deleted from ReportPortal. All related content will be deleted: test items, logs, screenshots.

    note

    It is impossible to delete launches IN PROGRESS - "Delete" launch option will be disabled.

    Delete test item

    The system allows deleting test items in all levels of launch in the "Launches" and "Debug" pages.

    Permission: Next users are able to delete the test item:

    • Administrator

    • User with PROJECT MANAGER Project Role

    • User with one of Project Role {MEMBER, CUSTOMER} on the project - Launch Owner

    In order to delete a test item, perform the following steps:

    1. Navigate to the "Launches" page

    2. Drill down to the test level of any item

    3. Select the "Delete" option in the context menu next to the selected test item.

    4. The warning popup will be opened.

    5. Click the "Delete" button.

    6. The test item will be deleted from ReportPortal with all related content (logs, screenshots).

    In order to delete some test items simultaneously, perform the following steps:

    1. Navigate to the "Launches" page

    2. Drill down to the test level of any item

    3. Select required test items by click on their checkboxes

    4. If you are on SUITE or TEST view, click 'Delete' button from the header

      If you are on STEP view, open 'Actions' list and select "Delete" option

    5. The warning popup will be opened.

    6. Confirm the action

    7. Test items will be deleted from ReportPortal with all related content (logs, screenshots).

    note

    It is impossible to delete test items in launches IN PROGRESS - "Delete" test item option is disabled for test items in launches IN PROGRESS.

    - + \ No newline at end of file diff --git a/work-with-reports/TestCaseId/index.html b/work-with-reports/TestCaseId/index.html index 8a0aea8e9..4b0e79707 100644 --- a/work-with-reports/TestCaseId/index.html +++ b/work-with-reports/TestCaseId/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ It is a unique identifier from your source test management system which help ReportPortal.io to identify the uniqueness of a test case

    Where Test Case ID is using?

    Test case id is using for:

    • The history line
    • The history table

    You can find a test case ID in the 'Edit' modal.

    How you can report items with Test case ID?

    You can report test case id via agents. All details you can find in the dev guide https://github.com/reportportal/client-java/wiki/Test-case-ID

    If the test execution has test parameters, a test case ID will be generated on the base of:

    Test case id in ReportPortal = reported 'TestCaseID + all test parameters

    What does happen if you do not report items with Test case ID?

    In case a user doesn't report tests with Test Case ID, the system generates it automatically:

    • Auto-generation based on 'Code reference' and 'Parameters' If users do not report test case ID, it is generated automatically on the base of:

    Test case id in ReportPortal = 'Code reference' + all test parameters

    • Automatically based on Test Execution name, All parents name, Parameters If users do not report Test Case ID and Code reference, then test case ID is generated on the base of:

    Test case id in ReportPortal = Test Case Name + All parents Name (except Launch name) + All parameters

    - + \ No newline at end of file diff --git a/work-with-reports/UniqueId/index.html b/work-with-reports/UniqueId/index.html index 40c6a5686..60349ef17 100644 --- a/work-with-reports/UniqueId/index.html +++ b/work-with-reports/UniqueId/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    Unique ID

    (deprecated/ will be replaced by Test Case ID gradually)

    ReportPortal generates an ID automatically for all test items by default. The UniqueID generation is based on:

    • A test item name;
    • A project name;
    • A launch name;
    • Names of all parents;
    • All parameters of the item;
    note

    Unique ID deprecated/will be replaced by Test Case ID gradually.

    All this information becomes part of a test item in the form of the MD5 hash. After that, a UID becomes a part of the item. It allows defining the item's uniqueness with no possibility of doubt. ReportPortal uses this functionality in a process of building widgets ( f.e.:'Most failed test cases', 'Flacky tests'), 'Retry' and 'Rerun'and, etc.

    - + \ No newline at end of file diff --git a/work-with-reports/ViewLaunches/index.html b/work-with-reports/ViewLaunches/index.html index f6f9a0fa8..937114865 100644 --- a/work-with-reports/ViewLaunches/index.html +++ b/work-with-reports/ViewLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -50,7 +50,7 @@ than 5 lines. You can expand the log message clicking on the special "Expand" icon.

    You can use a filter to specify the level.

    Also, you can use the logs sorting by time, and filtering logs to find a certain message in logs.

    Stack trace

    On the Log view for the fast redirection to the last 5 error log messages, please click on the tab Stack trace, in this section you can find *5 last error logs".

    Attachments

    In case you are interested in logs with attachments only, check the corresponding checkbox.

    Click on the file in log opens the preview of the attachment.

    The attachments could be rotated on a preview screen if needed.

    ReportPortal provides the possibility of preview for such types of attachments as:

    • 'xml',
    • 'javascript',
    • 'json',
    • 'css',
    • 'php'

    Other types of attachments will be opened in a new browser tab or downloaded.

    The alternative way to view these files is by using the Attachments.

    To view data via the Attachments section, perform the following steps:

    1. Open Log view of launch for test items with attachments available

    2. Click 'Attachments' tab

    3. Select the required file by clicking on its thumbnail.

    4. To expand the area, click the view on the main box.

    Items details

    In the section Items details, you can find information about test case such as:

    • Test Case name
    • Test case status
    • Test case start time
    • Duration and duration fluctuation
    • Description
    • Parameters
    • Attributes
    • Code location (that can be easily copied by a user)

    History of actions

    In this section, you can find all activities which were performed under the test case such as:

    • user changed defect type of test item
    • user posted a comment to the test item
    • user posted a bug to the Bug Tracking System
    • user-added link to the existing in Bug Tracking System bug.
    • analyzer changed defect type of test item based on the item (where "item" is a link to a log view of an item which has been chosen by the analyzer as the most relevant result)
    • analyzer posted a comment to the test item
    • analyzer posted a bug to the Bug Tracking System or added a link to the existing in Bug Tracking System issue.
    • pattern analysis add a found pattern

    History of actions is not shown if nobody performed actions with the item. By default, you will see the last action in one line.

    Markdown mode on Logs view

    You can view logs in Markdown mode or in the Console view.

    To enable Markdown mode, please perform actions:

    • Click on "M" button on the log level

    To disable Markdown mode, please perform actions:

    • Click on "M" button on log level one more time

    The same logic applies to the Console view.

    Log view for containers (for a launch or a suite)

    A user can report logs not only to the test execution but also to containers:

    • Launch
    • Suite

    If user want to view attached logs:

    • Login ReportPortal
    • Click on a launch name, or a suite name
    • Click on Log tab

    Nested Steps

    Retried test case (retry)

    How can I report retry items In case you implemented a retry logic for your tests in a test framework, ReportPortal will reflect it by adding a special retry structure. If there were a few invocations of the one test case, all these invocations will be shown as the one test case in ReportPortal.

    On a long view, you can see all logs and all information about all invocations. But in statistics and auto-analysis the ReportPortal will take into account only the last invocation. So that launch statistics will be more accurate.

    The defect type can be set for the last invocation only.

    On a Launch view, you can see a label, which means that the launch includes retries.

    On a step view, you can see the number of invocations and stack trace of each invocation.

    On a log view, you can see the number of invocations and logs, attachments of each invocation.

    - + \ No newline at end of file