Coder Social home page Coder Social logo

allure-pytest's Introduction

[DEPRICATED]

Allure Pytest Adaptor

Join the chat at https://gitter.im/allure-framework/allure-core Build Status Release Status Downloads

This repository contains a plugin for py.test which automatically prepares input data used to generate Allure Report. Note: this plugin currently supports only Allure 1.4.x series.

Installation and Usage

py.test --alluredir [path_to_report_dir]
# WARNING [path_to_report_dir] will be purged at first run

This plugin gets automatically connected to py.test via entry point if installed.

Connecting to IDE:

pytest_plugins = 'allure.pytest_plugin',\

Allure Features

Attachments

To attach some content to test report:

import allure

def test_foo():
    allure.attach('my attach', 'Hello, World')

Steps

To divide a test into steps:

import pytest

def test_foo():
    with pytest.allure.step('step one'):
        # do stuff

    with pytest.allure.step('step two'):
        # do more stuff

Can also be used as decorators. By default step name is generated from method name:

import pytest

@pytest.allure.step
def make_test_data_foo():
    # do stuff

def test_foo():
    assert make_some_data_foo() is not None

@pytest.allure.step('make_some_data_foo')
def make_some_data_bar():
    # do another stuff

def test_bar():
    assert make_some_data_bar() is not None

Steps can also be used without pytest. In that case instead of pytest.allure.step simply use allure.step:

import allure

@allure.step('some operation')
def do_operation():
    # do stuff

allure.step decorator supports step name formatting with function parameters:

import allure

@allure.step('some operation for bar={0}')
def do_operation(bar):
    # do stuff

def test_foo():
    assert do_operation('abcdef')

The step in the latter case will have name some operation for bar=abcdef. Formatting is done via python's built-in string.format and supports it's options. Arguments are passed to format method in the same way they are passed to the decorated function.

Steps support is limited when used with fixtures.

Severity

Any test, class or module can be marked with different severity:

import pytest

@pytest.allure.severity(pytest.allure.severity_level.MINOR)
def test_minor():
    assert False


@pytest.allure.severity(pytest.allure.severity_level.CRITICAL)
class TestBar:

    # will have CRITICAL priority
    def test_bar(self):
        pass

    # will have BLOCKER priority via a short-cut decorator
    @pytest.allure.BLOCKER
    def test_bar(self):
        pass

To run tests with concrete priority:

py.test my_tests/ --allure_severities=critical,blocker

Issues

Issues can be set for test.

import pytest

@pytest.allure.issue('http://jira.lan/browse/ISSUE-1')
def test_foo():
    assert False


import allure

@allure.issue('http://jira.lan/browse/ISSUE-2')
class TestBar:

    # test will have ISSUE-2, ISSUE-3 and ISSUE-4 label
    @allure.issue('http://jira.lan/browse/ISSUE-3')
    def test_bar1(self):
        # You can use this feature like a function inside the test
        allure.dynamic_issue('http://jira.lan/browse/ISSUE-4')
        pass

    # test will have only ISSUE-2 label
    def test_bar2(self):
        pass

Test cases

Test cases links can be set for test also.

import pytest

@pytest.allure.testcase('http://my.tms.org/TESTCASE-1')
def test_foo():
    assert False


import allure

@allure.testcase('http://my.tms.org/browse/TESTCASE-2')
class TestBar:

    # test will have TESTCASE-2 and TESTCASE-3 label
    @allure.testcase('TESTCASE-3')
    def test_bar1(self):
        pass

    # test will have only TESTCASE-2 label
    def test_bar2(self):
        pass

Features & Stories

Feature and Story can be set for test.

import allure


@allure.feature('Feature1')
@allure.story('Story1')
def test_minor():
    assert False


@allure.feature('Feature2')
@allure.story('Story2', 'Story3')
@allure.story('Story4')
class TestBar:

    # will have 'Feature2 and Story2 and Story3 and Story4'
    def test_bar(self):
        pass

To run tests by Feature or Story:

py.test my_tests/ --allure_features=feature1,feature2
py.test my_tests/ --allure_features=feature1,feature2 --allure_stories=story1,story2

Environment Parameters

You can provide test environment parameters such as report name, browser or test server address to allure test report.

import allure
import pytest


def pytest_configure(config):
    allure.environment(report='Allure report', browser=u'Я.Браузер')


@pytest.fixture(scope="session")
def app_host_name():
    host_name = "my.host.local"
    allure.environment(hostname=host_name)
    return host_name


@pytest.mark.parametrize('country', ('USA', 'Germany', u'Россия', u'Япония'))
def test_minor(country):
    allure.environment(country=country)
    assert country

More details about allure environment you can know from documentation.

Development

Use allure.common.AllureImpl class to bind your logic to this adapter.

allure-pytest's People

Contributors

alluremodifier avatar baev avatar bayandin avatar dchr avatar f1ashhimself avatar gdyuldin avatar ge0 avatar gitter-badger avatar kondaurov avatar maroz avatar mavlyutov avatar monkpit avatar movax01h avatar pupssman avatar pyatil avatar sseliverstov avatar vania-pooh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

allure-pytest's Issues

Jenkins matrix-job collector fails

In Jenkins matrix-job on reports collection step I've got this:

Allure Report Generation: started
Allure Report Generation: copy matrix builds results in directory [/jenkins/workspace/awaps-functional-test-matrix/allure93416645115399836.tmp/results]
FATAL: java.io.IOException: Failed to extract /jenkins/compound-root/workspace/awaps-functional-test-matrix/LABEL/awaps-basic-openstack/TESTPACK/P1/reports/*/
at hudson.FilePath.readFromTar(FilePath.java:2088)
at hudson.FilePath.copyRecursiveTo(FilePath.java:2000)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1911)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1894)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1879)
at ru.yandex.qatools.allure.jenkins.AllureReportPublisher$1.endBuild(AllureReportPublisher.java:168)
at org.jenkins_ci.plugins.flexible_publish.ConditionalMatrixAggregator.endBuild(ConditionalMatrixAggregator.java:78)
at org.jenkins_ci.plugins.flexible_publish.FlexibleMatrixAggregator.endBuild(FlexibleMatrixAggregator.java:100)
at hudson.matrix.MatrixBuild$MatrixBuildExecution.post2(MatrixBuild.java:403)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:725)
at hudson.model.Run.execute(Run.java:1695)
at hudson.matrix.MatrixBuild.run(MatrixBuild.java:304)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:231)
at hudson.model.OneOffExecutor.run(OneOffExecutor.java:43)
Caused by: java.io.FileNotFoundException: /jenkins/workspace/awaps-functional-test-matrix/allure93416645115399836.tmp/results/000fad39-1984-4dfb-a05a-ab71328cdcca-attachment.txt (No such file or directory)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:221)
at java.io.FileOutputStream.(FileOutputStream.java:171)
at hudson.util.IOUtils.copy(IOUtils.java:35)
at hudson.FilePath.readFromTar(FilePath.java:2078)
... 14 more

java.io.IOException: java.io.IOException: Failed to extract /jenkins/compound-root/workspace/awaps-functional-test-matrix/LABEL/awaps-basic-openstack/TESTPACK/P1/reports/*/
at hudson.FilePath.readFromTar(FilePath.java:2088)
at hudson.FilePath.copyRecursiveTo(FilePath.java:2000)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1911)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1894)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1879)
at ru.yandex.qatools.allure.jenkins.AllureReportPublisher$1.endBuild(AllureReportPublisher.java:168)
at org.jenkins_ci.plugins.flexible_publish.ConditionalMatrixAggregator.endBuild(ConditionalMatrixAggregator.java:78)
at org.jenkins_ci.plugins.flexible_publish.FlexibleMatrixAggregator.endBuild(FlexibleMatrixAggregator.java:100)
at hudson.matrix.MatrixBuild$MatrixBuildExecution.post2(MatrixBuild.java:403)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:725)
at hudson.model.Run.execute(Run.java:1695)
at hudson.matrix.MatrixBuild.run(MatrixBuild.java:304)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:231)
at hudson.model.OneOffExecutor.run(OneOffExecutor.java:43)
Caused by: java.io.FileNotFoundException: /jenkins/workspace/awaps-functional-test-matrix/allure93416645115399836.tmp/results/000fad39-1984-4dfb-a05a-ab71328cdcca-attachment.txt (No such file or directory)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:221)
at java.io.FileOutputStream.(FileOutputStream.java:171)
at hudson.util.IOUtils.copy(IOUtils.java:35)
at hudson.FilePath.readFromTar(FilePath.java:2078)
... 14 more
at hudson.FilePath.copyRecursiveTo(FilePath.java:2007)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1911)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1894)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1879)
at ru.yandex.qatools.allure.jenkins.AllureReportPublisher$1.endBuild(AllureReportPublisher.java:168)
at org.jenkins_ci.plugins.flexible_publish.ConditionalMatrixAggregator.endBuild(ConditionalMatrixAggregator.java:78)
at org.jenkins_ci.plugins.flexible_publish.FlexibleMatrixAggregator.endBuild(FlexibleMatrixAggregator.java:100)
at hudson.matrix.MatrixBuild$MatrixBuildExecution.post2(MatrixBuild.java:403)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:725)
at hudson.model.Run.execute(Run.java:1695)
at hudson.matrix.MatrixBuild.run(MatrixBuild.java:304)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:231)
at hudson.model.OneOffExecutor.run(OneOffExecutor.java:43)
Caused by: java.util.concurrent.ExecutionException: java.io.IOException: Pipe is already closed
at hudson.remoting.Channel$3.adapt(Channel.java:755)
at hudson.remoting.Channel$3.adapt(Channel.java:750)
at hudson.remoting.FutureAdapter.get(FutureAdapter.java:59)
at hudson.FilePath.copyRecursiveTo(FilePath.java:2003)
... 13 more
Caused by: java.io.IOException: Pipe is already closed
at hudson.remoting.PipeWindow.checkDeath(PipeWindow.java:108)
at hudson.remoting.PipeWindow$Real.get(PipeWindow.java:203)
at hudson.remoting.ProxyOutputStream._write(ProxyOutputStream.java:135)
at hudson.remoting.ProxyOutputStream.write(ProxyOutputStream.java:103)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:126)
at com.jcraft.jzlib.DeflaterOutputStream.deflate(DeflaterOutputStream.java:144)
at com.jcraft.jzlib.DeflaterOutputStream.write(DeflaterOutputStream.java:102)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at org.apache.tools.tar.TarBuffer.writeBlock(TarBuffer.java:410)
at org.apache.tools.tar.TarBuffer.writeRecord(TarBuffer.java:351)
at hudson.org.apache.tools.tar.TarOutputStream.writeEOFRecord(TarOutputStream.java:356)
at hudson.org.apache.tools.tar.TarOutputStream.finish(TarOutputStream.java:137)
at hudson.org.apache.tools.tar.TarOutputStream.close(TarOutputStream.java:149)
at hudson.util.io.TarArchiver.close(TarArchiver.java:125)
at hudson.FilePath.writeToTar(FilePath.java:2054)
at hudson.FilePath.access$1000(FilePath.java:172)
at hudson.FilePath$41.invoke(FilePath.java:1993)
at hudson.FilePath$41.invoke(FilePath.java:1989)
at hudson.FilePath$FileCallableWrapper.call(FilePath.java:2461)
at hudson.remoting.UserRequest.perform(UserRequest.java:118)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:328)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.io.IOException: Pipe is already closed
at hudson.remoting.FastPipedOutputStream.write(FastPipedOutputStream.java:147)
at hudson.remoting.FastPipedOutputStream.write(FastPipedOutputStream.java:131)
at hudson.remoting.ProxyOutputStream$Chunk$1.run(ProxyOutputStream.java:250)
at hudson.remoting.PipeWriter$1.run(PipeWriter.java:158)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:111)
... 5 more
Caused by: hudson.remoting.FastPipedInputStream$ClosedBy: The pipe was closed at...
at hudson.remoting.FastPipedInputStream.close(FastPipedInputStream.java:112)
at java.io.FilterInputStream.close(FilterInputStream.java:181)
at com.jcraft.jzlib.InflaterInputStream.close(InflaterInputStream.java:168)
at org.apache.tools.tar.TarBuffer.close(TarBuffer.java:456)
at hudson.org.apache.tools.tar.TarInputStream.close(TarInputStream.java:110)
at hudson.FilePath.readFromTar(FilePath.java:2095)
at hudson.FilePath.copyRecursiveTo(FilePath.java:2000)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1911)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1894)
at hudson.FilePath.copyRecursiveTo(FilePath.java:1879)
at ru.yandex.qatools.allure.jenkins.AllureReportPublisher$1.endBuild(AllureReportPublisher.java:168)
at org.jenkins_ci.plugins.flexible_publish.ConditionalMatrixAggregator.endBuild(ConditionalMatrixAggregator.java:78)
at org.jenkins_ci.plugins.flexible_publish.FlexibleMatrixAggregator.endBuild(FlexibleMatrixAggregator.java:100)
at hudson.matrix.MatrixBuild$MatrixBuildExecution.post2(MatrixBuild.java:403)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:725)
at hudson.model.Run.execute(Run.java:1695)
at hudson.matrix.MatrixBuild.run(MatrixBuild.java:304)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:231)
at hudson.model.OneOffExecutor.run(OneOffExecutor.java:43)

After all, @mavlyutov thinks this issue may be related to https://issues.jenkins-ci.org/browse/JENKINS-9540 somehow.

Поправить генерацию имен в адапторе

В модели есть name, а есть title.
Name - генерируется адаптером в формате {name.space}.{testName}[{params}]

  • {name.space} - какой-то неймспейс, например, в джаве это package+className, без пробельных символов
  • {test-name} - имя теста, может быть в camelCase, small-case, не содержит точек
  • {params} - некоторая строка, не содержащая терминальных символов

Name не может задаваться пользователем.

Title - human-readable имя. Задается пользователем. Если title пуст, то он генерируется автоматически из name

В отчете отображается title

Add support for default step parameters

For now there is no way to add default parameter value to step name:

import allure

@allure.step('some operation for bar={bar}')
def do_operation(bar="foo"):
    # do stuff

def test_foo():
    assert do_operation()

Add support for Behave(BDD Framework)

It would be nice if we have integration with Behave(http://pythonhosted.org/behave/)
Already tried with Allure CLI + Behave Junit XML Generation
What I did:

I already tried to generate junit xml with

behave --junit

The default folder of junit xml generation is reports/

then

allure generate reports/
allure open

Open the allure reports without any information about the behave test steps, unit tests and behaviour either.

Would be nice if has a plugin(allure-behave) to auto-discover features and scenarios, automatically fill up allure tabs with information, from High-Level BDD Tests(Acceptance tests) to Low-Level BDD Unit Tests.

It would be beautiful. :D

What do you think guys ?

Python 3 support

Hi!
It's not an issue :)
I added Python 3 support to python3 branch in my personal repo. Code in python3 branch is incompatible with Python 2.x.
Would you like to add Python 3 branch to source repo for pull request?

Add possibility to allure.issue after collection

def test_first():
    allure.issue('FOO-111')
    pytest.xfail('FOO-111')
    assert 0

or

def pytest_runtest_setup(item):
    allure.issue('BAR-222')
    item.add_marker(pytest.mark.xfail('BAR-222'))

def test_second():
    assert 0

Есть ли возможность указать alluredir в коде?

У меня есть набор тестов которые работают примерно таким образом

if __name__ == '__main__':
    pytest.main('testcases/tests/')

Есть ли на данный момент возможность генерировать xml файлы напрямую из кода, а не зпускать каждый раз в консоли py.test --alluredir=path tests.py

Memory leak with allure report recording active

If tests produce lots of attachments py.test memory footprint grows significantly with every attachment and is not reduced at any moment before test session finish.

This looks like a trouble with _allure_result-passed data not being garbage-collected. Same tests run without --alluredir do not use that much memory.

Also, memory usage is low for pytest-allure-adaptor < 1.7.0 -- looks like the problem was introduced in #80

Allure_label is not a registered marker

==================================== ERRORS ====================================
____________ ERROR collecting test.py _____________
test.py:14: in <module>
    @pytest.allure.testcase('http://my.tms.org/TESTCASE-1')
env/lib/python3.4/site-packages/allure/pytest_plugin.py:356: in testcase
    return self.label(Label.TESTCASE, *testcases)
env/lib/python3.4/site-packages/allure/pytest_plugin.py:317: in label
    allure_label = getattr(pytest.mark, '%s.%s' % (Label.DEFAULT, name))
env/lib/python3.4/site-packages/_pytest/mark.py:184: in __getattr__
    self._check(name)
env/lib/python3.4/site-packages/_pytest/mark.py:199: in _check
    raise AttributeError("%r not a registered marker" % (name,))
E   AttributeError: 'allure_label.testId' not a registered marker
=========================== 1 error in 0.06 seconds ============================

Hello! I had the error while trying to wrap method by decorator

@pytest.allure.testcase('http://my.tms.org/TESTCASE-1')

My configuration is : venv with python 3.4.3 installed, latest version of the pytest and allure. Ubuntu 14.04. Requirements installed:

apipkg==1.4
enum34==1.1.2
execnet==1.4.1
lxml==3.5.0
namedlist==1.7
Pillow==3.1.1
psutil==4.0.0
py==1.4.31
pytest==2.8.7
pytest-allure-adaptor==1.7.1
pytest-variables==1.3
pytest-xdist==1.14
pytractor==0.2.1
requests==2.9.1
selenium==2.52.0
six==1.10.0
TestLink-API-Python-client==0.6.2
wheel==0.29.0

Code:

@pytest.allure.testcase('http://my.tms.org/TESTCASE-1')
class SomeSanitySuite:
    """ Sanity """

    @pytest.mark.skipif(False, reason="No condition for ignoring yet")
    def case(self, url, engine):

        with step("Lets go to the main page"):
            engine.get(url)
            #time.sleep(2)

        with step("Auth"):
            HomePage.click_login()
            if AuthHomePage.page_error():
                engine.screenshot("login failed")
                raise AssertionError("login failed")
            AuthHomePage.Login(Vars.email, Vars.pass).by_email()

Add pytest >= 2.9.1 compatibility

After pytest upgrade from 2.9.0 to 2.9.1 pytest-allure-adaptor seems to be broken:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/_pytest/config.py", line 320, in _importconftest
    mod = conftestpath.pyimport()
  File "/usr/local/lib/python2.7/dist-packages/py/_path/local.py", line 650, in pyimport
    __import__(modname)
  File "some_test_directory/conftest.py", line 4, in <module>
    import allure
  File "/usr/local/lib/python2.7/dist-packages/allure/__init__.py", line 1, in <module>
    from allure.pytest_plugin import MASTER_HELPER
  File "/usr/local/lib/python2.7/dist-packages/allure/pytest_plugin.py", line 7, in <module>
    from _pytest.junitxml import mangle_testnames
ImportError: cannot import name mangle_testnames

pytest-allure-adaptor version: 1.7.1
pytest version: 2.9.1

Use allure with doctests would cause failure

Working bug demo:
https://github.com/tarvitz/python-allure-demo#issue-41

Short story:
pytest works with doctests fine and proper but when I want to make a allure report from these tests i get this

platform linux2 -- Python 2.7.6 -- py-1.4.25 -- pytest-2.6.3
plugins: gae, allure-adaptor
collected 1 items 
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/main.py", line 84, in wrap_session
INTERNALERROR>     doit(config, session)
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/main.py", line 122, in _main
INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/main.py", line 142, in pytest_runtestloop
INTERNALERROR>     item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/allure/pytest_plugin.py", line 269, in pytest_runtest_protocol
INTERNALERROR>     module = parent_module(item)
INTERNALERROR>   File "/home/nfox/www/ve/local/lib/python2.7/site-packages/allure/utils.py", line 37, in parent_module
INTERNALERROR>     return filter(lambda x: isinstance(x, Module), parents_of(item))[0]
INTERNALERROR> IndexError: list index out of range

A problem with pip install pytest-allure-adaptor.

Trying pip install pytest-allure-adaptor with Python 2.7.10 I have got the following error:

...
creating build/temp.linux-x86_64-2.7/src/lxml

x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/libxml2 -Isrc/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o -w

In file included from src/lxml/lxml.etree.c:85:0:

/usr/include/python2.7/Python.h:8:22: fatal error: pyconfig.h: No such file or directory

compilation terminated.

Compile failed: command 'x86_64-linux-gnu-gcc' failed with exit status 1
...
main (int argc, char **argv) {
^
cc tmp/xmlXPathInitr_ehk5.o -lxml2 -o a.out
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

Cleaning up...
Command /media/win_d/Dropbox/Andriy_Work/PROJECTS/infinity/env/bin/python2 -c "import setuptools, tokenize;file='/tmp/pip-build-F3xYRb/lxml/setup.py';exec(compile(getattr(tokenize, 'open', open)(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /tmp/pip-PW72d1-record/install-record.txt --single-version-externally-managed --compile --install-headers /media/win_d/Dropbox/Andriy_Work/PROJECTS/infinity/env/include/site/python2.7 failed with error code 1 in /tmp/pip-build-F3xYRb/lxml

I should say that I have successfully installed pytest-allure-adaptor on environment with Python3. Any ideas how to solve it with Python2.7?

Ошибка при обработке тестов помеченных как Skipped

Используемая версия - 1.3.9

Если пометить тест как skipped средствами py.test ( декоратор pytest.mark.skipif ) allure генерирует отчет, но в Suite не будет списка проваленных тестов.

В консоль firefox пишется вот такая ошибка:

"Error: testcase.status is null
$scope.statistic<@http://localhost:54555/js/testcase/list.js:62:13
@http://localhost:54555/js/testcase/list.js:61:28
$RootScopeProvider/this.$get</Scope.prototype.$digest@http://localhost:54555/vendor/angular/angular.js:11789:23
$RootScopeProvider/this.$get</Scope.prototype.$apply@http://localhost:54555/vendor/angular/angular.js:12042:13
done@http://localhost:54555/vendor/angular/angular.js:7824:34
completeRequest@http://localhost:54555/vendor/angular/angular.js:8007:7
createHttpBackend/</xhr.onreadystatechange@http://localhost:54555/vendor/angular/angular.js:7963:1
" angular.js:9400:17

xdist and allure (again)

Hello folks!

I'm very glad that #8 issue was resolved. Seems to be it take 2 years from now :)
But, still, I got the error.

============================= test session starts ==============================
platform linux -- Python 3.4.3, pytest-2.8.7, py-1.4.31, pluggy-0.3.1 -- /home/alexander-momot/Code/pytest-selenium-pgu/env/bin/python3
cachedir: .cache
rootdir: /home/alexander-momot/Code/pytest-selenium-pgu, inifile: pytest.ini
plugins: variables-1.3, xdist-1.14, allure-adaptor-1.7.1
gw0 I
[gw0] linux Python 3.4.3 cwd: /home/alexander-momot/Code/pytest-selenium-pgu
[gw0] Python 3.4.3 (default, Oct 14 2015, 20:33:09)  -- [GCC 4.8.4]
gw0 [1]

scheduling tests via LoadScheduling

some/tests/beta/service/mymodulewithsuits.py::SomeSanitySuite::check_correct_values_case 
[gw0] PASSED some/tests/beta/service/mymodulewithsuits.py::SomeSanitySuite::check_correct_values_case 
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/main.py", line 90, in wrap_session
INTERNALERROR>     session.exitstatus = doit(config, session) or 0
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/main.py", line 121, in _main
INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py", line 724, in __call__
INTERNALERROR>     return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py", line 338, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py", line 333, in <lambda>
INTERNALERROR>     _MultiCall(methods, kwargs, hook.spec_opts).execute()
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py", line 596, in execute
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/xdist/dsession.py", line 536, in pytest_runtestloop
INTERNALERROR>     self.loop_once()
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/xdist/dsession.py", line 554, in loop_once
INTERNALERROR>     call(**kwargs)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/xdist/dsession.py", line 663, in slave_testreport
INTERNALERROR>     self.config.hook.pytest_runtest_logreport(report=rep)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py", line 724, in __call__
INTERNALERROR>     return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py", line 338, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py", line 333, in <lambda>
INTERNALERROR>     _MultiCall(methods, kwargs, hook.spec_opts).execute()
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py", line 596, in execute
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/allure/pytest_plugin.py", line 501, in pytest_runtest_logreport
INTERNALERROR>     for a in testcase.iter_attachments():
INTERNALERROR>   File "/home/alexander-momot/Code/pytest-selenium-pgu/env/lib/python3.4/site-packages/allure/structure.py", line 38, in iter_attachments
INTERNALERROR>     for a in self.attachments:
INTERNALERROR> TypeError: 'NoneType' object is not iterable

My configuration is : venv with python 3.4.3 installed, latest version of the pytest and allure. Ubuntu 14.04 x86. Requirements installed:

apipkg==1.4
enum34==1.1.2
execnet==1.4.1
lxml==3.5.0
namedlist==1.7
Pillow==3.1.1
psutil==4.0.0
py==1.4.31
pytest==2.8.7
pytest-allure-adaptor==1.7.1
pytest-variables==1.3
pytest-xdist==1.14
pytractor==0.2.1
requests==2.9.1
selenium==2.52.0
six==1.10.0
TestLink-API-Python-client==0.6.2
wheel==0.29.0

pytest.ini contents:

[pytest]
minversion = 2.8.7
norecursedirs = env _build tmp*
testpaths = some/tests
python_files = *.py
python_classes = *Suite*
python_functions = *case*
#log_format = %(asctime)s %(levelname)s %(message)s
#log_date_format = %Y-%m-%d %H:%M:%S
addopts = --result-log=text-reports/report.log --junit-prefix=pref --junitxml=xml-reports/report.xml --capture=sys --strict --cache-clear --alluredir=html-reports
#sensitive_url = http://example.com
#base_url = http://example.com/
#selenium_capture_debug = always
#testlink_ini_file = testlink.ini

Enter point script is:

/home/alexander-momot/Code/pytest-selenium-pgu/pytest-runner.py

Running as:

some/tests/beta/service/case.py --base-url=http://example.com --tb=short --durations=20 --maxfail=20 -v -l --assert=reinterp -n 1

video attachment

Hi,

Is it possible to attach .mp4 video to allure?

Trying this way, but it doesn't work?

allure.attach('Video attach', open("path to video").read())

Any ideas?

Создание кастомных тегов

Думается, можно привязаться к существующему декоратору py.test'а @pytest.mark.mark_name для расширения выводимой в репорте информации

Unable to run tests

pytest version installed is 2.6, but test is reporting as version conflict.

if require: self.require(env, installer)

File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2100, in require
working_set.resolve(self.dist.requires(self.extras),env,installer)))
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 632, in resolve
raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (py 1.4.20 (/usr/lib/python2.7/dist-packages), Requirement.parse('py>=1.4.22'))
raghu@raghu-VirtualBox:~/PycharmProjects/securehomegateway-automation$ pip list | grep pytest
The directory '/home/raghu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
You are using pip version 7.0.3, however version 7.1.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
pytest (2.6.1)
pytest-sugar (0.4.0)
pytest-xdist (1.12)

Is it possible to rename test cases names?

I set item name in conftest.py:

def pytest_runtest_setup(item):
    item.name = '%custom_name%'
    print item.name # changed

but in xml it stays with old names:

test_name[data0]
test_name[data1]

Can i somehow rename testcase name?

cant install package using Python34

Collecting pytest-allure-adaptor
  Downloading pytest-allure-adaptor-1.6.2.tar.gz
    Traceback (most recent call last):
      File "<string>", line 20, in <module>
      File "C:\Users\N2FD7~1.GOS\AppData\Local\Temp\pip-build-8o9bhxjx\pytest-al
lure-adaptor\setup.py", line 33, in <module>
        main()
      File "C:\Users\N2FD7~1.GOS\AppData\Local\Temp\pip-build-8o9bhxjx\pytest-al
lure-adaptor\setup.py", line 22, in main
        long_description=read('README.rst'),
      File "C:\Users\N2FD7~1.GOS\AppData\Local\Temp\pip-build-8o9bhxjx\pytest-al
lure-adaptor\setup.py", line 10, in read
        return open(os.path.join(os.path.dirname(__file__), fname)).read()
      File "C:\Python34\lib\encodings\cp1252.py", line 23, in decode
        return codecs.charmap_decode(input,self.errors,decoding_table)[0]
    UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 5457:
 character maps to <undefined>
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

      File "<string>", line 20, in <module>

      File "C:\Users\N2FD7~1.GOS\AppData\Local\Temp\pip-build-8o9bhxjx\pytest-al
lure-adaptor\setup.py", line 33, in <module>

        main()

      File "C:\Users\N2FD7~1.GOS\AppData\Local\Temp\pip-build-8o9bhxjx\pytest-al
lure-adaptor\setup.py", line 22, in main

        long_description=read('README.rst'),

      File "C:\Users\N2FD7~1.GOS\AppData\Local\Temp\pip-build-8o9bhxjx\pytest-al
lure-adaptor\setup.py", line 10, in read

        return open(os.path.join(os.path.dirname(__file__), fname)).read()

      File "C:\Python34\lib\encodings\cp1252.py", line 23, in decode

        return codecs.charmap_decode(input,self.errors,decoding_table)[0]

    UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 5457:
 character maps to <undefined>

    ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in C:\Users\N2FD
7~1.GOS\AppData\Local\Temp\pip-build-8o9bhxjx\pytest-allure-adaptor

Nosetests support

Would be nice to support nose too.
Any plans or suggestions what can be reused from this repo?

Динамическое создание @allure.testcase

Возможно ли, по аналогии с @allure.step, динамически передавать значение в @allure.testcase?
Например в параметризированном тесте, который генерирует несколько тестов.

allure assert decorator

Неплохо было бы иметь, что-то подобное:

with assert_step(expected, result):
    self.assertEqual(expected, result, "values aren't equal")

=>
allure message "Checking that expected is equal result"

seeing some os.error too many files.. any known issue here ?

INTERNALERROR> File "/python3.4/site-packages/pytest_allure_adaptor-1.7.6-py3.4.egg/allure/pytest_plugin.py", line 546, in pytest_runtest_logreport
INTERNALERROR> File "/python3.4/site-packages/pytest_allure_adaptor-1.7.6-py3.4.egg/allure/pytest_plugin.py", line 534, in write_attach
INTERNALERROR> File "python3.4/site-packages/pytest_allure_adaptor-1.7.6-py3.4.egg/allure/common.py", line 209, in _save_attach
INTERNALERROR> File "/python3.4/contextlib.py", line 59, in enter
INTERNALERROR> File "lib/python3.4/site-packages/pytest_allure_adaptor-1.7.6-py3.4.egg/allure/common.py", line 223, in _attachfile
NTERNALERROR> OSError: [Errno 24] Too many open files: '/archive/test_20170419-171434/allure/8455948b-6351-4333-b2f9-dc5462e3d0b5-attachment.txt'

How to make allure plugin dependent on another plugin?

Say, I have my own custom email reporting plugin that allure is dependent upon. How do I specify this dependency in allure? Somewhere in setup.py? If yes, like just putting the custom plugin name in "install_requires" list?
Any help is appreciated.

Cannot set description-type in pytest

When generating a report, pytest-allure-adaptor returns the following XML file.

<test-cases>
    <test-case start="1459432344326" status="passed" stop="1459432471926">
      <name>My first test</name>
      <description>This is the description</description>
....

I noticed there's no description-type, and from the documentation, I couldn't find a way to add markdown to my descriptions. I've talked with @baev and he suggested I open an issue. Having this feature would be great for our group.

Thank you :)

version 1.5.3: ImportError (python 2.7)

Hi,

I'm getting import error with new version of allure-python:

  File "/usr/local/lib/python2.7/dist-packages/allure/utils.py", line 11, in <module>
    from six import text_type, binary_type, python_2_unicode_compatible, u
ImportError: cannot import name python_2_unicode_compatible

Six 1.9.0 with python 2.7 is installed.

Version 1.5.2 is working.

Regards,

Проблема совместимости с pytes-xdist

Замечательный незаменимый плагин, который параллелит тесты, отказывается работать вместе с --alluredir [path_to_dir]. Эксепшн валится после завершения первого теста

platform linux2 -- Python 2.7.3 -- py-1.4.20 -- pytest-2.5.2
plugins: allure-adaptor, rerunfailures, xdist, timeout
gw0 [4] / gw1 [4] / gw2 [4] / gw3 [4]
scheduling tests via LoadScheduling
.INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/_pytest/main.py", line 81, in wrap_session
INTERNALERROR>     doit(config, session)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/_pytest/main.py", line 118, in _main
INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/_pytest/core.py", line 377, in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/_pytest/core.py", line 388, in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/_pytest/core.py", line 289, in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/xdist/dsession.py", line 242, in pytest_runtestloop
INTERNALERROR>     self.loop_once()
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/xdist/dsession.py", line 260, in loop_once
INTERNALERROR>     call(**kwargs)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/xdist/dsession.py", line 325, in slave_testreport
INTERNALERROR>     self.config.hook.pytest_runtest_logreport(report=rep)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/_pytest/core.py", line 377, in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/_pytest/core.py", line 388, in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/_pytest/core.py", line 289, in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/pytest_allure_adaptor-1.3.1-py2.7.egg/allure/pytest_plugin.py", line 231, in pytest_runtest_logreport
INTERNALERROR>     self._stop_case(report, status=Status.PASSED)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/pytest_allure_adaptor-1.3.1-py2.7.egg/allure/pytest_plugin.py", line 206, in _stop_case
INTERNALERROR>     self.impl.stop_case(status)
INTERNALERROR>   File "/usr/local/lib/python2.7/dist-packages/pytest_allure_adaptor-1.3.1-py2.7.egg/allure/common.py", line 115, in stop_case
INTERNALERROR>     test = self.stack[-1]
INTERNALERROR> IndexError: list index out of range

stories duplication on different features

I have base mixin class for testing unique id inside the document

class UniqueIDTestCaseMixin(object):
    """
    test unique id mixin
    """
    @allure.story("check unique id")
    @allure.severity(Severity.BLOCKER)
    def test_unique_id(self):
        # some checks are below

I apply this mixin agains base TestCases classes:

@allure.feature("Actions.xml")
class ActionsTest(UniqueIDTestCaseMixin, TestCase):
    pass
@allure.feature("BankItems.xml")
class TestBankItems(UniqueIDTestCaseMixin, TestCase)):
    pass

1
2
3

Here i get in xml files

<ns0:test-suite xmlns:ns0="urn:model.allure.qatools.yandex.ru" start="1412943507547" stop="1412943507658">
  <name>tests.bank_items</name>
  <test-cases>
    <test-case start="1412943507547" status="passed" stop="1412943507569">
      <name>TestBankItems.test_count</name>
      <description> count field should be positive </description>
      <attachments>
        <attachment source="e5b219b9-7440-4f65-b298-45f7b5cd2a40-attachment.txt" title="Captured stderr setup" type="text/plain"/>
      </attachments>
      <labels>
        <label name="story" value="items count"/>
        <label name="severity" value="trivial"/>
        <label name="feature" value="BankItems.xml"/>
      </labels>
      <steps/>
    </test-case>
    <test-case start="1412943507569" status="passed" stop="1412943507593">
      <name>TestBankItems.test_size_color_fields</name>
      <attachments>
        <attachment source="84cfc3d3-5163-4f13-ade3-2ffd3076681b-attachment.txt" title="Captured stderr setup" type="text/plain"/>
      </attachments>
      <labels>
        <label name="story" value="check color layers size (0-&gt;255)"/>
        <label name="severity" value="blocker"/>
        <label name="feature" value="BankItems.xml"/>
      </labels>
      <steps/>
    </test-case>
    <test-case start="1412943507593" status="passed" stop="1412943507618">
      <name>TestBankItems.test_type_color_fields</name>
      <description>
        test sane color fields
        </description>
      <attachments>
        <attachment source="478bf7eb-5caf-48ca-ad0b-c2aabdb2bdf7-attachment.txt" title="Captured stderr setup" type="text/plain"/>
      </attachments>
      <labels>
        <label name="story" value="check color fields"/>
        <label name="severity" value="blocker"/>
        <label name="feature" value="BankItems.xml"/>
      </labels>
      <steps/>
    </test-case>
    <test-case start="1412943507618" status="passed" stop="1412943507640">
      <name>TestBankItems.test_unique_id</name>
      <attachments>
        <attachment source="0bad8c6b-4b66-4dd6-93a1-d6c136dcda9a-attachment.txt" title="Captured stderr setup" type="text/plain"/>
      </attachments>
      <labels>
        <label name="story" value="check unique id"/>
        <label name="severity" value="blocker"/>
        <label name="feature" value="Actions.xml"/>
        <label name="feature" value="BankItems.xml"/>
      </labels>
      <steps/>
    </test-case>
    <test-case start="1412943507640" status="passed" stop="1412943507658">
      <name>TestBankItems.test_unique_together</name>
      <attachments>
        <attachment source="3245235a-de3f-4fb1-85ae-65a29ca098b8-attachment.txt" title="Captured stderr setup" type="text/plain"/>
      </attachments>
      <labels>
        <label name="story" value="check unique together id (if exists)"/>
        <label name="severity" value="blocker"/>
        <label name="feature" value="Actions.xml"/>
        <label name="feature" value="BankItems.xml"/>
      </labels>
      <steps/>
    </test-case>
  </test-cases>
  <labels/>
</ns0:test-suite>

Cannot set Features and Stories in unicode

@pytest.allure.feature('заказ')
@pytest.allure.story('Создание заказа')

platform linux2 -- Python 2.7.6 -- py-1.4.25 -- pytest-2.6.3
plugins: allure-adaptor, xdist, bdd
collected 1 items

tests/site_tests/tests/test_tms_599.py F
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 84, in wrap_session
INTERNALERROR>     doit(config, session)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 122, in _main
INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 142, in pytest_runtestloop
INTERNALERROR>     item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/pytest_plugin.py", line 285, in pytest_runtest_protocol
INTERNALERROR>     self.impl.stop_suite()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/common.py", line 180, in stop_suite
INTERNALERROR>     self._write_suite(f, self.testsuite)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/common.py", line 221, in _write_suite
INTERNALERROR>     logfile.write(etree.tostring(suite.toxml(), pretty_print=True, xml_declaration=False, encoding=unicode))
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 113, in toxml
INTERNALERROR>     manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], [])
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
INTERNALERROR>     entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 99, in value
INTERNALERROR>     return el(*[self.rule.value(name, x) for x in what])
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 87, in value
INTERNALERROR>     return what.toxml()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 113, in toxml
INTERNALERROR>     manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], [])
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
INTERNALERROR>     entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 99, in value
INTERNALERROR>     return el(*[self.rule.value(name, x) for x in what])
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 87, in value
INTERNALERROR>     return what.toxml()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 116, in toxml
INTERNALERROR>     **{name: attr for (name, attr) in attributes})
INTERNALERROR>   File "lxml.objectify.pyx", line 1129, in lxml.objectify._ObjectifyElementMakerCaller.__call__ (src/lxml/lxml.objectify.c:16479)
INTERNALERROR>   File "lxml.objectify.pyx", line 1778, in lxml.objectify._makeElement (src/lxml/lxml.objectify.c:23128)
INTERNALERROR>   File "public-api.pxi", line 27, in lxml.etree.makeElement (src/lxml/lxml.etree.c:177888)
INTERNALERROR>   File "apihelpers.pxi", line 140, in lxml.etree._makeElement (src/lxml/lxml.etree.c:15242)
INTERNALERROR>   File "apihelpers.pxi", line 128, in lxml.etree._makeElement (src/lxml/lxml.etree.c:15125)
INTERNALERROR>   File "apihelpers.pxi", line 287, in lxml.etree._initNodeAttributes (src/lxml/lxml.etree.c:17030)
INTERNALERROR>   File "apihelpers.pxi", line 297, in lxml.etree._addAttributeToNode (src/lxml/lxml.etree.c:17210)
INTERNALERROR>   File "apihelpers.pxi", line 1393, in lxml.etree._utf8 (src/lxml/lxml.etree.c:27171)
INTERNALERROR> ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
Traceback (most recent call last):
  File "/home/aohontsev/Projects/autotests-framework/autotest_framework.py", line 8, in <module>
    raise SystemExit(autotest_framework.main())
  File "/home/aohontsev/Projects/autotests-framework/modules/main.py", line 63, in main
    start_tests(args.tests_path)
  File "/home/aohontsev/Projects/autotests-framework/modules/start.py", line 23, in start_tests
    pytest.main(args=args)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/config.py", line 41, in main
    return config.hook.pytest_cmdline_main(config=config)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
    return self._docall(methods, kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
    res = mc.execute()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
    res = method(**kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 116, in pytest_cmdline_main
    return wrap_session(config, _main)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 109, in wrap_session
    exitstatus=session.exitstatus)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
    return self._docall(methods, kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
    res = mc.execute()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
    res = method(**kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/terminal.py", line 349, in pytest_sessionfinish
    __multicall__.execute()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
    res = method(**kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/pytest_plugin.py", line 315, in pytest_sessionfinish
    self.impl.stop_suite()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/common.py", line 180, in stop_suite
    self._write_suite(f, self.testsuite)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/common.py", line 221, in _write_suite
    logfile.write(etree.tostring(suite.toxml(), pretty_print=True, xml_declaration=False, encoding=unicode))
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 113, in toxml
    manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], [])
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
    entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 99, in value
    return el(*[self.rule.value(name, x) for x in what])
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 87, in value
    return what.toxml()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 113, in toxml
    manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], [])
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
    entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 99, in value
    return el(*[self.rule.value(name, x) for x in what])
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 87, in value
    return what.toxml()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 116, in toxml
    **{name: attr for (name, attr) in attributes})
  File "lxml.objectify.pyx", line 1129, in lxml.objectify._ObjectifyElementMakerCaller.__call__ (src/lxml/lxml.objectify.c:16479)
  File "lxml.objectify.pyx", line 1778, in lxml.objectify._makeElement (src/lxml/lxml.objectify.c:23128)
  File "public-api.pxi", line 27, in lxml.etree.makeElement (src/lxml/lxml.etree.c:177888)
  File "apihelpers.pxi", line 140, in lxml.etree._makeElement (src/lxml/lxml.etree.c:15242)
  File "apihelpers.pxi", line 128, in lxml.etree._makeElement (src/lxml/lxml.etree.c:15125)
  File "apihelpers.pxi", line 287, in lxml.etree._initNodeAttributes (src/lxml/lxml.etree.c:17030)
  File "apihelpers.pxi", line 297, in lxml.etree._addAttributeToNode (src/lxml/lxml.etree.c:17210)
  File "apihelpers.pxi", line 1393, in lxml.etree._utf8 (src/lxml/lxml.etree.c:27171)
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/__init__.py", line 872, in emit
    stream.write(fs % msg)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/capture.py", line 234, in write
    self.buffer.write(obj)
ValueError: I/O operation on closed file
Logged from file ssh.py, line 95
Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/__init__.py", line 872, in emit
    stream.write(fs % msg)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/capture.py", line 234, in write
    self.buffer.write(obj)
ValueError: I/O operation on closed file
Logged from file database.py, line 87

Process finished with exit code 1

and another case
@pytest.allure.feature(u'заказ')
@pytest.allure.story(u'Создание заказа')

platform linux2 -- Python 2.7.6 -- py-1.4.25 -- pytest-2.6.3
plugins: allure-adaptor, xdist, bdd
collected 1 items

tests/site_tests/tests/test_tms_599.py F
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 84, in wrap_session
INTERNALERROR>     doit(config, session)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 122, in _main
INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 142, in pytest_runtestloop
INTERNALERROR>     item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/pytest_plugin.py", line 285, in pytest_runtest_protocol
INTERNALERROR>     self.impl.stop_suite()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/common.py", line 180, in stop_suite
INTERNALERROR>     self._write_suite(f, self.testsuite)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/common.py", line 221, in _write_suite
INTERNALERROR>     logfile.write(etree.tostring(suite.toxml(), pretty_print=True, xml_declaration=False, encoding=unicode))
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 113, in toxml
INTERNALERROR>     manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], [])
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
INTERNALERROR>     entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 99, in value
INTERNALERROR>     return el(*[self.rule.value(name, x) for x in what])
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 87, in value
INTERNALERROR>     return what.toxml()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 113, in toxml
INTERNALERROR>     manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], [])
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
INTERNALERROR>     entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 99, in value
INTERNALERROR>     return el(*[self.rule.value(name, x) for x in what])
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 87, in value
INTERNALERROR>     return what.toxml()
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 111, in toxml
INTERNALERROR>     attributes = entries(Attribute)
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
INTERNALERROR>     entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
INTERNALERROR>   File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 82, in value
INTERNALERROR>     return str(what)
INTERNALERROR> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)
Traceback (most recent call last):
  File "/home/aohontsev/Projects/autotests-framework/autotest_framework.py", line 8, in <module>
    raise SystemExit(autotest_framework.main())
  File "/home/aohontsev/Projects/autotests-framework/modules/main.py", line 63, in main
    start_tests(args.tests_path)
  File "/home/aohontsev/Projects/autotests-framework/modules/start.py", line 23, in start_tests
    pytest.main(args=args)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/config.py", line 41, in main
    return config.hook.pytest_cmdline_main(config=config)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
    return self._docall(methods, kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
    res = mc.execute()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
    res = method(**kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 116, in pytest_cmdline_main
    return wrap_session(config, _main)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/main.py", line 109, in wrap_session
    exitstatus=session.exitstatus)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 413, in __call__
    return self._docall(methods, kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 424, in _docall
    res = mc.execute()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
    res = method(**kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/terminal.py", line 349, in pytest_sessionfinish
    __multicall__.execute()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/core.py", line 315, in execute
    res = method(**kwargs)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/pytest_plugin.py", line 315, in pytest_sessionfinish
    self.impl.stop_suite()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/common.py", line 180, in stop_suite
    self._write_suite(f, self.testsuite)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/common.py", line 221, in _write_suite
    logfile.write(etree.tostring(suite.toxml(), pretty_print=True, xml_declaration=False, encoding=unicode))
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 113, in toxml
    manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], [])
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
    entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 99, in value
    return el(*[self.rule.value(name, x) for x in what])
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 87, in value
    return what.toxml()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 113, in toxml
    manys = sum([[(m[0], v) for v in m[1]] for m in entries(Many)], [])
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
    entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 99, in value
    return el(*[self.rule.value(name, x) for x in what])
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 87, in value
    return what.toxml()
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 111, in toxml
    attributes = entries(Attribute)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 108, in <lambda>
    entries = lambda clazz: [(name, rule.value(name, getattr(self, name))) for (name, rule) in items if isinstance(rule, clazz) and rule.check(getattr(self, name))]
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/allure/rules.py", line 82, in value
    return str(what)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)
Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/__init__.py", line 872, in emit
    stream.write(fs % msg)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/capture.py", line 234, in write
    self.buffer.write(obj)
ValueError: I/O operation on closed file
Logged from file ssh.py, line 95
Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/__init__.py", line 872, in emit
    stream.write(fs % msg)
  File "/home/aohontsev/autotest-framework/local/lib/python2.7/site-packages/_pytest/capture.py", line 234, in write
    self.buffer.write(obj)
ValueError: I/O operation on closed file
Logged from file database.py, line 87

Process finished with exit code 1

Allure doesn't make a screenshot on a mobile device during the autotests with pyTest uiAutomator on Android

When I run autotests with pytest+Selenium WebDriver+allure - allure makes screenshots,
but I run autotests with pyTest_uiAutomator+allure on mobile device Android - I get error when want to look png.file with screenshots.

My testcode:

@allure.feature('Autorization to  ...')
@allure.story('Autorization to ...')
    def test_autorization(self):
        ...
        time.sleep(4)
        d.press.home()
        ...
        #Make photo of start page
        allure.attach('my attach','Screen_start_page', allure.attach_type.PNG)

after that a have during open png file::
"Fatal error reading PNG image file: Not a PNG file"

Q: Compatible with pytest-bdd?

Hi. I'm learning Python and would like to write a test suite using pytest-bdd that reports with Allure. Is there any reason to think pytest-bdd would not be compatible with allure-python?

https://pypi.python.org/pypi/pytest-bdd

https://github.com/pytest-dev/pytest-bdd

http://developer.paylogic.com/articles/how-we-use-pytest-and-pytest-bdd-in-paylogic.html

I'm particularly interested in reporting Jmeter-like statistics from this test suite. Here are some stats I'm looking to generate: http://www.quora.com/How-do-we-analyze-reports-in-JMeter/answers/9712920

Thanks!

@Attachment for video having .webm is not attaching to the allure report in Ubuntu

I have written a script that will attach the video after every test. The Video is getting attached in Windows, it is not attaching in Ubuntu.

Ubuntu server.

I am attaching it as a byte array.

@attachment(value = "Video of {0}",type="video/webm")
public byte[] attachVideo(String testCaseName,String path) throws Exception {
return getFile(path);
}

public byte[] getFile(String path) throws Exception {
	return Files.readAllBytes(Paths.get(path));
}

Allure testng adaptor : 1.5.2
I am using testng as my unit testing framework. I am overriding the run method and I am attaching.

Again, works fine in Windows.

Let me know if there is an issue, or do I have to change anything else for Ubuntu server.

Regards,
Hemanth Sridhar

Dumperror: can't serialize <class 'allure.utils.LabelsList'>, errors in pytest

i can even exclude anything regarding allure from my test (just have allure allure-adapter https://pypi.python.org/pypi/pytest-allure-adaptor installed).

import pytest
from selenium import webdriver
from multiprocessing.dummy import Pool as ThreadPool

urls = [...]

@pytest.mark.parametrize("url", urls)
def test_noindex(url):
    assert url is not None

py.test -n [anything there] test_it.py will give following error:

============================= test session starts =============================
platform win32 -- Python 2.7.8 -- py-1.4.24 -- pytest-2.6.2
plugins: allure-adaptor, xdist
gw0 C / gw1 IINTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "C:\Python27\lib\site-packages\_pytest\main.py", line 82,
in wrap_session
INTERNALERROR>     config.hook.pytest_sessionstart(session=session)
INTERNALERROR>   File "C:\Python27\lib\site-packages\_pytest\core.py", line 413,
 in __call__
INTERNALERROR>     return self._docall(methods, kwargs)
INTERNALERROR>   File "C:\Python27\lib\site-packages\_pytest\core.py", line 424,
 in _docall
INTERNALERROR>     res = mc.execute()
INTERNALERROR>   File "C:\Python27\lib\site-packages\_pytest\core.py", line 315,
 in execute
INTERNALERROR>     res = method(**kwargs)
INTERNALERROR>   File "C:\Python27\lib\site-packages\xdist\dsession.py", line 48
0, in pytest_sessionstart
INTERNALERROR>     nodes = self.nodemanager.setup_nodes(putevent=self.queue.put)

INTERNALERROR>   File "C:\Python27\lib\site-packages\xdist\slavemanage.py", line
 45, in setup_nodes
INTERNALERROR>     nodes.append(self.setup_node(spec, putevent))
INTERNALERROR>   File "C:\Python27\lib\site-packages\xdist\slavemanage.py", line
 54, in setup_node
INTERNALERROR>     node.setup()
INTERNALERROR>   File "C:\Python27\lib\site-packages\xdist\slavemanage.py", line
 223, in setup
INTERNALERROR>     self.channel.send((self.slaveinput, args, option_dict))
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 681, in send
INTERNALERROR>     self.gateway._send(Message.CHANNEL_DATA, self.id, dumps_inter
nal(item))
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 1285, in dumps_internal
INTERNALERROR>     return _Serializer().save(obj)
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 1303, in save
INTERNALERROR>     self._save(obj)
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 1321, in _save
INTERNALERROR>     dispatch(self, obj)
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 1402, in save_tuple
INTERNALERROR>     self._save(item)
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 1321, in _save
INTERNALERROR>     dispatch(self, obj)
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 1398, in save_dict
INTERNALERROR>     self._write_setitem(key, value)
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 1392, in _write_setitem
INTERNALERROR>     self._save(value)
INTERNALERROR>   File "C:\Python27\lib\site-packages\execnet\gateway_base.py", l
ine 1319, in _save
INTERNALERROR>     raise DumpError("can't serialize %s" % (tp,))
INTERNALERROR> DumpError: can't serialize <class 'allure.utils.LabelsList'>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.