How to change default output path in ROBOT Framework - robotframework

How can I change default output path for a test suite in RIDE or by using CLI for ROBOT Framework?

You can use "-d" or "--outputdir" parameter to specify output path:
pybot -d outdir test.txt

You should use -d to create output files. The default is the directory where tests are run from and the given path is considered relative to that unless it is absolute.
Example : pybot -d C:\Work\Robot SampleTest.robot
All logs will be saved in C:\Work\Robot

Related

Creating Fat Jars: What is the mods folder?

I'm just on:
https://openjfx.io/openjfx-docs/#modular
trying to create a jar I can run on other systems (that do not have the javafx libraries as would happen with a non-developer layman user) and they've told me to use this:
dir /s /b src\*.java > sources.txt & javac --module-path %PATH_TO_FX% -d mods/hellofx #sources.txt & del sources.txt
What is mods/
Where is that supposed to be? Are they talking about out/ ?
The doc you have linked refers to this sample.
If you clone the sample, and follow instructions on how to compile and run the project, the first command can be divided in three parts:
dir /s /b src\*.java > sources.txt & \
javac --module-path %PATH_TO_FX% -d mods/hellofx #sources.txt & \
del sources.txt
The first part just gets all the Java files in the src path and adds that to sources.txt file:
C:\path\to\hellofx\src\module-info.java
C:\path\to\hellofx\src\hellofx\HelloFX.java
The second part calls the javac command (see reference) to compile the content of sources.txt, adding the required --module-path option to include the JavaFX modules, and also adding the output or destination -d option:
-d directory
Sets the destination directory for class files. If a class is part of a package, then javac puts the class file in a subdirectory that reflects the package name and creates directories as needed.
This means that we are going to compile hellofx.HelloFX.java into the directory mods/hellofx, resulting in:
C:\path\to\hellofx\mods\hellofx\module-info.class
C:\path\to\hellofx\mods\hellofx\hellofx\HelloFX.class
The third step will just remove the sources.txt file.
And now you can run your module:
java --module-path "%PATH_TO_FX%;mods" -m hellofx/hellofx.HelloFX
You can specify any directory for the output, of course, so you can change it to out or build for instance, but then make sure you modify it accordingly in the rest of the instructions.

How to save logs in robot framework like log.html ,report.html,output.xml with some particular name for ex log.html-> logxyz.html, abcreport.html?

I am trying to save the logs with the particular name in robot framework but not able to do that . Do we have a way to save the log name with the name as we want? If yes then how to do that ?
You have the following options to configure your output files:
-d, --outputdir <dir> Defines where to create output files.
-o, --output <file> Sets the path to the generated output file.
-l, --log <file Sets the path to the generated log file.
-r, --report <file> Sets the path to the generated report file.
So to change the name of the log file launch your tests like this:
robot --log logxyz --report abcreport my_robot.robot
You can check all command line options in Robot Framework User Guide to learn more.
With -T, --timestampoutputs you can add a timestamp to the name of the output files as well. An example name with --log and --timestampoutputs: my_log_file_name-20190103-102712.html.

How to save Robot framework test run logs in some folder with timestamp?

I am using Robot Framework, to run 50 Testcases. Everytime its creating following three files as expected:
c:\users\<user>\appdata\local\output.xml
c:\users\<user>\appdata\local\log.html
c:\users\<user>\appdata\local\report.html
But when I run same robot file, these files will be removed and New log files will be created.
I want to keep all previous run logs to refer in future. Log files should be saved in a folder with a time-stamp value in that.
NOTE: I am running robot file from command prompt (pybot test.robot). NOT from RIDE.
Could any one guide me on this?
Using the built-in features of robot
The robot framework user guide has a section titled Timestamping output files which describes how to do this.
From the documentation:
All output files listed in this section can be automatically timestamped with the option --timestampoutputs (-T). When this option is used, a timestamp in the format YYYYMMDD-hhmmss is placed between the extension and the base name of each file. The example below would, for example, create such output files as output-20080604-163225.xml and mylog-20080604-163225.html:
robot --timestampoutputs --log mylog.html --report NONE tests.robot
To specify a folder, this too is documented in the user guide, in the section Output Directory, under Different Output Files:
...The default output directory is the directory where the execution is started from, but it can be altered with the --outputdir (-d) option. The path set with this option is, again, relative to the execution directory, but can naturally be given also as an absolute path...
Using a helper script
You can write a script (in python, bash, powershell, etc) that performs two duties:
launches pybot with all the options you wan
renames the output files
You then just use this helper script instead of calling pybot directly.
I'm having trouble working out how to create a timestamped directory at the end of the execution. This is my script it timestamps the files, but I don't really want that, just the default file names inside a timestamped directory after each execution?
CALL "C:\Python27\Scripts\robot.bat" --variable BROWSER:IE --outputdir C:\robot\ --timestampoutputs --name "Robot Execution" Tests\test1.robot
You may use the directory creation for output files using the timestamp, like I explain in RIDE FAQ
This would be in your case:
-d ./%date:~-4,4%%date:~-10,2%%date:~-7,2%
User can update the default output folder of the robot framework in the pycharm IDE by updating the value for the key "OutputDir" in the Settings.py file present in the folder mentioned below.
..ProjectDirectory\venv\Lib\site-packages\robot\conf\settings.py
Update the 'outputdir' key value in the cli_opts dictionary to "str(os.getcwd()) + "//Results//Report" + datetime.datetime.now().strftime("%d%b%Y_%H%M%S")" of class _BaseSettings(object):
_cli_opts = {
# Update the abspath('.') to the required folder path.
# 'OutputDir' : ('outputdir', abspath('.')),
'OutputDir' : ('outputdir', str(os.getcwd()) + "//Results//Report_" + datetime.datetime.now().strftime("%d%b%Y_%H%M%S") + "//"),
'Report' : ('report', 'report.html'),

Renaming logs and reports in Robot Framework

I know that it's not possible to add or remove sections in a Report for Robot Framework, but I wonder if it's possible to change the name of the Report from the Command Line.
So the reason for this is I have two Projects and they have the following folder structure
Project A
Testsuites
Keywords
Variables
And I have the exact same Structure for Project B. Project A and Project B are in the same directory.
When I run multiple tests the Log/Report that appears becomes "Testsuites" Test Log, since that's the name of the Folder where it is.
I want to be able to change the name on the command line so on the log it becomes "Project A Test Log" or "Project B" Test log. Would it be something like this?
pybot ./testsuites AS Project A
There are two ways:
You can give names of output files as pybot parameters:
pybot ./testsuites -o A.xml -l A.log -r A.html -x A.xunit.xml
It might be more convinient to save all files in their own directories:
pybot ./testsuites -d A_files
I think that you could mark tests from different projects with different tags and than you could run different tests
pybot -i projectA -l projectA_log.html -r projectA_report.html ./testssuites
or
pybot -i projectA -d projectA ./testssuites
pybot has a --name option. From the user guide:
-N, --name
Sets the name of the top-level test suite.
For slightly more information see http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#setting-the-name

Adding directory to PATH through Makefile

I'm having some trouble in exporting the PATH I've modified inside the Makefile into the current Terminal.
I'm trying to add to the PATH, the bin folder inside wherever the Makefile directory is.
Here's the relevant strip of the makefile:
PATH := $(shell pwd)/bin:$(PATH)
install:
mkdir -p ./bin
export PATH
echo $(PATH)
The echo prints it correctly but if I redo the echo in the terminal, the PATH remains the same.
Thanks in advance for the help.
If you're using GNU make, you need to explicitly export the PATH variable to the environment for subprocesses:
export PATH := $(shell pwd)/bin:$(PATH)
install:
mkdir -p ./bin
export PATH
echo $(PATH)
What you are trying to do is not possible. Make is running in another process than the shell in your terminal. Changes to the environment in the make process does not transfer to the shell.
Perhaps you are confusing the effect of the export statement. export does not export the values of the variables from the make process to the shell. Instead, export marks variables so they will be transfered any child processes of make. As far as I know there is no way to change the environment of the parent process (the shell where you started make is the parent process of the make process).
Perhaps this answers will make the concept of exporting variables to child processes a bit clearer.
Perhaps you can rely on the user to do it for you. Note the quoting
install_hint:
#echo "Execute this command at your shell prompt:"
#echo "export PATH=$(shell pwd)/bin:\$$PATH"

Resources