[Avocado-devel] subclassing avocado

Lukáš Doktor ldoktor at redhat.com
Tue Nov 6 19:16:18 UTC 2018


Dne 06. 11. 18 v 18:24 Brian J. Murrell napsal(a):
> On Tue, 2018-11-06 at 17:20 +0100, Lukáš Doktor wrote:
>>
>> The ":avocado: recursive" is used for test discovery. The main
>> difference is that for test discovery we don't load the modules.
>> Instead we use static analysis (using `ast`) to detect whether
>> certain file is python and contains something inherited from
>> `avocado.Test`.
> 
> Ahhh.
> 
> So that might be related to the issue I'm having:
> 
> util/apricot/apricot/__init__.py:
> ```
> __all__ = ['ApricotTest']
> 
> from apricot.test import ApricotTest
> ```
> 
> util/apricot/apricot/test.py:
> ```from avocado import Test
> 
> class ApricotTest(Test):
>     def setUp(self):
>         self.log.info("setUp() executed from Apricot")
> 
>     def some_useful_method(self):
>         return True
> 
> ```
> 
> avocado detects that:
> 
> util/apricot/test_example.py
> ```
> #!/usr/bin/python
> 
> '''
> bla bla bla
> '''
> 
> import sys
> sys.path.append('./')
> 
> from apricot import ApricotTest
> 
> class MyTest(ApricotTest):
>     """
>     :avocado: recursive
>     """
>     def setUp(self):
>         super(MyTest, self).setUp()
>         self.log.info("setUp() executed from test_example.py")
> 
>     def test(self):
>         """
>         :avocado: tags=all
>         """
> 
>         print "test()"
>         self.assertTrue(self.some_useful_method())
> ```
> 
> is an instrumented avocado test and produces:
> 
> ```
> 2018-11-06 12:16:34,560 test             L0240 INFO | START 1-util/apricot/test_example.py:MyTest.test
> 2018-11-06 12:16:34,695 test             L0005 INFO | setUp() executed from Apricot
> 2018-11-06 12:16:34,695 test_example     L0018 INFO | setUp() executed from test_example.py
> 2018-11-06 12:16:34,695 output           L0655 DEBUG| test()
> ```
> 
> However when much the same file is in a different location outside of
> the apricot/ dir:
> ./test_example.py
> ```
> #!/usr/bin/python
> 
> '''
> bla bla bla
> '''
> 
> import sys
> sys.path.append('./util/apricot')
> 
> from apricot import ApricotTest
> 
> class MyTest(ApricotTest):
>     """
>     :avocado: recursive
>     """
>     def setUp(self):
>         super(MyTest, self).setUp()
>         self.log.info("setUp() executed from test_example.py")
> 
>     def test(self):
>         """
>         :avocado: tags=all
>         """
> 
>         print "test()"
>         self.assertTrue(self.some_useful_method())
> ```
> 
> is not detected as an instrumented test and it runs it as a simple
> test:
> 
> ```
> 2018-11-06 12:22:51,764 test             L0240 INFO | START 1-test_example.py
> 2018-11-06 12:22:51,898 process          L0389 INFO | Running '/home/brian/test_example.py'
> 2018-11-06 12:22:52,275 process          L0499 INFO | Command '/home/brian/test_example.py' finished with 0 after 0.372878074646s
> 2018-11-06 12:22:52,276 test             L0858 INFO | Exit status: 0
> ```
> 
> Why is the latter not being detected as an instrumented avocado test?
> 

Yes, this is related to the fact that the code is not being executed, but only analyzed on discovery. You could save yourself a lot of trouble by simply deploying your subclass properly (using "python setup.py develop --user" for development and "python setup.py install --user" for actual deployment). Anyway to workaround this issue you can always set PYTHONPATH directly on cmdline:

```
PYTHONPATH=./util/apricot avocado --show all run test_example.py
...
avocado.test: START 1-test_example.py:MyTest.test
 (1/1) test_example.py:MyTest.test:  avocado.test: setUp() executed from Apricot
avocado.test: setUp() executed from test_example.py
avocado.test: test()
paramiko: test()
avocado.test: PASS 1-test_example.py:MyTest.test
avocado.test: 
PASS (0.02 s)
avocado.test: Test results available in /home/medic/avocado/job-results/job-2018-11-06T20.15-07ef7c1
...
```

Regards,
Lukáš

> Cheers,
> b.
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/avocado-devel/attachments/20181106/f6c93980/attachment.sig>


More information about the Avocado-devel mailing list