рдкрд░рд┐рдЪрдп
рдлрд┐рд▓рд╣рд╛рд▓, рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЧреНрд░рд╛рд╣рдХ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рдзрд╛рди рд╕реЗрд▓реЗрдирд┐рдпрдо рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдпрдХ рд╣реИ - рд╕реЗрд▓реЗрдирд┐рдпрдо рдПрдХ рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЬреЛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рдЧрднрдЧ рдкреВрд░реЗ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред
рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдмрдврд╝рд┐рдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпреВрдЖрдИ-рддрддреНрд╡ ) рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдХрдИ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреГрд╖реНрда рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рдж, рд▓рдЧрднрдЧ рд╣рд░ рдкрд░реАрдХреНрд╖рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкреВрд░реЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рддреБрд░рдВрдд рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рдмрд╛рдж, рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЕрдм рдЗрддрдиреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд▓рдЧрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рд╕реЗрд▓реЗрдирд┐рдпрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рд╕реЗ рдЬреБрдбрд╝реА рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ
рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░
рдкреНрд░рд▓реЗрдЦрди )
рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЧреНрд░рд╛рд╣рдХ рдкрд░реАрдХреНрд╖рдг рдХреА рдХреНрд╖рдорддрд╛рдУрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ) рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рдпрдерди-рд╕реЗрд▓реЗрдирд┐рдпрдо рд▓реЗрдЯрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдЯреНрдпреВрд╕ + рд╕реЗрд▓реЗрдирд┐рдпрдо
рдЖрдЗрдП рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рдпреЗ рдШрдЯрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:
рдЕрдЬрдЧрд░-рд╕реЗрд▓реЗрдирд┐рдпрдо- рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реЗрд▓реЗрдирд┐рдпрдо рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд╛ рдПрдХ рд╕рдореГрджреНрдз рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рд╣реИ
- рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реНрдпрд╛рдкрдХ рдЕрдЬрдЧрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╣реА рдПрдХреАрдХрд░рдг
рд╕рд▓рд╛рдж рдкрддреНрддрд╛- рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рднрд╛рдЧреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛
- рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░ рдирд┐рдпрдВрддреНрд░рдг
- рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд╕реБрдВрджрд░ рдЙрддреНрдкрд╛рджрди :)
рдФрд░ рддреБрд░рдВрдд рдпреБрджреНрдз рдореЗрдВ
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рд▓реЗрдЯрд╕ + рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдореБрдЦреНрдп рдкрд╣рд▓реБрдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рдирдЖрдкрдХреЛ 2 рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░реЗрдВрдЧреЗ:
рд░рдЬрд┐рд╕реНрдЯрд░:
- рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ
- рдкрдВрдЬреАрдХрд░рдг рдлрд╛рд░реНрдо рдкрд░ рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ
- рдкрдВрдЬреАрдХрд░рдг рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рд╕рдлрд▓ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВ
рдкреНрд░рд╛рдзрд┐рдХрд░рдг:
- рд▓реЙрдЧрдЗрди рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдВ
- рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлрд╝реЙрд░реНрдо рдкрд░ рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ
- рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВ
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрдпрд╛рди рд╕реЗ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпреЗ 2 рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдореЗрдВред рдЪрд▓реЛ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред
рдХрд╛рд░реНрдп рдкреВрд░реНрдг рд╣реЛрдирд╛рд╣рдорд╛рд░реЗ django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓реЗрдЯреНрдпреВрд╕ рдХреЛ рдЬреЛрдбрд╝рдХрд░, рдЬреИрд╕рд╛ рдХрд┐
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкреИрдХреЗрдЬ рдФрд░ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рд▓реЗрдЯреЗрд╕ рдФрд░ рд╕реЗрд▓реЗрдирд┐рдпрдо рд╣реИрдВ), рд╣рдо рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ: рдЖрдкрдХреЛ рдмрд┐рдирд╛ рд╕рд┐рд░ рдореЛрдб рдореЗрдВ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП xvfb рдФрд░ pyvirtualdisplay рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рд▓реЗрдЯрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреА рд╣реЛрдВрдЧреА:
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореВрд▓ рдореЗрдВ terrain.py рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рд╕реНрддрд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
- * ред myf / features рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ .feature рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ
- * .app рдлрд╝рд╛рдЗрд▓реЗрдВ / рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ * .feature рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ
рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╡рд╛рд▓реА рдПрдХ рдлрд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛ (рд╕реЗрд▓реЗрдирд┐рдпрдо рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдкреЗрдЬрдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди)ред рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ
рдореИрдкрд┐рдВрдЧ рдПрд░реЛрдорд╛рдб рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВред рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдкреГрд╖реНрда рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдпрд╣ рдкреГрдердХреНрдХрд░рдг рд▓реЗрдЖрдЙрдЯ рдмрджрд▓рддреЗ рд╕рдордп рд╕реНрд╡рдпрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ: рдорд╛рдирдЪрд┐рддреНрд░рдг рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрда рдХреЛ рд╕рд╣реА рдХрд░реЗрдВред рдпрд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рднреА рдХрд╛рдлреА рдмрдврд╝рд╛рддрд╛ рд╣реИ (рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред
mapping.py
host_url = 'http://example.com' site_mapping = { "registration": { "url": host_url + "/registration/", "username": "//input[@id='username']", "email": "//input[@id='email']", "password": "//input[@name='password1']", "verify password": "//input[@name='password2']", "signup button": "//button[@name='signup']", "status message": "//div[@id='status']", }, "authorization": { "url": host_url + "/login/", "username": "//input[@id='username']", "password": "//input[@name='password']", "login button": "//button[@name='login']", "status message": "//div[@id='status']", }, }
PS: рдореИрдВ xpath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ
terrain.py
from lettuce import before, after, world from selenium import webdriver from mapping import site_mapping @before.harvest def setup(server):
myapp / features / Cort.feature
Feature: Authorization Scenario: Registration Open "registration" page Fill "username" with "myusername" Fill "email" with "user@example.com" Fill "password" with "1234" Fill "verify password" with "1234" Click "signup button" See "Welcome aboard" in "status message" Scenario: Authorization Open "authorization" page Fill "username" with "myusername" Fill "password" with "1234" Click "login button" See "Hello! Again..." in "status message"
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрддреНрд╡реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдХрдореА рдиреЗ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдПрдХ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИред рдЗрд╕рдХреЗ рд▓рд┐рдП mapping.py рдзрдиреНрдпрд╡рд╛рдж
myapp / features / steps.py
from lettuce import step, world @step(r'Open "(.*)" page') def open_page(step, page): world.current_page = world.mapping[page]
рд╡рд╣ рд╕рдм рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ (рдпрд╛ рдирд╣реАрдВ) рдХреИрд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рджреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЗрд╢рд╛рд░реЗ - рдпрд╣ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдХрджрдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдХрдо рдФрд░ рдХрдо рдирдП рдХрджрдо рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╕рднреА рд╕рдВрднрд╡ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╛рддрдЪреАрдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрджрд╛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреА рдЬрд╛рдПрдЧреА - рд╡рд╣ рд╕рдм рдЬреЛ рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдЬреЛ "рдХрд╛рд░реНрдп рд╕реЗрдЯрд┐рдВрдЧ" рдЖрдЗрдЯрдо рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдХреНрдпрд╛ рд╣реИ:
- рдПрдХ рдЙрдкрдХрд░рдг рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдХреЛрдВ рджреЛрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдзрдиреНрдпрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдЗрдЯ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдкреНрд░рддрд┐рд░реЛрдз
- рдЖрдк рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рдХреНрд░реЛрдо, рдлреИрдВрдЯрдордЬ (рд╢рд╛рдпрдж рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣реА рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА)ред
- рдХрд╣реАрдВ рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ: рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, рдХрд┐рд╕реА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░, рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░
- рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд░рди рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг, рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░реЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдм рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд░реВрдкрд░реЗрдЦрд╛ django рдореЗрдВ рд╣реА рд╣реЛрддрд╛ рд╣реИ)ред
- рдЖрдк рд▓реЙрдЧ рд╕реНрдЯреЛрд░реЗрдЬ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрджрд┐ рдЖрдк рдЗрд╕ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ N рдШрдВрдЯреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдЪрд░рдгреЛрдВ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рдмреЗрд╕ (step.py) рдХреЗ рд╕рд╛рде, рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдЬреЛ рдЙрдирдореЗрдВ "TK" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИрдВред
- рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдЬреЛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд▓рдЧрддрд╛ (рддреБрд▓рдирд╛ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд▓реЗрдирд┐рдпрдо рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ рдПрдХ рдФрд░ рд╕реМ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП)
рд╡рд┐рд╖рдп рдкрд░ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:
рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА рдФрд░ рдпрдереЛрдЪрд┐рдд рдЙрди рдиреБрдХрд╕рд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ рдореИрдВрдиреЗ рд▓реЗрдЯреЗрд╕ + рд╕реЗрд▓реЗрдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдерд╛ред рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
PPS: рдореИрдВ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рд╢реИрд▓реА, рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдкрд╣рд▓рд╛ рд▓реЗрдЦ рдФрд░ рд╡рд╣ рд╕рдм ...