satelliteqe / betelgeuse Goto Github PK
View Code? Open in Web Editor NEWBetelgeuse reads standard Python test cases and offers tools to interact with Polarion.
License: GNU General Public License v3.0
Betelgeuse reads standard Python test cases and offers tools to interact with Polarion.
License: GNU General Public License v3.0
Currently RHDS team is creating Test Specification in Polarion manually.
In our case, we create a test plan for each RFE/feature, and we add all the test case for that feature as work items to the test plan document.
Can we please modify betelgeuse to create such test plans automatically from command line, so that it can create all the headers as Scope, Purpose, Setup etc in a Polarion document(test plan)?
Currently Betelgeuse parses the test docstrings and assign fields in a way that does not apply to every scenario. This means that some of the default values may not be available on all Polarion projects, Polarion custom fields can be created per project basis and Betelgeuse will not be able to fill all of them, the user may want to apply its own rules to generate Requirements, field values, test case names so on and so forth.
The better way to solve this is allowing the user to specify a Python module as a customization module. On that module functions like get_test_case_name
may be present and if they are they should be called in order to get the value. Continuing with the get_test_case_name
example, that function can receive a testcase object along with the raw docstring, this way the user can create its own logic in order to create the test case name, for example the test case name can contain the value from some other field like the OS.
If no customization module is provided Betelgeuse will use its own rules and default values. The same will happen if the customization module is provided but the use didn't provide some specific function, then the default Betelgeuse behavior will be used. On the other hand, depending on the filed, Betelgeuse can expect so user configuration to be present, but currently I don't see any case of this.
After #69 is merged
It will be great if I can use :...: instead of @....: in my source code file for betelgeuse.
For example the following docstring:
"""My test
@requirement: My Requirement
@steps: Do this
@expectedresults: Expected result
"""
Would be like this:
"""My test
:requirement: My Requirement
:steps: Do this
:expectedresults: Expected result
"""
Saw the following error happen 4 times in a row while attempting to create a new HotBackup
Requirement:
Creating test case test_positive_directory_exists for requirement: HotBackup.
No handlers could be found for logger "suds.client"
Traceback (most recent call last):
File "/home/jenkins/shiningpanda/jobs/5ba1b881/virtualenvs/d8de43bd/bin/betelgeuse", line 11, in <module>
sys.exit(cli())
File "/home/jenkins/shiningpanda/jobs/5ba1b881/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/home/jenkins/shiningpanda/jobs/5ba1b881/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/home/jenkins/shiningpanda/jobs/5ba1b881/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/jenkins/shiningpanda/jobs/5ba1b881/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/jenkins/shiningpanda/jobs/5ba1b881/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 534, in invoke
return callback(*args, **kwargs)
File "/home/jenkins/shiningpanda/jobs/5ba1b881/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/home/jenkins/shiningpanda/jobs/5ba1b881/virtualenvs/d8de43bd/lib/python2.7/site-packages/betelgeuse.py", line 637, in test_case
pool.map(add_test_case, testcases.items())
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 567, in get
raise self._value
multiprocessing.pool.MaybeEncodingError: Error sending result: 'WebFault(u"Server raised fault: 'Not authorized.'",)'. Reason: 'PicklingError("Can't pickle suds.sudsobject.Fault: attribute lookup suds.sudsobject.Fault failed",)'
Can we have the option (via command line arg) to use the test case Test token for the polarion test case title on import?
I would like to use this instead of using the python module, class, method/function names.
As per existing information in Polarion, a Test Run
can have a type
of one of the following:
I'd like for the test-run
method to accept a type
parameter with a default of buildacceptance
if none are passed.
Whether creating for the first time or updating existing Test Cases
, the following fields should be set:
DRAFT
but other acceptable values are PROPOSED
, NEEDS UPDATE
, APPROVED
and INACTIVE
)FUNCTIONAL
but other acceptable values are NON-FUNCTIONAL
and STRUCTURAL
)-
)POSITIVE
but other acceptable values are NEGATIVE
)MEDIUM
but other acceptable values are LOW,
HIGHand
CRITICAL`)COMPONENT
but other acceptable values are INTEGRATION
, SYSTEM
and ACCEPTANCE
)AUTOMATED
, MANUAL ONLY
, NOT AUTOMATED
As you can see, Betelgeuse
already sets these fields but some of the defaults values used need to be flexible to allow for more flexibility.
For the time being, specially for the Satellite 6 QE team, the following rules should be used:
DRAFT
as we want to be able to automatically update them whenever the docstring changes. If we were to set the Status
to any other value, updating a Test Case
would require several steps to change the Status
back to DRAFT
.test_positive/negative_*
, we should use this information when importing/updating Test Cases
Testimony
flag found in the docstring to determine whether something is automated or not.No changes required for the other fields for now.
Make sure to make clear how the mapping between steps and expected results works and provide some examples.
Betelgeuse help statues that --status
option can accepts finished
and inprogress
as possible values but when setting inprogress
the generated XML does not have the expected property: <property name="polarion-set-testrun-finished" value="false" />
.
One may want to update the requirement of a test case. Betelgeuse should check for the necessity of linking a requirement not only on test case creation but also on update.
Would love to see if we can update test setup in Polarion using betelgeuse
Here is the stack trace:
Traceback (most recent call last):
File "/home/elyezer/.virtualenvs/betelgeuse/bin/betelgeuse", line 9, in <module>
load_entry_point('Betelgeuse', 'console_scripts', 'betelgeuse')()
File "/home/elyezer/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/home/elyezer/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/home/elyezer/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 1058, in invoke
sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)
File "/home/elyezer/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 620, in make_context
self.parse_args(ctx, args)
File "/home/elyezer/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 874, in parse_args
value, args = param.handle_parse_result(ctx, opts, args)
File "/home/elyezer/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 1398, in handle_parse_result
self.callback, ctx, self, value)
File "/home/elyezer/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 77, in invoke_param_callback
return callback(ctx, param, value)
File "/home/elyezer/code/betelgeuse/betelgeuse.py", line 91, in validate_key_value_option
key, value = value.split('=', 1)
AttributeError: 'NoneType' object has no attribute 'split'
The validator callback needs to deal when None
value is passed, for more information check [1]
[1] http://click.pocoo.org/6/options/#callbacks-and-eager-options
I'm able to create new test cases and link to an existing requirement but, I'm no longer seeing the steps and expected results.
I'm using similar to this:
class TestClass(object):
def test_case_0001(self):
"""
@Title: Some new test case title
@Description:
@Requirement: Some Existing Requirement
@caselevel: Acceptance
@casecomponent: ipa
@setup:
1. Setup1
2. Setup2
3. Setup3
@steps:
1. Step1
@expectedresults:
1. Result1
"""
betelgeuse --token-prefix "@" test-case --path /root/test_suite_dir/test_cases.py RedHatEnterpriseLinux7
Test Cases in Polarion now require the following field to be set: automation_script
This field will store a URL
pointing to the location of the specific test case in the source code. Though one can provide a generic URL such as https://github.com/SatelliteQE/robottelo
, we should be able to provide something more accurate such as https://github.com/SatelliteQE/robottelo/blob/master/tests/foreman/cli/test_contentview.py#L160
.
Please read our MOJO DOC-1073077.
Given a xunit
file, create a new method to parse through the source code for automated tests, and update the XML file to include the test case UUID for each test found. For example, given the following (snippet) xunit file:
<?xml version="1.0" encoding="utf-8"?><testsuite errors="3" failures="2" name="pytest" skips="0" tests="3" time="4157.148">
<testcase classname="tests.foreman.api.test_syncplan.SyncPlanSynchronizeTestCase" file="tests/foreman/api/test_syncplan.py" line="609" name="test_positive_synchronize_custom_product_future_sync_date" time="981.63787818">
The new method should look at the source code for the test named test_positive_synchronize_custom_product_future_sync_date
in the file tests/foreman/api/test_syncplan.py
and extract the uuid
from it.
Once this information is made available, we would then generate a brand new xml file containing the uuid
as part of a new <properties><property>
block:
<?xml version="1.0" encoding="utf-8"?>
<testsuites>
<properties>
<property name="polarion-testrun-title" value="TITLE_GOES_HERE" />
<property name="polarion-project-id" value="PROJECT_ID_GOES_HERE"/>
<property name="polarion-user-id" value="USER_ID_GOES_HERE"/>
<property name="polarion-lookup-method" value="custom"/>
</properties>
<testsuite errors="3" failures="2" name="pytest" skips="0" tests="3" time="4157.148">
<testcase classname="tests.foreman.api.test_syncplan.SyncPlanSynchronizeTestCase" file="tests/foreman/api/test_syncplan.py" line="609" name="test_positive_synchronize_custom_product_future_sync_date" time="981.63787818">
<properties>
<property name="polarion-testcase-id" value="0495cb39-2f15-4b6e-9828-1e9517c5c826"/>
</properties>
</testcase>
</testsuites>
As you an see, this new method should accept the following arguments:
xunit_file
- this should be the path to the original xunit file as generated by your automation processpolarion_user_id
- your Polarion usernamepolarion_project_id
- your projects's ID (e.g. RHSAT6)polarion_testrun_name
- The title for your TestRun
(e.g. "Satellite 6.2.0 SNAP 1.0 - RHEL 7")The properties: polarion-set-testrun-finished
, polarion-dry-run
and polarion-include-skipped
should be defined even when the default importer value is selected. This will make clear what Betelgeuse is setting on the XML.
Now that Pylarion
allows us to query for the caseautomation
custom field, we should make sure that we explicitly query for it here
results = TestCase.query(
test_case_id, fields=['caseautomation', 'description', 'work_item_id'])
Now, when considering whether to update a Test Case or not, we no longer should have to fetch it first just to get access to its caseautomation
field, as shown here, and avoid making another call to Polarion
.
Make test plan set other fields like status and custom fields.
Add a README
file containing some basic information about the project and pointing to official documentation via ReadTheDocs
link.
Add some basic documentation about the project and its supported commands. Docs should be hosted on ReadTheDocs
and linked from the project's README
file.
Seems that one needs to pass both --path
and --path-to-source
when using test-run
or Betelgeuse will attempt to open files that were not provided:
betelgeuse test-run --test-run-id omaciel-delete-1 --test-run-type regression --test-template-id Empty --path /Users/omaciel/Dropbox/xml/tier1-parallel-results.xml --user omaciel --custom-fields arch=x8664 CLOUDTP
Traceback (most recent call last):
File "/Users/omaciel/.virtualenvs/betelgeuse/bin/betelgeuse", line 9, in <module>
load_entry_point('Betelgeuse', 'console_scripts', 'betelgeuse')()
File "/Users/omaciel/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/Users/omaciel/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/Users/omaciel/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/omaciel/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Users/omaciel/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/core.py", line 534, in invoke
return callback(*args, **kwargs)
File "/Users/omaciel/.virtualenvs/betelgeuse/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/Users/omaciel/hacking/betelgeuse/betelgeuse.py", line 743, in test_run
*testimony.get_testcases([source_code_path]).values()
File "/Users/omaciel/.virtualenvs/betelgeuse/lib/python2.7/site-packages/testimony/__init__.py", line 347, in get_testcases
if os.path.isfile(path):
File "/Users/omaciel/.virtualenvs/betelgeuse/lib/python2.7/genericpath.py", line 37, in isfile
st = os.stat(path)
TypeError: coercing to Unicode: need string or buffer, NoneType found
Since source_code_path is required for a Test Run
, we should possibly:
Add some examples and documentation about the new added --custom-fields option for the test run command.
Is it possible to add an option to prefix a test case title with the value passed on the command line?
So, I could have a test_0001.py:
def test_feature_0001():
""" :title: Running Feature with command option 1 """
pass
Then to import I could run this:
betelgeuse test-case --title-prefix "TEAM-TC: Feature Name: " --path test_0001.py PROJECT
And in Polarion PROJECT, the test case Title would be:
TEAM-TC: Feature Name: Running Feature with command option 1
Would that (or something similar) be possible?
Is it possible to have betelgeuse also read a tests conftest.py file if it exists and the path is a directory that contains a conftest py file?
`[root@ipa1 betelgeuse_testcase_importer]# cat test2/conftest.py
"""
:requirement: IPA Feature 0001
:caselevel: Acceptance
:casecomponent: ipa
:caseautomation: Automated
:caseimportance: Medium
:testtype: Functional
:description: some default description
"""
import pytest
[root@ipa1 betelgeuse_testcase_importer]# cat test2/test_0001.py
class TestFeature(object):
def test_feature_command_with_option_a(self):
"""
:title: IPA - Feature command run with option A
:id: ipa_test_feature_command_with_option_a
:setup: Prepare environment with servers and users
:steps:
1. step 1
2. step 2
:expectedresults:
1. pass
2. pass
"""
option = "A"
assert option == "A"
def test_feature_command_with_option_b(self):
"""
:title: IPA - Feature command run with option B
:id: ipa_test_feature_command_with_option_b
:setup: Prepare environment with servers and users
:steps:
1. step 1
2. step 2
:expectedresults:
1. pass
2. pass
"""
option = "B"
assert option == "B"
[root@ipa1 betelgeuse_testcase_importer]# betelgeuse test-case --path ./test2/ PROJECT
Thanks,
Scott
Betelgeuse have received a lot of improvements and the documentation is missing them. Documentation should be update in order to match the current Betelgeuse state.
Should be covered some topics like how to define test docstring, the tokens betelgeuse expects to be defined and the changes on the test-run command in order to map the test IDs with the jUnit results.
Check is upstream token is present and only if when present edit it. Not all projects have the upstream field.
# betelgeuse test-case --path /export/test RHDS --collect-only
Creating test case test_slapd_InstScriptsEnabled for requirement: Setup Ds.
Linking test case test_slapd_InstScriptsEnabled to requirement: Setup Ds.
# betelgeuse test-case --path /export/test RHDS
Password not in config file.
Enter Password:
Creating test case test_slapd_InstScriptsEnabled for requirement: Setup Ds.
Traceback (most recent call last):
File "/usr/bin/betelgeuse", line 9, in <module>
load_entry_point('Betelgeuse==0.7.1', 'console_scripts', 'betelgeuse')()
File "/usr/lib/python2.7/site-packages/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/usr/lib/python2.7/site-packages/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python2.7/site-packages/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python2.7/site-packages/click/core.py", line 534, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/export/betelgeuse/betelgeuse.py", line 649, in test_case
pool.map(add_test_case, testcases.items())
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 250, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 554, in get
raise self._value
pylarion.exceptions.PylarionLibException: These parameters are unknown: upstream
We need to write tests for Betelgeuse.
This is tracking bug for adding additional parameters required for Polarion.
Currently,
is not supported.
While looking at #65 I looked at the betelgeuse code and I noticed in add_test_case:
371 # Fetch the test case id if the @Id tag is present otherwise generate a
372 # test_case_id based on the test Python import path
So, I thought I'd try to use that to set the test case "title" in polarion:
# cat test_spoore_betelgeuse_01.py
class IpaBetelgeuseExampleClass(object):
def test_betelgeuse_example_0001(self):
""" @Id: IDM-IPA-TC: IPA Betelgeuse Example 0001
@Description: New test 0001
"""
pass
But, I see this error:
# betelgeuse test-case --path test_spoore_betelgeuse_01.py RedHatEnterpriseLinux7
Updating test case test_betelgeuse_example_0001 for requirement Spoore Betelgeuse 01.
Traceback (most recent call last):
File "/usr/bin/betelgeuse", line 9, in <module>
load_entry_point('Betelgeuse==0.4.0', 'console_scripts', 'betelgeuse')()
File "/usr/lib/python2.7/site-packages/click-6.6-py2.7.egg/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/click-6.6-py2.7.egg/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/usr/lib/python2.7/site-packages/click-6.6-py2.7.egg/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python2.7/site-packages/click-6.6-py2.7.egg/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python2.7/site-packages/click-6.6-py2.7.egg/click/core.py", line 534, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/click-6.6-py2.7.egg/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "build/bdist.linux-x86_64/egg/betelgeuse.py", line 625, in test_case
pool.join()
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 250, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 554, in get
raise self._value
AssertionError
That error, I think is related to the test_case_id including spaces. I added a simple patch to my local copy to add quotes:
diff --git a/betelgeuse.py b/betelgeuse.py
index 3c2a035..c0f4d86 100644
--- a/betelgeuse.py
+++ b/betelgeuse.py
@@ -414,6 +414,7 @@ def add_test_case(args):
results = []
if not collect_only:
+ test_case_id = '"{}"'.format(test_case_id)
results = TestCase.query(
test_case_id,
fields=[
That seemed to resolve the issue I was seeing.
But, it appears as if the test case was still created with the method name instead of the 'Id' token value.
We should be able to create new Test Plans (plans or iterations) via Betelgeuse.
Polarion now requires that Test Cases
should provide the approvee
field. I think that we can use the user running the script to populate this field at runtime.
IMPORTANT: the user running the script must have the project_approver
role in order to be able to approve a Test Case
.
Here's an example:
testcase = TestCase(project_id='RHSAT6', work_item_id='RHSAT6-2726')
testcase.add_approvee('omaciel')
testcase.update()
testcase.edit_approval('omaciel', 'approved')
Test case command should not stop when a invalid value is provided and a PylarionLibException
is raised.
Traceback (most recent call last):
File "/home/jenkins/shiningpanda/jobs/e79539a1/virtualenvs/d8de43bd/bin/betelgeuse", line 11, in <module>
sys.exit(cli())
File "/home/jenkins/shiningpanda/jobs/e79539a1/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/home/jenkins/shiningpanda/jobs/e79539a1/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/home/jenkins/shiningpanda/jobs/e79539a1/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/jenkins/shiningpanda/jobs/e79539a1/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/jenkins/shiningpanda/jobs/e79539a1/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/core.py", line 534, in invoke
return callback(*args, **kwargs)
File "/home/jenkins/shiningpanda/jobs/e79539a1/virtualenvs/d8de43bd/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/home/jenkins/shiningpanda/jobs/e79539a1/virtualenvs/d8de43bd/lib/python2.7/site-packages/betelgeuse.py", line 489, in test_case
pool.map(add_test_case, testcases.items())
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 567, in get
raise self._value
pylarion.exceptions.PylarionLibException: Acceptable values for testtype are:[functional, nonfunctional, structural]
Can we get support added for the polarion-testrun-type-id property?
Elyezer discovered that was missing while helping me troubleshoot an issue with xml-test-run.
Thanks,
Scott
We just added a new test-plan
command and need to properly document it.
Can betelgeuse import test case steps into the polarion test case step fields instead of the description field?
Since Test Runs
created by Betelgeuse are populated with data from automated test runs, it makes sense to set the isautomated
attribute to True
. Perhaps this should be an option (default to False
?) passed to the test-run
method?
py.test supports various ways of parameterizing and collecting tests, that do not fit the limited unit-test model
so we cant hope to use it for cfme for example
SatelliteQE/testimony#123 drops the token-prefix in favor of field-list RST syntax. Betelgeuse should reflect that change by dropping its token-prefix option too.
Whis issue should be worked and the testimony version must be pinned to at least the version where the token prefix is going to be dropped.
When querying for a Test Case Betelgeuse use assert which will stop the test case update and will raise an exception. It will be better to have more information when that happens so the user can clearly know what have happened.
Betelgeuse should inform the user that the ID is returning more than one test case and it can't proceed.
Betelgeuse should only manage test cases that does not raises any RST parsing warnings and errors when parsing their docstring. Test cases with parsing warning or errors should be skipped and the user properly notified
Betelgeuse is currently taking the docstring from test cases and putting that into the description field of Polarion. It will be nice if all the information in docstring can go to the specific field ::
For Example :
@feature: Replication
@setup: Four masters, replication is configured
@Assert: All masters should be in sync.
@Status: Manual
Steps should go in Test Steps and Assert should go in expected result.
Betelgeuse should support adding testcases to existing requirements available on Polarion.
Seems that betelgeuse fails to parse testcase docstring which contains unicode character
1. ipa ca-find é
Traceback (most recent call last):
File "/data/akasurde/src/betelgeuse/venv/bin/betelgeuse", line 9, in <module>
load_entry_point('Betelgeuse==0.5.0', 'console_scripts', 'betelgeuse')()
File "/data/akasurde/src/betelgeuse/venv/lib/python2.7/site-packages/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/data/akasurde/src/betelgeuse/venv/lib/python2.7/site-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/data/akasurde/src/betelgeuse/venv/lib/python2.7/site-packages/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/data/akasurde/src/betelgeuse/venv/lib/python2.7/site-packages/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/data/akasurde/src/betelgeuse/venv/lib/python2.7/site-packages/click/core.py", line 534, in invoke
return callback(*args, **kwargs)
File "/data/akasurde/src/betelgeuse/venv/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "build/bdist.linux-x86_64/egg/betelgeuse.py", line 637, in test_case
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 567, in get
raise self._value
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 12: ordinal not in range(128)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.