Advertisement
fkudinov

Необхідний мінімум для написання Тестів на Пайтоні / Pytest Python

Nov 11th, 2023 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.48 KB | Source Code | 0 0
  1. # ---------------  check_password.py ------------------
  2.  
  3.  
  4.  
  5. def check_password(word: str) -> bool:
  6.     """
  7.    Перевірка паролю
  8.  
  9.    Довжина від 8 до 30 символів
  10.    Хоча б 1 велика буква
  11.    Хоча б 1 маленька буква
  12.    Хоча б 1 цифра
  13.    Хоча б 1 спец символ
  14.    """
  15.     if not isinstance(word, str):
  16.         raise TypeError
  17.  
  18.     # приберемо пробіли на початку і в кінці
  19.     word = word.strip(" ")
  20.  
  21.     no_space = " " not in word
  22.     valid_length = len(word) in range(8, 31)
  23.     has_upper = set("ABCDEFGHIJKLMNOPQRSTUVWXYZ").intersection(word)
  24.     has_lower = set("abcdefghijklmnopqrstuvwxyz").intersection(word)
  25.     has_digit = set("1234567890").intersection(word)
  26.     has_punctuation = set("?/.,<>:\"'-=`|~;'[]{})(_+!\\@#$%^&*").intersection(word)
  27.  
  28.     return all([no_space, valid_length, has_upper, has_lower, has_digit, has_punctuation])
  29.  
  30.  
  31. # -----------------------   tests/test_password.py     -------------------------
  32.  
  33. import string
  34.  
  35. import pytest
  36.  
  37. from check_password import check_password
  38.  
  39.  
  40. @pytest.mark.parametrize(["word", "expected"], [
  41.     ["SomePass123!@#", True],
  42.     ["So1!", False],
  43.     ["SomePass123!@#++++++++++++++++++++++++++++++++++++++++", False],
  44.     ["SomePass!@#", False],
  45.     ["somepass123!@#", False],
  46.     ["SOMEPASS123!@#", False],
  47.     ["SomePass123", False],
  48.     # граничні значення
  49.     ["Aa1!!!!", False],  # 7
  50.     ["Aa1!!!!!", True],  # 8
  51.     ["Aa1!!!!!" + "1" * 22, True],  # 30
  52.     ["Aa1!!!!!" + "1" * 23, False],  # 31
  53.     # пробіл в паролі
  54.     ["Some Pass123!@#", False],
  55.     [" " * 30 + "SomePass123!@#", True],
  56.     ["SomePass123!@#" + " " * 30, True],
  57. ])
  58. def test_password(word, expected):
  59.     assert check_password(word) is expected
  60.  
  61.  
  62. def test_type_error():
  63.     with pytest.raises(TypeError):
  64.         check_password(1234)
  65.  
  66.  
  67. @pytest.mark.parametrize("val", string.digits)
  68. def test_any_digit(val):
  69.     assert check_password("Aaaaaaaaa!" + val) is True
  70.  
  71.  
  72. @pytest.mark.parametrize("val", string.ascii_uppercase)
  73. def test_any_upper_char(val):
  74.     assert check_password("1aaaaaaaa!" + val) is True
  75.  
  76.  
  77. @pytest.mark.parametrize("val", string.ascii_lowercase)
  78. def test_any_lower_char(val):
  79.     assert check_password("1AAAAAAA!" + val) is True
  80.  
  81.  
  82. @pytest.mark.parametrize("val", string.punctuation)
  83. def test_any_punc(val):
  84.     assert check_password("1AAAAAAAa" + val) is True
  85.  
Tags: pytest
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement