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

рдиреАрдЪреЗ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
рдЧреЛрдирдХреА рдХрд╛ рдЬрдиреНрдо рдХреИрд╕реЗ рд╣реБрдЖ рдерд╛
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рд╣реИред рдмреЗрд╢рдХ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХ рднреВрдорд┐рдХрд╛ рдХрд┐рд╕реА рд╕рд╛рдЗрдЯ, рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдЕрдиреНрдп рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрд░реЛрдд рд╣реЛрдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ред
рдЬрдм рд╣рдореЗрдВ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕реЗрд╡рд╛рдПрдВ рдереАрдВ, рдФрд░ рддрдм рдФрд░ рднреА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рд╣рдордиреЗ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдорд╛рдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЖрдВрддрд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рд╕реНрд╡реИрдЧрд░ рдХреЛ рдПрдХ рд╡рд┐рд╡рд░рдг рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ (рдФрд░ рд╕реНрд╡реИрдЧрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рднреА рд▓рд┐рдЦрд╛)ред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдПрдВрдбреНрд░рдпреВ рдХреА рдмрд╛рдд рдХреЛ Highload ++ рдХреЗ рд╕рд╛рде рджреЗрдЦреЗрдВ ред
рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдпрд╣рд╛рдБ рдореИрдВ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:
- рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ , рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрд╡рд╛ рдХреА рд▓рдЧрднрдЧ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ
- рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, "рд╣рдорд╛рд░реЗ CI / CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ ," рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд "
- рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдг рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП , рдЕрд░реНрдерд╛рддреН , рди рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
рддреЛ рдЧреЛрдирдХреА рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред
рддреЛ рдпрд╣ рдХреНрдпрд╛ рд╣реИ?
рдЧреЛрдирдХреА рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдЧреЛрд▓рдВрдЧ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП) рдФрд░ рдПрдХ рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ (рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП) рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдХрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рдкреНрд░рддрд┐рдЧрдорди рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯреЗрд╕реНрдЯ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ YAML рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдЧреЛрдирдХреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдкрд░ рдмрдордмрд╛рд░реА рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВред рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ JSON рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЬрд╡рд╛рдм рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛;
- рдЬреБрдбрд╝рдирд╛рд░ рд╕реЗ рдбреЗрдЯрд╛ (рдпрд╣ рднреА YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ) рд╕реЗ рднрд░рдХрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рддреИрдпрд╛рд░ рдХрд░реЗрдВ;
- рдореЙрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ (рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреЗрд╡рд▓ рддрднреА рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬрдм рдЖрдк рдЧреЛрдирдХреА рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ);
- рдХрдВрд╕реЛрд▓ рдХреЛ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдВ рдпрд╛ рдПрдХ рдПрд▓реНрдпреЛрд░ рд░рд┐рдкреЛрд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
рдбреЙрдХрдЯрд░ рдЫрд╡рд┐
рдЧреЛрдирдХреА рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг
рдЖрдкрдХреЛ рдкрд╛рда рдХреЗ рд╕рд╛рде рдмреЛрдЭ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╢рдмреНрджреЛрдВ рд╕реЗ рдХрд░реНрдореЛрдВ рдХреА рдУрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣реАрдВ рдХреБрдЫ рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВред
рдЪрд▓реЛ рдЧреЛ рдкрд░ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░реЗрдВ рдЬреЛ рдЯреНрд░реИрдлрд┐рдХ рд▓рд╛рдЗрдЯ рдХреЗ рдХрд╛рдо рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдЧреАред рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕рдВрдХреЗрдд рдХреЗ рд░рдВрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ: рд▓рд╛рд▓, рдкреАрд▓рд╛ рдпрд╛ рд╣рд░рд╛ред рдЖрдк рд╡рд░реНрддрдорд╛рди рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рд░рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Main.go рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдПрдБ:
go run .
15 рдорд┐рдирдЯ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛! рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣ рдХрд╣реАрдВ рдЧрд▓рдд рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЬрд╛рдВрдЪ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдЧреЛрдирдХреА рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЪрд▓рд╛рдПрдВ:
mkdir -p tests/cases docker run -it -v $(pwd)/tests:/tests lamoda/gonkey -tests tests/cases -host host.docker.internal:8080
рдпрд╣ рдХрдорд╛рдВрдб рдбреЙрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреЛрдирдХреА рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ / рдорд╛рдорд▓реЛрдВ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЧрд┐рдирддрд╛ рд╣реИ рдФрд░ -рд╕реНрдЯреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдг / рдорд╛рдорд▓реЛрдВ / -рд╣реЛрд╕реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЧреЛрдирдХреА рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдбреЙрдХрдЯрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:
go get github.com/lamoda/gonkey go run github.com/lamoda/gonkey -tests tests/cases -host localhost:8080
рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛:
Failed tests: 0/0
рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ - рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВред рдкрд╣рд▓рд╛ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдиреНрдпреВрдирддрдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдг / рдорд╛рдорд▓реЛрдВ / light_get.yaml рдмрдирд╛рдПрдБ:
- name: WHEN currentLight is requested MUST return red method: GET path: /light/get response: 200: > { "currentLight": "red" }
рдкрд╣рд▓реЗ рд╕реНрддрд░ рдкрд░ рдПрдХ рд╕реВрдЪреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдордиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рде рдореЗрдВ рд╡реЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдлрд╝рд╛рдЗрд▓ - рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдЖрдк рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ - рдЧреЛрдирдХреА рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рднреА рдпрд╛рдо рдФрд░ рд╡рд╛рдИрдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЧрд╣рди рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИред
рдиреАрдЪреЗ рджреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛: рд╡рд┐рдзрд┐, рдкрдеред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб (200) рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рд╣реИ рдЬреЛ рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред
рдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк README рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ ред
рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ:
docker run -it -v $(pwd)/tests:/tests lamoda/gonkey -tests tests/cases -host host.docker.internal:8080
рдкрд░рд┐рдгрд╛рдо:
Name: WHEN currentlight is requested MUST return red Request: Method: GET Path: /light/get Query: Body: <no body> Response: Status: 200 OK Body: {} Result: ERRORS! Errors: 1) at path $ values do not match: expected: { "currentLight": "red" } actual: {} Failed tests: 1/1
рддреНрд░реБрдЯрд┐! рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЙрдореНрдореАрдж рдХреА рдЧрдИ рдереА, рдФрд░ рдПрдХ рдЦрд╛рд▓реА рд╕рдВрд░рдЪрдирд╛ рд╡рд╛рдкрд╕ рдЖ рдЧрдИред рдпрд╣ рдмреБрд░рд╛ рд╣реИред рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЧреЛрдирдХреА рдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╡рд░рдг рдХреЗ рдкреВрд░реЗ рдЙрддреНрддрд░ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛:
expected: { "currentLight": "red" }
рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ: рдореИрдВ рд▓рд┐рдЦрдирд╛ рднреВрд▓ рдЧрдпрд╛ рддрд╛рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реЗрд╡рд╛ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╡реЗрджрди / json рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗред рд╣рдо рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ:
рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
Name: WHEN currentlight is requested MUST return red Request: Method: GET Path: /light/get Query: Body: <no body> Response: Status: 200 OK Body: {} Result: ERRORS! Errors: 1) at path $ key is missing: expected: currentLight actual: <missing>
рдорд╣рд╛рди, рдкреНрд░рдЧрддрд┐ рд╣реИред рдЧреЛрдиреНрдХреА рдЕрдм рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЧрд▓рдд рд╣реИ: рдЙрддреНрддрд░ рдЦрд╛рд▓реА рд╣реИред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдЧреИрд░-рдирд┐рд░реНрдпрд╛рдд рдпреЛрдЧреНрдп рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ:
рдЧреЛ рдореЗрдВ, рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдирд╛рдорд┐рдд рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЧреИрд░-рдирд┐рд░реНрдпрд╛рдд рдпреЛрдЧреНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рд╕реЗ рджреБрд░реНрдЧрдо рд╣реИред JSON рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдлрд╝реАрд▓реНрдб рдХреЛ рдПрдХ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред
Failed tests: 0/1
рдЗрдореНрддрд┐рд╣рд╛рди рдкрд╛рд╕ рд╣реЛ рдЧрдП!
рд╣рдо рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╕реЗрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧреАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдг / рдорд╛рдорд▓реЗ / light_set.yaml рднрд░реЗрдВ:
- name: WHEN set is requested MUST return no response method: POST path: /light/set request: > { "currentLight": "green" } response: 200: '' - name: WHEN get is requested MUST return green method: GET path: /light/get response: 200: > { "currentLight": "green" }
рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдЯреНрд░реИрдлрд╝рд┐рдХ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
рдПрдХ рд╣реА рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ:
docker run -it -v $(pwd)/tests:/tests lamoda/gonkey -tests tests/cases -host host.docker.internal:8080
рдкрд░рд┐рдгрд╛рдо:
Failed tests: 0/3
рдПрдХ рд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдо, рд▓реЗрдХрд┐рди рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА: рдкрд╣рд▓реЗ light_get, рдФрд░ рдлрд┐рд░ light_setред рдЕрдЧрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд┐рдпрд╛ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЪрд▓реЛ рдирд╛рдо рдмрджрд▓реЗрдВ:
mv tests/cases/light_set.yaml tests/cases/_light_set.yaml
рдФрд░ рдлрд┐рд░ рд╕реЗ рджреМрдбрд╝реЗрдВ:
Errors: 1) at path $.currentLight values do not match: expected: red actual: green Failed tests: 1/3
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реЗрдЯ рдХреЛ рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЯреНрд░реИрдлрд┐рдХ рд▓рд╛рдЗрдЯ рдХреЛ рд╣рд░реЗ рд░рдВрдЧ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реА рдмрд╛рд░ рдЪрд▓рд╛рдП рдЬрд╛ рд░рд╣реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА - рд╡рд╣ рд▓рд╛рд▓ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдЗрд╕ рддрдереНрдп рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рдВрджрд░реНрдн рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд (рдпрд╛рдиреА, рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ) рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рд╕реЗрдЯ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ - рдкрд╣рд▓реЗ рд╣рдо рдЬреНрдЮрд╛рдд рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдЬреНрдЮрд╛рдд рдкреНрд░рднрд╛рд╡ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдерд╛ред
рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдпрджрд┐ рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕реЗрд╡рд╛ рдХреА рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╕реНрдерд┐рддрд┐ рдмрдирддреА рд╣реИ рдЬрд┐рд╕реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЧреЛрдирдХреА рдореЗрдВ рдЬреБрдбрд╝рдирд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдФрд░ рдЙрджрд╛рд╣рд░рдг рдореИрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рдЪреВрдВрдХрд┐ рд╕реЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ / рд╕реЗрдЯ рд╡рд┐рдзрд┐ рдФрд░ рдкреНрд░рдХрд╛рд╢ / рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рджреЛрдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдореЗрдВ рдмрд╕ light_get рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рд╕рдВрджрд░реНрдн рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред рдореИрдВ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рд╢реЗрд╖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдирд╛рдо рд╕рд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
rm tests/cases/light_get.yaml mv tests/cases/_light_set.yaml tests/cases/light_set_get.yaml
рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд░рдВрдЧ рднреЗрдЬреВрдВ? рдпрд╛ рд░рдВрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рднреЗрдЬрддреЗ?
рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг / рдорд╛рдорд▓реЗ рдмрдирд╛рдПрдБ / light_set_get_negative.yaml рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
- name: WHEN set is requested MUST return no response method: POST path: /light/set request: > { "currentLight": "green" } response: 200: '' - name: WHEN incorrect color is passed MUST return error method: POST path: /light/set request: > { "currentLight": "blue" } response: 400: > incorrect current light: blue - name: WHEN color is missing MUST return error method: POST path: /light/set request: > {} response: 400: > incorrect current light: - name: WHEN get is requested MUST have color untouched method: GET path: /light/get response: 200: > { "currentLight": "green" }
рд╡рд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐:
- рдЬрдм рдЧрд▓рдд рд░рдВрдЧ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ;
- рдЬрдм рд░рдВрдЧ рдкреНрд░рд╕рд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ;
- рдЧрд▓рдд рд░рдВрдЧ рд╕рдВрдЪрд░рдг рдпрд╛рддрд╛рдпрд╛рдд рдкреНрд░рдХрд╛рд╢ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рдЪрд▓рд╛рдПрдБ:
Failed tests: 0/6
рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ :)
рдЧреЛрдирдХреА рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рд╣рдо рд╕реЗрд╡рд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд╛рд╖рд╛ рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЙрд╕реА рддрд░рд╣, рд╣рдо рдХрд┐рд╕реА рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрд░реЛрдд рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рдЬрд╡рд╛рдм рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ, рдЧреЛрдирдХреА рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ - рдЗрд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдХреБрдЫ рднреА рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ - рди рддреЛ рдЧреЛрдирдХреА, рдФрд░ рди рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛ - рдХреЗрд╡рд▓ go test
рдЪрд▓рд╛рдХрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
- рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЖрд░рдВрдн рдХрд░реЗрдВ рдЬрдм рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ;
- рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдФрд░ рд░реИрдВрдбрдо рдкреЛрд░реНрдЯ рдкрд░ рдЯреЗрд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдВ;
- рд╣рдо рдЧреЛрдирдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЯреЗрд╕реНрдЯ рд╕рд░реНрд╡рд░ рдФрд░ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдкрддрд╛ рджреЗрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рд╕рд░реНрд╡рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрдм рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдЬрдм рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдЧреЛрдирдХреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░рдЦрд╛ рд╣реИ:
func initServer() {
рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
func main() { initServer()
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдореБрдЦреНрдп рдЧреЛ рдлрд╝рд╛рдЗрд▓ ред
рдЗрд╕рдиреЗ рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛, рддреЛ рдЪрд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ func_test.go рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реВрдВ:
func Test_API(t *testing.T) { initServer() srv := httptest.NewServer(nil) runner.RunWithTesting(t, &runner.RunWithTestingParams{ Server: srv, TestsDir: "tests/cases", }) }
рдпрд╣рд╛рдБ рдкреВрд░реНрдг func_test.go рдлрд╝рд╛рдЗрд▓ рд╣реИ ред
рд╡рд╣ рд╕рдм рд╣реИ! рд╣рдо рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ:
go test ./...
рдкрд░рд┐рдгрд╛рдо:
ok github.com/lamoda/gonkey/examples/traffic-lights-demo 0.018s
рдкрд░реАрдХреНрд╖рдг рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рджреЛрдиреЛрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЧреЛрдирдХреА рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рднреА рдПрдХ рд╕рд╛рде рдЪрд▓реЗрдВрдЧреЗ - рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗред
рд▓реБрднрд╛рдирд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рд░реВрдк рд╣реИред рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЧрдирдХреА рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрд▓реНрдпреЛрд░ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
docker run -it -v $(pwd)/tests:/tests -w /tests lamoda/gonkey -tests cases/ -host host.docker.internal:8080 -allure
рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдПрд▓реНрдпреЛрд░-рд░рд┐рдЬрд▓реНрдЯ рд╕рдмрдбрд╛рдпрд░реЗрдХреНрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ (рдЗрд╕реАрд▓рд┐рдП рдореИрдВрдиреЗ -w / рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ)ред
рдЧреЛрдирдХреА рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ GONKEY_ALLURE_DIR рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ Allure рд░рд┐рдкреЛрд░реНрдЯ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддреА рд╣реИ:
GONKEY_ALLURE_DIR="tests/allure-results" go test ./тАж
рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
allure generate allure serve
рд░рд┐рдкреЛрд░реНрдЯ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ:

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