Pytest рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди рдХреНрдпреВрдП рдЗрдВрдЬреАрдирд┐рдпрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




рд╣рдо рдЙрд╕ рдпреБрдЧ рдореЗрдВ рдЬреА рд░рд╣реЗ рд╣реИрдВ рдЬрдм рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдмрд╛рдЬрд╛рд░ рдореЗрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рддрдирд╛рд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рддреЗрдЬрд╝ рд╡рд┐рддрд░рдг рдХреА рдЙрдЪреНрдЪ рджрд░реЗрдВ рд╡реНрдпрд╡рд╕рд╛рдп рдореЙрдбрд▓ рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рд╡рд╛рд▓ рдпрд╣ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╣рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ


рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рддреАрди рдореБрдЦреНрдп рд╣реИрдВ:
рдкреБрди: рдЙрдкрдпреЛрдЧ: рд╣рд░ рдмрд╛рд░ рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддрдм рднреА рдЬрдм рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рддрддреНрдХрд╛рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред
рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛: рд▓реЛрдЧ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХрд╛рд░реЗрдВ рдЙрдиреНрд╣реЗрдВ рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрддреА рд╣реИрдВред рдФрд░ рд╡реЗ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рджреЛрд╣рд░рд╛рдпрд╛ рдЪрд░рдгреЛрдВ / рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХрд╛рд░реНрдп 24/7: рдЖрдк рджрд┐рди рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдордп, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреВрд░ рд╕реЗ рднреА рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд░рд╛рдд рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реЛрддреЗ рд╕рдордп рднреА рдЪрд▓реЗрдЧрд╛ред

рдкрд╛рдЗрдерди рдореЗрдВ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓рд╛ рдкрд╛рдпрд╕реНрдЯреЗрд╕реНрдЯ рдЯреЗрд╕реНрдЯ рдЯреВрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛


рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдИ рд░реВрдкрд░реЗрдЦрд╛ рдФрд░ рдЙрдкрдХрд░рдг рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛-рдЪрд╛рд▓рд┐рдд, рдХреАрд╡рд░реНрдб-рдЪрд╛рд▓рд┐рдд, рд╣рд╛рдЗрдмреНрд░рд┐рдб, рдмреАрдбреАрдбреА, рдЖрджрд┐ред рдЖрдк рд╡рд╣ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛред

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╛рдпрдерди рдФрд░ pytest рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╕реНрдерд╛рди рд░рдЦрддреЗ рд╣реИрдВред рдкрд╛рдпрдерди рдФрд░ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╡реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд▓рдн рд╣реИрдВред

pytest рдлреНрд░реЗрдорд╡рд░реНрдХ рдЫреЛрдЯреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди pytest рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рддрд░рд╛рдЬреВ рдХрд░рддрд╛ рд╣реИред

pytest рдХреА рдХреБрдЫ рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  • рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрддрд╛ рд▓рдЧрд╛рдирд╛;
  • рдкреНрд░рднрд╛рд╡реА рд╕реАрдПрд▓рдЖрдИ рдЬреЛ рдЖрдк рдЪрд▓рд╛рдирд╛ рдпрд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛;
  • рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдмрдбрд╝рд╛ рддреГрддреАрдп-рдкрдХреНрд╖ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░;
  • рдлрд┐рдХреНрд╕реНрдЪрд░ - рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░, рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ;
  • рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, pytest рдЙрди рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЦреЛрдЬрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рдирд╛рдо test_ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ test_ рд╕рд╛рде рд╕рдорд╛рдкреНрдд _test.py ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрдкрд╕рд░реНрдЧ test_ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдПрдХ pytest рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди pytest рдЬреЛрдбрд╝рдХрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 # content of pytest.ini # Example 1: have pytest look for "check" instead of "test" # can also be defined in tox.ini or setup.cfg file, although the section # name in setup.cfg files should be "tool:pytest" [pytest] python_files = check_*.py python_classes = Check python_functions = *_check 

рдЖрдЗрдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЗрдЦреЗрдВ:

 class CheckClass(object): def one_check(self): x = "this" assert 'h' in x def two_check(self): x = "hello" assert hasattr(x, 'check') 

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХреБрдЫ рджреЗрдЦрд╛ рд╣реИ? рдХреЛрдИ assertEqual рдпрд╛ assertDictEqual рдХреЛрдИ assertEqual рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд░реНрдл рдПрдХ рд╕реБрд▓рдн рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп assertDictEqual ред рдХреЗрд╡рд▓ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЦрд░ рд╡рд╣реА рд╣реИ рдЬреЛ рдкрд╛рдЗрдерди рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ рдФрд░ рдкрд╣рд┐рдП рдХреЛ рд╕реБрджреГрдврд╝ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб? рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ, рдЬреБрдбрд╝рдирд╛рд░ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рднрд╛рдЧрддреЗ рд╣реИрдВ!


рд╡реЙрд▓реЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:

 // test_wallet.py from wallet import Wallet def test_default_initial_amount(): wallet = Wallet() assert wallet.balance == 0 wallet.close() def test_setting_initial_amount(): wallet = Wallet(initial_amount=100) assert wallet.balance == 100 wallet.close() def test_wallet_add_cash(): wallet = Wallet(initial_amount=10) wallet.add_cash(amount=90) assert wallet.balance == 100 wallet.close() def test_wallet_spend_cash(): wallet = Wallet(initial_amount=20) wallet.spend_cash(amount=10) assert wallet.balance == 10 wallet.close() 

рдЕрд╣рдо, рджрд┐рд▓рдЪрд╕реНрдк! рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЧреМрд░ рдХрд┐рдпрд╛ рд╣реИ? рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд╣реИред рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рдЧ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реЙрд▓реЗрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдЗрд╕реЗ рд╡реЙрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдмрдВрдж рдХрд░рдирд╛ред wallet.close() ред

рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ pytest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

 import pytest from _pytest.fixtures import SubRequest from wallet import Wallet #==================== fixtures @pytest.fixture def wallet(request: SubRequest): param = getattr(request, 'param', None) if param: prepared_wallet = Wallet(initial_amount=param[0]) else: prepared_wallet = Wallet() yield prepared_wallet prepared_wallet.close() #==================== tests def test_default_initial_amount(wallet): assert wallet.balance == 0 @pytest.mark.parametrize('wallet', [(100,)], indirect=True) def test_setting_initial_amount(wallet): assert wallet.balance == 100 @pytest.mark.parametrize('wallet', [(10,)], indirect=True) def test_wallet_add_cash(wallet): wallet.add_cash(amount=90) assert wallet.balance == 100 @pytest.mark.parametrize('wallet', [(20,)], indirect=True) def test_wallet_spend_cash(wallet): wallet.spend_cash(amount=10) assert wallet.balance == 10 

рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛, рд╣реИ рди? рдЯреЗрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЕрдм рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реЙрд▓реЗрдЯ рдлрд┐рдХреНрд╕реЗрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЙрд▓реЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░, рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдмрдВрдж рд╣реИред рдлрд┐рдХреНрд╕реНрдЪрд░ рди рдХреЗрд╡рд▓ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдбреЗрдЯрд╛ рд╢реЗрдпрд░рд┐рдВрдЧ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ wallet рдореЗрдВ рд░рд╛рд╢рд┐ рдкрд░реАрдХреНрд╖рдг рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХрдареЛрд░рддрд╛ рд╕реЗ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 @pytest.mark.parametrize('wallet', [(10,)], indirect=True) 

рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпрд╛ рд╢реЗрд▓ рдореЗрдВ test-data.ini , рдЬреЛ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЖрдкрдХрд╛ рдЯреЗрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрд╕реНрдЯ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╢реЗрд▓ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЖрдкрдХреЗ рд╕рднреА рдЬреБрдбрд╝рдирд╛рд░ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ conftest.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП conftest.py рд╣реИред рдпрд╣ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЬреБрдбрд╝рдирд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬреЛ рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!


рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, pytest рдореЗрдВ рдЖрдкрдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдПрдХ CLI рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдХрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╕реЗрдЯ рд╣реИрдВ, рдФрд░ рдЖрдк рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдк рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕рдм рдХреБрдЫ рдХреЗ рд╕рд╛рде!

 @pytest.mark.parametrize(тАЬsetting_name, setting_valueтАЭ, [('qdb_mem_usage', 'low'), ('report_crashes', 'yes'), ('stop_download_on_hang', 'no'), ('stop_download_on_disconnect', 'no'), ('reduce_connections_on_congestion', 'no'), ('global.max_web_users', '1024'), ('global.max_downloads', '5'), ('use_kernel_congestion_detection', 'no'), ('log_type', 'normal'), ('no_signature_check', 'no'), ('disable_xmlrpc', 'no'), ('disable_ntp', 'yes'), ('ssl_mode', 'tls_1_2'),])def test_settings_defaults(self, setting_name, setting_value): assert product_shell.run_command(setting_name) == \ self.тАЭThe current value for \'{0}\' is \'{1}\'.тАЭ.format(setting_name, setting_value), \ 'The {} default should be {}'.format(preference_name, preference_value) 

рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣реИ рдирд╛? рдЖрдкрдиреЗ рд╕рд┐рд░реНрдл 13 рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рд▓рд┐рдЦреЗ (рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдЕрд▓рдЧ setting_value рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ), рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдФрд░ рдЯрдкрд▓ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рд╕реЗрд▓реЗрдирд┐рдпрдо рдФрд░ рдПрдкреАрдЖрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде pytest рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ?


рдареАрдХ рд╣реИ, рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реАрдПрд▓рдЖрдИ - рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдХрд╣рд╛ред рдЬреАрдпреВрдЖрдИ рдФрд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рдиред рдЕрдкрдиреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЙрди рд╕рднреА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ, рдЬрд╣рд╛рдВ рдХрдИ рдШрдЯрдХ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕рднреА рдЕрдиреНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ pytest рдЖрд╕рд╛рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдгред рдпрд╣реА рд╣реИ, рдЖрдк рд╕реЗрд▓реЗрдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреАрдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рд╕реЗ requests рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЙрдиреНрд╣реЗрдВ pytest рд╕рд╛рде рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, рдпрд╣ рднрдВрдбрд╛рд░ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рдХреА рдЫрд╡рд┐ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдпрд╣ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИ:

apiobjects : рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ BaseAPIObject рдФрд░ рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рд╕рд╣рд╛рдпрдХреЛрдВ : рдЖрдк рдЕрдкрдиреЗ рд╕рд╣рд╛рдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдпрд╣рд╛рдБ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

lib : рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, conftest , pageobjects , рдЖрджрд┐ рдореЗрдВ рдЖрдкрдХреЗ conftest ред

рдкреЗрдЬреЛрдмрд┐рдЬ : рдкреЗрдЬрдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ PageObjects рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдЬреАрдпреВрдЖрдИ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд╡реЗрдмрд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред

рд╕реБрдЗрдЯреНрд╕ : рдЖрдк рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрд▓рд┐рдВрдЯ рдЪреЗрдХ рдХреЗ рдЕрдкрдиреЗ рд╕реЗрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред

рдкрд░реАрдХреНрд╖рдг : рдЖрдк рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд▓рд╛рдпрд╛ рдерд╛, рднрдВрдбрд╛рд░ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЖрдкрдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓реЗрдВ


рдЖрдкрдХреЗ рд╕реЗрдЯ рдореЗрдВ рдХрдИ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдФрд░ рд╕рдордЧреНрд░ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

Pytest, pytest-xdist рдирд╛рдордХ рдПрдХ рднрдпрд╛рдирдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдкрд░реАрдХреНрд╖рдг рд░рди рдкреНрд▓рдЧрдЗрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдзрд╛рд░ pytest рдореЗрдВ рдХрдИ рдЕрджреНрд╡рд┐рддреАрдп рдирд┐рд╖реНрдкрд╛рджрди рдореЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИред pip рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

 pip install pytest-xdist 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореЗрд░реЗ рд╕реЗрд▓реЗрдирд┐рдпрдо GUI рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ CloudApp рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рднрдВрдбрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рдирдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рдЗрд╕рдХреЗ рд╕реИрдХрдбрд╝реЛрдВ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕рдордЧреНрд░ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдХрдо рдХрд░реЗрдВред

рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдлреЛрд▓реНрдбрд░ / рдЯреЗрд╕реНрдЯ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдмрд╕ pytest рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

 pytest -s -v -n=2 



pytest-xdist рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдЧрд╛!

рдЗрд╕ рддрд░рд╣, рдЖрдк рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд░рд┐рдкреЛрд░реНрдЯ


рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдЯреЗрд╕реНрдЯ рд░рд┐рдЬрд▓реНрдЯ рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЬреЗрдирдХрд┐рдВрд╕, рдмрдореНрдмреВ рдпрд╛ рдЕрдиреНрдп рдирд┐рд░рдВрддрд░ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 pytest test/file/path тАФ junitxml=path 

рдпрд╣ рдПрдХ рдорд╣рд╛рди XML рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрдИ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рд╛рде рдЦреЛрд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд░ рд╕рд╛рд▓ рдмрдврд╝ рд░рд╣реА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдорд░реНрдерди рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреИрд╕реЗ рдкрд╛рдЗрдЯреЗрд╕реНрдЯ-рдбрдЬреИрдВрдЧреЛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ Django рдореЗрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдЕрдирдЯрд╛рдЗрд╕реНрдЯ рдЯреЗрд╕реНрдЯ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдпреВрдиреАрдЯреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ



рд╡рд╣ рд╕рдм рд╣реИред рдХреЛрд░реНрд╕ рдкрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ !

Source: https://habr.com/ru/post/hi480186/


All Articles