рдирдорд╕реНрддреЗ, рд╣рдмрд░! рдпрд╣ рдореЗрд░реА рдЕрдЧрд▓реА рдХрдбрд╝реА рд╣реИ
рд╣рдо рдПрдХ рдмрдбрд╝реА рд╕рдВрдШреАрдп рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрд╕ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рд░реВрдк, рдкрд░рд┐рд╡рд░реНрддрди, рдЬрдЯрд┐рд▓ рд░реВрдЯрд┐рдВрдЧред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╣реЛрдВрдЧреЗред рд╣рд╛рде рд╕реЗ рджрд░реНрдж рдПрдХ рдРрд╕рд╛ рджрд░реНрдж рд╣реИ рдЬрд┐рд╕реЗ рд╣рд░ рд╣рд╛рдб рд╡реИрджреНрдп рдирд╣реАрдВ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ред
рдкрд░рд┐рдЪрдп
рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореБрдЭреЗ рдЗрд╕ рджрд░реНрдж рд╕реЗ рдЬреВрдЭрдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рд╕рдм RFHUtil рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖред рд╢рдХреНрддрд┐рд╢рд╛рд▓реА, рд▓реЗрдХрд┐рди рдЕрдЬреАрдм рдФрд░ рдбрд░рд╛рд╡рдирд╛: рдареАрдХ рд╣реИ, рдЖрдк рд░реВрд╕ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп, рд▓реЗрдХрд┐рди рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдЧрд┐рд░рд╛рд╡рдЯ рдЖ рд░рд╣реА рд╣реИред
рдЗрд╕рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░реАрдХреНрд╖рдг рдЕрд╕рдВрднрд╡ рд╣реИред
JMeter рд╕реЗ рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреА рдЖрджрдд рдбрд╛рд▓рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ рдмрд╛рдж, рд╕реБрдЦрдж рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╢рд╛ рдЬрдЧрдиреЗ рд▓рдЧреАред
рдореИрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЬреЗрдПрдордПрд╕ рдкреНрд░рдХрд╛рд╢рдХ рдФрд░ рдЬреЗрдПрдордПрд╕ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рд╕реИрдВрдкрд▓рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЬреЗрдПрдордПрд╕ рдкреЙрдЗрдВрдЯ-рдЯреВ-рдкреЙрдЗрдВрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдЬреЛрдбрд╝реА рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JMS рдЪрдпрдирдХрд░реНрддрд╛ рдореЗрдВ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рд╕рд╛рде рдЖрдк рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреЙрдЗрдВрдЯ-рдЯреВ-рдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдпрд╛ рдпрд╣ рд╡рд┐рдзрд┐ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ)ред
рдирдореВрдиреЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдЬреЗрдПрдордПрд╕ рдкреНрд░рдХрд╛рд╢рдХ
- рд╕реЗрдЯрдЕрдк - рдкреНрд░рддреНрдпреЗрдХ рдирдореВрдирд╛. рдЕрдорд░реАрдХрд╛ рдХреА рдПрдХ рдореВрд▓ рдЬрдирдЬрд╛рддрд┐
рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдпрджрд┐ рдХрддрд╛рд░/рд╡рд┐рд╖рдп рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ рддреЛ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред - рд╕рдорд╛рдкреНрддрд┐ (рдПрдордПрд╕) = 120000ред рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдЕрдиреБрд░реЛрдз 2 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж рдХрддрд╛рд░ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
- рдЧреИрд░-рд╕реНрдерд╛рдпреА рд╡рд┐рддрд░рдг рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ? - рд╕рддреНрдпред рдЖрдИрдмреАрдПрдо
рджрд╛рд╡реЛрдВ рд╡рд╣ рдирд┐рд░рдВрддрд░ рдореЛрдб рдЕрдЪрд╛рдирдХ рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрд░рдХреНрд╖рдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЧреИрд░-рдирд┐рд░рдВрддрд░ рдореЛрдб рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдирд┐рдордпред рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЧрддрд┐ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢рдХ рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рдЬреЗрдПрдордПрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХреА рд╣реИ рдЬрд┐рд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдЬреЗрдПрдордПрд╕ рдЪрдпрдирдХрд░реНрддрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╕рдмрдорд┐рд╢рди рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЬрдирд╛ рддрддреНрд╡ рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ:
рдЗрд╕ рддрд░рд╣ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╣реА рд╕рдВрджреЗрд╢ рдкрдврд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ JMS рдкреНрд░рдХрд╛рд╢рдХ рдХрд╛ рдЕрдВрддрд┐рдо "рд░рд┐рдХреНрдд":
рдЬреЗрдПрдордПрд╕ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░
- рд╕реЗрдЯрдЕрдк - рдкреНрд░рддреНрдпреЗрдХ рдирдореВрдирд╛. рдареАрдХ рд╣реИ, рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ.
- рдЯрд╛рдЗрдордЖрдЙрдЯ (рдПрдордПрд╕) = 100000ред рдпрджрд┐ 100 рд╕реЗрдХрдВрдб рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдХреЗ рдмрд╛рдж рднреА рдЕрдиреБрд░реЛрдз рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рд╣реИред
- рдирдореВрдиреЛрдВ рдХреЗ рдмреАрдЪ рд░реБрдХреЗрдВ? - рд╕рддреНрдпред
рдЬреЗрдПрдордПрд╕ рдЪрдпрдирдХрд░реНрддрд╛ - рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ
рдкреНрд░реЗрд╖рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╕рд┐рд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВред JMeter рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкреНрд░реВрдлрд░реАрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЯреЗрдврд╝рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╣рдореЗрд╢рд╛ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдорд╣рд╛рди рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- JMeter "рд▓реЙрдиреНрдЪрд░" рдореЗрдВ рдПрдХ JVM рддрд░реНрдХ рдЬреЛрдбрд╝реЗрдВ:
-Dfile.encoding=UTF-8
- рдЧреНрд░реВрд╡реА рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдореЗрдВ JSR223 рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдЬреЛрдбрд╝реЗрдВ:
prev.setDataEncoding("UTF-8")
рдкрд╛рда рднреЗрдЬреЗрдВ
рд╕рдмрд╕реЗ рдЖрд▓рд╕реА рд╡рд┐рдХрд▓реНрдк. рддрд╛рдЬрд╝рд╛ рд▓рд┐рдЦрд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрддред рдпрд╛ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдм рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЫреЛрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВ рд╕рдВрджреЗрд╢ рд╕реНрд░реЛрдд - рдЯреЗрдХреНрд╕реНрдЯрдПрд░рд┐рдпрд╛ рдФрд░ рд╕рдВрджреЗрд╢ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ рд░рдЦреЗрдВ:
рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
рд╕рдмрд╕реЗ рдЖрдо рд╡рд┐рдХрд▓реНрдк. рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд. рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВ рд╕рдВрджреЗрд╢ рд╕реНрд░реЛрдд - рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдФрд░ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрджреЗрд╢ рдХрд╛ рдкрде рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдлрд╝рд╛рдЗрд▓ - рдлрд╝рд╛рдЗрд▓ рдирд╛рдо:
рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдмрд╣реБрдореБрдЦреА рд╡рд┐рдХрд▓реНрдк. рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд + рдЬреЗрдПрдордПрд╕ рдкреЙрдЗрдВрдЯ-рдЯреВ-рдкреЙрдЗрдВрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреЛрдИ рджреВрд╕рд░рд╛ рднреЗрдЬрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ:
рдПрдХ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдХрдард┐рди рд╡рд┐рдХрд▓реНрдк. рд╡рд┐рд░реВрдкрдг, рдПрд╕рдПрдордПрд╕ рдФрд░ рдЧрдбрд╝рдмрдбрд╝реА рдХреЗ рдмрд┐рдирд╛, рдмрд╛рдЗрдЯ рддрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрдЪреВрдХ рд╕рдЯреАрдХ рдкреНрд░рд╕рд╛рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрддред рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ JMeter рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ.
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдкрдбрд╝рд╛
рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ extractContent(..)
рд░реЗрдЦрд╛:
buffer.append(bytesMessage.getBodyLength() + " bytes received in BytesMessage");
рдкрд░:
byte[] bytes = new byte[(int) bytesMessage.getBodyLength()];
bytesMessage.readBytes(bytes);
try {
buffer.append(new String(bytes, "UTF-8"));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
рдФрд░ JMeter рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред
рдмрд╕ рдХреБрдЫ JSR223 рд╕реИрдореНрдкрд▓рд░реНрд╕ рдЬреЛрдбрд╝рдирд╛ рдмрд╛рдХреА рд╣реИред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд╛рдЗрдЯреНрд╕ рд╡рд╛рд▓реА DAT рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рдХ/рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдЬреЛрдбрд╝реА рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓рд╛ рд╣реИ:
import org.apache.commons.lang3.RandomUtils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
vars.put("PATH_TO_BYTES", "C:temprandomBytes.dat");
File RESULT_FILE = new File(vars.get("PATH_TO_BYTES"));
byte[] arr = RandomUtils.nextBytes((int)(Math.random()*10000));
try {
FileOutputStream fos = new FileOutputStream(RESULT_FILE);
fos.write(arr);
fos.close();
} catch (IOException e) {
System.out.println("file not found");
}
рджреВрд╕рд░рд╛ - рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ:
import java.io.File;
File RESULT_FILE = new File(vars.get("PATH_TO_BYTES"));
RESULT_FILE.delete();
рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ:
рдФрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рд▓рд┐рдП JSR223 рдЕрднрд┐рдХрдерди рдореЗрдВ рднреА рдПрдХ рдЬрд╛рдВрдЪ - рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреА рдХрддрд╛рд░ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд░реЛрдд рдмрд╛рдЗрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
Path path = Paths.get(vars.get("PATH_TO_BYTES"), new String[0]);
byte[] originalArray = Files.readAllBytes(path);
byte[] changedArray = ctx.getPreviousResult().getResponseData();
System.out.println(changedArray.length);
if (Arrays.equals(originalArray, changedArray))
{
SampleResult.setResponseMessage("OK");
} else {
SampleResult.setSuccessful(false);
SampleResult.setResponseMessage("Comparison failed");
SampleResult.setResponseData("Bytes have changed","UTF-8");
IsSuccess=false;
}
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВрдиреЗ рдХрддрд╛рд░реЛрдВ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рдЪрд╛рд░ рддрд░реАрдХреЗ рдмрддрд╛рдП, рдЬрд┐рдирдХрд╛ рдореИрдВ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╣рд░ рджрд┐рди рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдПрдЧреАред рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ, рдореИрдВ рдПрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдПрдХ рдЫреЛрд░ рдкрд░ рдПрдХ рдХрддрд╛рд░ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдЫреЛрд░ рдкрд░ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╣реИред
рдЕрдкрдирд╛ рд╕рдордп рдмрдЪрд╛рдПрдВ. рдФрд░ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж.
рд╕реНрд░реЛрдд: www.habr.com