Hi Stephen,

On 23 November 2015 at 18:45, Simon Glass <s...@chromium.org> wrote:
> Hi Stephen,
>
> On 22 November 2015 at 10:30, Stephen Warren <swar...@wwwdotorg.org> wrote:
>> On 11/21/2015 09:49 AM, Simon Glass wrote:
>>> Hi Stephen,
>>>
>>> On 19 November 2015 at 12:09, Stephen Warren <swar...@wwwdotorg.org> wrote:
>>>>
>>>> On 11/19/2015 10:00 AM, Stephen Warren wrote:
>>>>>
>>>>> On 11/19/2015 07:45 AM, Simon Glass wrote:
>>>>>>
>>>>>> Hi Stephen,
>>>>>>
>>>>>> On 14 November 2015 at 23:53, Stephen Warren <swar...@wwwdotorg.org>
>>>>>> wrote:
>>>>>>>
>>>>>>> This tool aims to test U-Boot by executing U-Boot shell commands
>>>>>>> using the
>>>>>>> console interface. A single top-level script exists to execute or attach
>>>>>>> to the U-Boot console, run the entire script of tests against it, and
>>>>>>> summarize the results. Advantages of this approach are:
>>>>>>>
>>>>>>> - Testing is performed in the same way a user or script would interact
>>>>>>>    with U-Boot; there can be no disconnect.
>>>>>>> - There is no need to write or embed test-related code into U-Boot
>>>>>>> itself.
>>>>>>>    It is asserted that writing test-related code in Python is simpler
>>>>>>> and
>>>>>>>    more flexible that writing it all in C.
>>>>>>> - It is reasonably simple to interact with U-Boot in this way.
>>>>>>>
>>>>>>> A few simple tests are provided as examples. Soon, we should convert as
>>>>>>> many as possible of the other tests in test/* and test/cmd_ut.c too.
>>>>>>
>>>>>>
>>>>>> It's great to see this and thank you for putting in the effort!
>>>>>>
>>>>>> It looks like a good way of doing functional tests. I still see a role
>>>>>> for unit tests and things like test/dm. But if we can arrange to call
>>>>>> all U-Boot tests (unit and functional) from one 'test.py' command that
>>>>>> would be a win.
>>>>>>
>>>>>> I'll look more when I can get it to work - see below.
>>>>
>>>> ...
>>>>>
>>>>> made it print a message about checking the docs for missing
>>>>> requirements. I can probably patch the top-level test.py to do the same.
>>>>
>>>>
>>>> I've pushed such a patch to:
>>>>
>>>> git://github.com/swarren/u-boot.git tegra_dev
>>>> (the separate pytests branch has now been deleted)
>>>>
>>>> There are also a variety of other patches there related to this testing 
>>>> infra-structure. I guess I'll hold off sending them to the list until 
>>>> there's been some general feedback on the patches I've already posted, but 
>>>> feel free to pull the branch down and play with it. Note that it's likely 
>>>> to get rebased as I work.
>>>
>>> OK I got it working thank you. It is horribly slow though - do you
>>> know what is holding it up? For me to takes 12 seconds to run the
>>> (very basic) tests.
>>
>> It looks like pexpect includes a default delay to simulate human
>> interaction. If you edit test/py/uboot_console_base.py ensure_spawned()
>> and add the following somewhere soon after the assignment to self.p:
>>
>>             self.p.delaybeforesend = 0
>>
>> ... that will more than halve the execution time. (8.3 -> 3.5s on my
>> 5-year-old laptop).
>>
>> That said, even your 12s or my 8.3s doesn't seem like a bad price to pay
>> for some easy-to-use automated testing.
>
> Sure, but my reference is to the difference between a native C test
> and this framework. As we add more and more tests the overhead will be
> significant. If it takes 8 seconds to run the current (fairly trivial)
> tests, it might take a minute to run a larger suite, and to me that is
> too long (e.g. to bisect for a failing commit).
>
> I wonder what is causing the delay?
>
>>
>>> Also please see dm_test_usb_tree() which uses a console buffer to
>>> check command output.
>>
>> OK, I'll take a look.
>>
>>> I wonder if we should use something like that
>>> for simple unit tests, and use python for the more complicated
>>> functional tests?
>>
>> I'm not sure that's a good idea; it'd be best to settle on a single way
>> of executing tests so that (a) people don't have to run/implement
>> different kinds of tests in different ways (b) we can leverage test code
>> across as many tests as possible.
>>
>> (Well, doing unit tests and system level tests differently might be
>> necessary since one calls functions and the other uses the shell "user
>> interface", but having multiple ways of doing e.g. system tests doesn't
>> seem like a good idea.)
>
> As you found with some of the tests, it is convenient/necessary to be
> able to call U-Boot C functions in some tests. So I don't see this as
> a one-size-fits-all solution.
>
> I think it is perfectly reasonable for the python framework to run the
> existing C tests - there is no need to rewrite them in Python. Also
> for the driver model tests - we can just run the tests from some sort
> of python wrapper and get the best of both worlds, right?
>
> Please don't take this to indicate any lack of enthusiasm for what you
> are doing - it's a great development and I'm sure it will help a lot!
> We really need to unify all the tests so we can run them all in one
> step.
>
> I just think we should aim to have the automated tests run in a few
> seconds (let's say 5-10 at the outside). We need to make sure that the
> python framework will allow this even when running thousands of tests.

BTW I would like to see if buildman can run tests automatically on
each commit. It's been a long-term goal for a while.

Regards,
Simon
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to