this is my first post so sorry if there exists answer for a problem I 've got, but I think it is very specific.
My teammates created a very simple testing environment which tests functions in cpp project and it produces report of launched testcases to txt file which looks like this:
0 testcase1 PASS
1 testcase2 PASS
2 testcase2 FAIL
and so on
My task is to prepare an xml file from this txt and put it to Jenkins to generate pretty charts with test run.
Currently I try to parse this txt to JUnitXml file generated by Python lxml library.
Xml file from this txt looks like this:
xml
When I put it to Jenkins it produces me only result of tests which were run, in this case all tests were launched.
What am I missing in my XML file?
Do I need any external library to our test environment which would produce better xml with information about passed, failed testcases?
Cheers.
Here is what you should find in your xml report according to your report :
<testsuite skip="0" failures="1" errors="0" tests="3" name="Name of the tests">
<testcase name="testcase1" classname="This is a name to identify in which class is located the test"/>
<testcase name="testcase2" classname="This is another(or not) name to identify in which class is located the test"/>
<testcase name="testcase3" classname="This is another(or not) name to identify in which class is located the test">
<failure message="Any message of the failing output" type="You can specify the kind of error">
<![CDATA[ "Here you can put a complete stacktrace or
any log message associated with your failure" ]]>
</failure>
</testcase>
</testsuite>
You can find the description (Schema) of the JUnit XML format here
Related
I have an ant build file: build.xml, with an existing build target: Rebuild-ALL. that I run from ant eclipse plugin.
The build file contains paths referenced from another file: file.def.
I would like to create a new build target that builds from another path.
I started by doing the following:
Creating a python script that modifies the path in file.def.
I added this script to a target: Change-Paths.
I created a copy of the existing build target: Copy1-Rebuild-ALL
I added my Change-Paths target to the depends of the Copy-Rebuild-ALL.
I also created a second python script to revert the path change in file.def and repeated steps 2 to 4 to have another 2 targets: Revert-Paths and Copy2-Rebuild-ALL.
The problem is that the second build target still takes the path of the first build target even though I can see on my editor that the python script has successfully replaced the paths.
After executing the second target 3 consecutive times it works fine so is there maybe a refresh or a delay I can add to fix this ?
I tried using ant calls instead of depends but still the same issue occurs.
I am still new to ant and build files in general so let me know if there's a better way to do this.
Here is a an example to my build.xml file:
<project name="Build" xmlns:if="ant:if" xmlns:unless="ant:unless" default="REBUILD_ALL" basedir="${ant.file}/../../../..">
<property file="${TOOLS.PATH}/Compiler/file.def" />
<property name="COMPILER" value="${VENDOR.COMPILER}" />
<target name="Change-Paths">
<exec executable="${python.exe}" dir="${basedir}" failonerror="true" inputstring="${TOOLS.PATH}/Compiler/file.def">
<arg line="${SCRIPTS.PATH}/Change_Paths.py" />
</exec>
</target>
<target name="Copy1-Rebuild-ALL" description="Build all files from the project to output executable files" depends="Change-Paths, BuildMakesParallel, LINK_ALL">
</target>
<target name="Revert-Paths">
<exec executable="${python.exe}" dir="${basedir}" failonerror="true" inputstring="${TOOLS.PATH}/Compiler/file.def">
<arg line="${SCRIPTS.PATH}/Revert_Paths.py" />
</exec>
</target>
<target name="Copy2-Rebuild-ALL" description="Build all files from the project to output executable files" depends="Revert-Paths, BuildMakesParallel, LINK_ALL">
</target>
</project>
Also here is an example to file.def:
VENDOR_PATH = c:/VENDOR/toolchains/compiler_name/v1
VENDOR.COMPILER = ${VENDOR_PATH}/bin/compiler_name-gcc.exe
I permanently added the new path in file.def and added a new property in build.xml to hold this path as follows:
VENDOR_PATH_2 = c:/VENDOR/toolchains/compiler_name/v2
VENDOR.COMPILER_2 = ${VENDOR_PATH_2}/bin/compiler_name-gcc.exe
Now the python script will only replace the property name in the macro that compiles files in the build target and it works as expected.
When trying to open a .dot file with python-docx, I am getting the error:
KeyError: "no relationship of type 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument' in collection"
This is the code in question:
from docx import Document
document = Document('file.dot')
What is the actual problem here?
How did you generate the input file? Here it is an issue about the type when you save the file as Strict Open XML Document. Try the standard Word document.
You can get more informations about relations inside the file using opc-diag:
opc browse <FILE> .rels
An idea to try to fix the bad file:
# Extract the bad file to a temporary folder
unzip <FILE> -d bad-file
# Repackage the extracted data to a new fresh file
opc repackage bad-file new-file.docx
# A diff of relationships
opc diff-item test.docx test-ok.docx .rels
I'd would like to create an output file (an .CSV file, as an example)on which store all the outcomes got from a testcase set execution, where I can specify things, besides the outcome itself, such us testcase title, description, execution date/time, testcase duration, etc...
title, description, start datetime, duration (s), outcome
TC#1, My testcase #1, 2016/12/01 11:50:01, 64, BLOCKED
TC#2, My testcase #2, 2016/12/01 11:52:23, 70, PASSED
TC#3, My testcase #3, 2016/12/01 11:53:45, 90, FAILED
...
Has anyone done this before?
Any feedback about it would be appreciated.
Regards
You can run with the -r option to the run task, i.e. pysys.py run -r (to see a list of all options use pysys.py run -h). The -r option allows you to record the output of the tests, based on the writers defined in the pysysproject.xml file. This file that comes with the example projects has the below defined;
<writers>
<writer classname="XMLResultsWriter" module="pysys.writer" file="testsummary-%Y%m%d%H%M%S.xml">
<!--
Set properties on the XML test output writer class. The available properties that
can be set are the stylesheet location, whether to use file URLs in all references
to resources on the local disk, and the directory to write the output file (defaults
to the current working directory). Note that Mozilla Firefox requires the stylesheet
to be located next to the XML file when loading the file, and all references to local
resources must be as file URLs. Internet Explorer and Chrome can load the stylesheet
from any location on the local disk, but cannot load resources when referenced by a
file URL.
<property name="outputDir" value="${rootdir}"/>
<property name="stylesheet" value="./pysys-log.xsl"/>
<property name="useFileURL" value="true"/>
-->
</writer>
<!--
Add in the test results writer if straight text output is required
<writer classname="TextResultsWriter" module="pysys.writer" file="testsummary-%Y%m%d%H%M%S.log">
<property name="outputDir" value="${rootdir}"/>
</writer>
-->
<!--
Add in the JUnit results writer if output in the Apache Ant JUnit XML format is required. Use the
outputDir property to define the output directory for the JUnit test summary files (the writer will
produce one file per test into this output directory). If not specified this defaults to the current
working directory.
<writer classname="JUnitXMLResultsWriter" module="pysys.writer">
<property name="outputDir" value="${rootdir}/target/pysys-reports"/>
</writer>
-->
</writers>
So in the example above your test output would be in xml. You can have multiple writers, i.e. uncomment the TestResultsWriter and you will have both xml and log output summarizing the test results. I don't have a CSV output writer at the moment, though you can write your own one and configure your pysysproject.xml file to point to that (also please put in a feature request if you want me to add to the core package). Have a look at the implementations in the pysys.writer package as examples.
I have 1 file with selenium tests, with baseURL in it. So now i need to find a way to launch this tests from console with URL as a parametr.
I have one local, developer and production server, so i want to run this tests without hardcode baseURL in it.
Is anyone one have some idea for this?
Waiting for your answers :3
Yes, you can create one Environment file any format would do (.xml, .xlsx, .properties etc).
Then you just mention environment specific details and parse the file. Its better if you use .xml format. In this way you can create node like configuration with parent being the environment name. In this way you can add any number of configuration for different servers.
Something like:-
XML Format:-
<environments>
<environment id="local">
<parameter>
<name>host</name>
<value>LocalURL</value>
</parameter>
</environment>
<environment id="development">
<parameter>
<name>host</name>
<value>DevelopmentURL</value>
</parameter>
</environment>
<environment id="production">
<parameter>
<name>host</name>
<value>ProductionURL</value>
</parameter>
</environment>
</environments>
Properties File Format:-
localUrl = http://local.com
developmentUrl = http://development.com
productionUrl = http://production.com
Any format you can use and write a code to parse it.
I have this xml model.
link text
So I have to add some node (see the text commented) to this file.
How I can do it?
I have writed this partial code but it doesn't work:
xmldoc=minidom.parse(directory)
child = xmldoc.createElement("map")
for node in xmldoc.getElementsByTagName("Environment"):
node.appendChild(child)
Thanks in advance.
I downloaded your sample xml file and your code works fine. Your problem is most likely with the line: xmldoc=minidom.parse(directory), should this not be the path to the file you are trying to parse not to a directory? The parse() function parses an XML file it does not automatically parse all the XML files in a given directory.
If you change your code to something like below this should work fine:
xmldoc=minidom.parse("directory/model_template.xml")
child = xmldoc.createElement("map")
for node in xmldoc.getElementsByTagName("Environment"):
node.appendChild(child)
If you then execute the statement: print xmldoc.toxml() you will see that the map element has indeed been added to the Environment element: <Environment><map/></Environment>.