current position:Home>[pytest: Python unit test tool learning]

[pytest: Python unit test tool learning]

2022-02-02 15:15:35 Overflow tears

  • Because it's a course assignment , So it's all English , Vocabulary is not very difficult .

Brief Introduction to Pytest

  • Pytest is a very mature and full-featured Python testing framework. It is simple, flexible and easy to use.
    It supports simple unit testing and complex function testing, and can also cooperate with third-party plug-ins for automatic testing.
    There are many third-party plug-ins that can be customized and extended.
    We can see more details in the official documents of pytest:
    https://www.osgeo.cn/pytest/contents.html

Installation

  • In CMD, enter the following command to install pytest:
    pip install -U pytest
    We can check the installed version of pytest by entering the following command. My running results are as follows:
     Insert picture description here

A Simple Testing

  • Firstly write a simple two functions, the second functions is for testing the first function.
     Insert picture description here
    Then, in the cmd or console (because I use Visual Studio Code, I will run in console), run pytest command to see whether the assert runs well.
     Insert picture description here
    Cause 1 not equal to 2, so assert(False) turns the FAILURES, gives us AssertionError.
    Change the line5, and rerun the pytest, then will pass the test.
     Insert picture description here
     Insert picture description here

Testing Whether Throws an Exception

  • We could use pytest.raises(Exception) to check whether this Exception is raised.
     Insert picture description here
    As we expected, the test_1() passed and test_2() failed because it didn’t raise the ‘SystemExit’ Exception.
     Insert picture description here

Test Classes

  • If we have several tests, we could class them together, but we need to add prefix ‘Test’ for class name , or we will skip test the class.
     Insert picture description here
     Insert picture description here
    It’s beneficial for us to make several relevant tests into one class.

Some Basic API For Pytest

  • According to the official document, I will introduce several important API here.
  1. Fail(msg,pytrace) -> NoReturn
     Insert picture description here
    It means if we use ‘pytest.fail(mes)’ , it will show the error message.
    If we let second argument be false, then the trace will not show the fail message.
     Insert picture description here
     Insert picture description here
    See, Only test_1 shows the trace, but test_2 only shows ‘Special Error2’
  2. Pytest.raises
    It declares that the code blocks will raise expected exception. Otherwise, it will cause fail exception.
    It could use like I mentioned above:
     Insert picture description here
    Also, could detect the defined exception, for example, ValueError
     Insert picture description here
  3. Pytest.approx
    Some times, we want to compare two float numbers whether they are equal, we may write in the form of ‘0.1 + 0.2 == 0.3’. However, this may be wrong due to the storage way of floating numbers.
    So, we may write ‘abs((0.1 + 0.2) - 0.3) < 1e-6’. However, it’s more complicated for us to understand. And, 1e-6 seems good for number 1, but bad for number 1e18.
    So , we use approx so that it’s better to check the equality of two numbers, or even list and etc.
     Insert picture description here
     Insert picture description here

Conclusion About Pytest

  • Pytest has many advantages:
  1. Automatically find test functions and cases.
  2. Convenient declarations to match exceptions.
  3. Run testing cases, modules, and classes smoothly.
  4. Various pluggable units are available.
  5. Compatible with unnitest or nose.

For testing part, it will show all the traces so that we could know which testing cases are not pass, as well as their exceptions.

References

  1. Pytest Official documents :https://www.osgeo.cn/pytest/contents.html

copyright notice
author[Overflow tears],Please bring the original link to reprint, thank you.
https://en.pythonmana.com/2022/02/202202021515336094.html

Random recommended