{"id":389454,"date":"2024-06-29T08:36:28","date_gmt":"2024-06-29T08:36:28","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=389454"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T08:36:28","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=389454","title":{"rendered":"<span>1 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u043d\u0430 10 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/8ee\/ce3\/eb7\/8eece3eb77c9488a808d54d9434ad057.jpg\" width=\"800\" height=\"564\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ee\/ce3\/eb7\/8eece3eb77c9488a808d54d9434ad057.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0418\u0440\u0435\u043a, \u0438 \u044f \u0432 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c IT \u0441 2012 \u0433\u043e\u0434\u0430. \u041f\u0440\u043e\u0448\u0435\u043b \u043f\u0443\u0442\u044c \u043e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430 \u0441\u043b\u0443\u0436\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0420\u0422\u041a \u0418\u0422.<\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u0435\u0439\u0441\u0435 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u0438 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430.\u00a0<\/p>\n<p>\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0443 \u043d\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u0441\u0442\u0435\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u0432\u043e\u0439. \u0412\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 Go, Kotlin, Ruby, Java, Python, \u0421++ \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0441\u0442\u0435\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u201c\u0432\u043c\u0435\u0441\u0442\u043e \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u043b\u043e\u0432\u201d.<\/p>\n<h3>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u044d\u0442\u043e?<\/h3>\n<p>\u0411\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e HelloWorld \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b. \u0412\u043e\u043e\u0431\u0449\u0435 \u0441\u043c\u0435\u043d\u0443 \u0441\u0442\u0435\u043a\u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e, \u0445\u043e\u0442\u044f \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0437\u0430 \u0441\u043c\u0435\u043d\u0443 \u0441\u0442\u0435\u043a\u0430, \u043d\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0434\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0433\u043e\u0442\u043e\u0432\u044b \u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0434\u0435\u0439 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c. \u0425\u043e\u0442\u044f \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u043f\u0440\u0430\u0441\u043d\u043e. \u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u044b \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u0432 \u0441\u0432\u043e\u044e \u0432\u0435\u0440\u0443.<\/p>\n<p>\u0414\u0430 &#8212; \u0431\u0443\u0434\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0434\u0430 &#8212; \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b, \u043d\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0443\u0447\u0438\u0442\u0441\u044f \u0437\u0430 \u0447\u0430\u0441, \u0430 \u0447\u0435\u0440\u0435\u0437 3 \u043c\u0435\u0441\u044f\u0446\u0430 \u0432\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0448\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043a.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0437\u043e\u0440\u043d\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. \u0418\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0433\u0438, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435 \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u043e\u0433\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0432\u044b\u0431\u0440\u0430\u043d <a href=\"https:\/\/petstore.swagger.io\/\">petstore<\/a> (\u0434\u0430 \u043f\u0440\u0438\u0431\u0443\u0434\u0443\u0442 \u0432 \u0437\u0434\u0440\u0430\u0432\u0438\u0438 \u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u043e \u0432\u0435\u043a\u0438 \u0432\u0435\u043a\u043e\u0432).\u00a0<\/p>\n<p>\u041a\u0435\u0439\u0441 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<ol>\n<li>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c Post \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0443 \u0432 \u0411\u0414 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043e\u043e\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043e\u0442\u0432\u0435\u0442 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c Json \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0434\u0438\u0440\u0430\u0435\u043c ID<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u0440\u0433\u0430\u0435\u043c Get \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f ID<\/p>\n<\/li>\n<li>\n<p>\u0423\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0448 \u0411\u0430\u0440\u0441\u0438\u043a)<\/p>\n<\/li>\n<\/ol>\n<p>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ad1\/711\/d8f\/ad1711d8f2adf70e756e65b039440ab7.png\" alt=\"\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 petstore\" title=\"\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 petstore\" width=\"461\" height=\"475\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ad1\/711\/d8f\/ad1711d8f2adf70e756e65b039440ab7.png\"\/><\/p>\n<div><figcaption>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 petstore<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e \u044f\u0437\u044b\u043a\u0443 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430, \u043f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443.<\/p>\n<h3>Java<\/h3>\n<p>JUnit5 + RestAssured<\/p>\n<pre><code class=\"java\">import io.restassured.http.ContentType; import org.json.JSONObject; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test;  import static io.restassured.RestAssured.given;  public class PetStoreTests {    @Test    void createNewPetTest() {        String uri = \"https:\/\/petstore.swagger.io\/v2\/pet\/\";        String petName = \"\u0411\u0430\u0440\u0441\u0438\u043a\";         JSONObject bodyJO = new JSONObject()                .put(\"name\", petName)                .put(\"status\", \"available\");         String newPetId = given()                .when()                .log().all()                .contentType(ContentType.JSON)                .body(bodyJO.toString())                .post(uri)                .then()                .log().all()                .statusCode(200)                .extract()                .jsonPath()                .getString(\"id\");         String actualPetName = given()                .when()                .log().all()                .contentType(ContentType.JSON)                .get(uri + newPetId)                .then()                .log().all()                .statusCode(200)                .extract()                .jsonPath()                .getString(\"name\");         Assertions.assertEquals(petName, actualPetName);    } } <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/80f\/983\/5cd\/80f9835cdb31ad736fa545ed87252c61.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/80f\/983\/5cd\/80f9835cdb31ad736fa545ed87252c61.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f8c\/f40\/825\/f8cf40825f3aa56fdeb98e472056d9f8.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f8c\/f40\/825\/f8cf40825f3aa56fdeb98e472056d9f8.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0438\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. RestAssured \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c, \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u044b\u0440\u043e\u043c \u0432\u0438\u0434\u0435. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0432\u0441\u0435 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 <s>\u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0435 \u0448\u043e\u0440\u0442\u044b<\/s> \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 3 \u0441\u0442\u0440\u043e\u043a\u0438: \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0430 assert. \u0417\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 Gradle \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u0435\u043d, \u043d\u043e \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442, \u0442\u043e \u0442\u044f\u043d\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0448\u0430\u0435\u0442, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u0432 ci.<\/p>\n<p>Java \u043c\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u044f\u0437\u044b\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043d\u0435 \u043c\u043e\u0433\u0443 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0433\u043a\u043e \u043d\u0430 \u043d\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441 python \u0431\u044b\u043b \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u0445 JUnit, \u0442\u043e \u044d\u0442\u043e TestNG. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u044b.<\/p>\n<\/div>\n<\/details>\n<h3>Python<\/h3>\n<p>Pytest + requests<\/p>\n<pre><code class=\"python\">import requests   def test_create_new_pet():     uri = 'https:\/\/petstore.swagger.io\/v2\/pet\/'    pet_name = '\u0411\u0430\u0440\u0441\u0438\u043a'     body = {'name': pet_name, 'status': 'available'}     post_response = requests.post(uri, json=body)    assert post_response.status_code == 200, '\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0438'     get_response = requests.get(uri+str(post_response.json().get('id')))    assert get_response.status_code == 200, '\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0438'    assert get_response.json().get('name') == pet_name <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/24f\/645\/9e1\/24f6459e1931509c745c1e81db5762e5.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/24f\/645\/9e1\/24f6459e1931509c745c1e81db5762e5.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bd6\/df4\/3f3\/bd6df43f37f0aba189995da15ff2cb9c.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bd6\/df4\/3f3\/bd6df43f37f0aba189995da15ff2cb9c.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043e \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u0438\u044f \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u041f\u0435\u0440\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u044f\u0437\u044b\u043a\u043e\u043c \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0412\u0435\u0449\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a (\u043f\u043e\u0447\u0442\u0438) \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u041d\u0443 \u0438 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043c\u0430\u0433\u0438\u044e \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0432 Python. \u0418\u0445 \u043c\u043d\u043e\u0433\u043e, \u043e\u043d\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u0438\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u0443\u0447\u0438\u0432\u0430\u0442\u044c. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0442\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e.\u00a0<\/p>\n<p>\u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u043d\u0430\u043c\u0435\u0442\u0438\u043b\u0430\u0441\u044c \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043f\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u0441 python \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438. \u0421\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432. \u041d\u043e \u0430\u043d\u043e\u043d\u0441 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 python \u0433\u043b\u0430\u0441\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0435\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0442\u044c \u0432\u0441\u0435\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438. \u0411\u0443\u0434\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.\u00a0<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0433\u043e Pytest, \u0435\u0441\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 Robot framework.<\/p>\n<\/div>\n<\/details>\n<h3>JavaScript<\/h3>\n<p>Playwright<\/p>\n<pre><code class=\"javascript\">const { test, expect } = require(\"@playwright\/test\"); const JSONbig = require(\"json-bigint\");  const URI = \"https:\/\/petstore.swagger.io\/v2\/pet\/\"; const PET_NAME = \"\u0411\u0430\u0440\u0441\u0438\u043a\";  test(\"create new pet test\", async ({ request }) => {    const respPost = await request.post(URI, {        data: {            name: PET_NAME,            status: \"available\",        },    });    expect(respPost.ok()).toBeTruthy();     const respJson = (await respPost.body()).toString();    const id = JSONbig.parse(respJson).id;     const respGet = await request.get(URI + id);    expect(respGet.ok()).toBeTruthy();    expect(await respGet.json()).toHaveProperty(\"name\", PET_NAME); }); <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/afa\/9f2\/22e\/afa9f222ed28e40a15a96b3dc1f5de92.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/afa\/9f2\/22e\/afa9f222ed28e40a15a96b3dc1f5de92.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3e2\/46a\/4dd\/3e246a4dda22106aacb6fea7a5d31b85.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3e2\/46a\/4dd\/3e246a4dda22106aacb6fea7a5d31b85.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 playwright \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c \u0432 JS \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0422\u0443\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0435\u0441\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c, \u0438 \u044f \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0431\u0435\u0437 \u043d\u0435\u0435.\u00a0<\/p>\n<p>\u041f\u043e\u043f\u0438\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u043e\u0432\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u0441\u044f \u0432 integer \u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 3 \u0446\u0438\u0444\u0440\u044b. \u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 JSONbig \u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u0431\u0435 \u0441\u0447\u0430\u0441\u0442\u044c\u0435. \u041d\u0435 \u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u044f &#8212; \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u043b\u0441\u044f.<\/p>\n<p>Playwright \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0449\u0435 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 Jest, \u043a\u0430\u043a \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0436\u0438\u043b\u0430 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0433\u043e.<\/p>\n<\/div>\n<\/details>\n<h3>Rust<\/h3>\n<p>Reqwest<\/p>\n<pre><code class=\"rust\">use reqwest::blocking::Client; use reqwest::{self, StatusCode}; use serde::{Deserialize, Serialize}; use serde_json::{json, Value};  #[derive(Serialize, Deserialize)] struct Pet {    id: i64,    name: String, }  #[test] fn test_create_new_pet() -> Result&lt;(), reqwest::Error> {    let uri = \"https:\/\/petstore.swagger.io\/v2\/pet\/\";    let pet_name = \"\u0411\u0430\u0440\u0441\u0438\u043a\";    let body = json!({\"name\": pet_name, \"status\": \"available\"});     let client = Client::new();     let post_res = client.post(uri).json(&amp;body).send()?;    assert_eq!(post_res.status(), StatusCode::OK);     let res_body = post_res.text()?;    let root: Value = serde_json::from_str(&amp;res_body).unwrap();     let pet_id = root.get(\"id\");    let pet_uri = format!(\"{}{}\", uri, pet_id.unwrap());     let get_res = client.get(pet_uri).send()?;    assert_eq!(get_res.status(), StatusCode::OK);     let actual_pet: Pet = get_res.json()?;    assert_eq!(actual_pet.name, pet_name);     Ok(()) }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5d9\/a57\/1a9\/5d9a571a9a5dcaafacaddf0ce91e2463.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d9\/a57\/1a9\/5d9a571a9a5dcaafacaddf0ce91e2463.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a86\/e29\/6a7\/a86e296a7c7fd08044ab426217729794.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a86\/e29\/6a7\/a86e296a7c7fd08044ab426217729794.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u0440\u044f\u0434 \u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Rust \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0434\u043b\u044f api \u0442\u0435\u0441\u0442\u043e\u0432, \u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c. <\/p>\n<p>\u041d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 Rust, \u0442\u043e \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0442\u043e\u043c \u0433\u0430\u0434\u0430\u0439 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0418\u0437\u0432\u0435\u0447\u043d\u044b\u0439 unwrap \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0431\u0435\u0448\u0438\u0432\u0430\u0435\u0442, \u043d\u043e \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0435\u0449\u0435 \u0445\u0443\u0436\u0435)<\/p>\n<p>\u041f\u043e \u044f\u0437\u044b\u043a\u0443 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0435 \u043a\u043e\u043c\u043c\u044c\u044e\u043d\u0438\u0442\u0438. Rust \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043e\u0432\u0435\u0440\u043a\u0438\u043b\u043b.<\/p>\n<\/div>\n<\/details>\n<h3>C#<\/h3>\n<p>NUnit + RestSharp<\/p>\n<pre><code class=\"cs\">using NUnit.Framework; using RestSharp; using System.Text.Json;  namespace NUnit.Tests;  public class Tests {    [Test]    public void CreateNewPetTest()    {      var uri = \"https:\/\/petstore.swagger.io\/v2\/pet\/\";      var petName = \"\u0411\u0430\u0440\u0441\u0438\u043a\";       var client = new RestClient();      var postRequest = new RestRequest(uri)        .AddHeader(\"Content-Type\", \"application\/json\")        .AddJsonBody(new { name = petName, status = \"available\" });       var postResponse = client.Post(postRequest);      Assert.AreEqual(200, (int)postResponse.StatusCode);           var id = JsonDocument.Parse(postResponse.Content).RootElement.GetProperty(\"id\").ToString();           var getRequest = new RestRequest(uri+id);      var getResponse = client.Get(getRequest);      Assert.AreEqual(200, (int)getResponse.StatusCode);      var actualName = JsonDocument.Parse(getResponse.Content).RootElement.GetProperty(\"name\").ToString();           Assert.AreEqual(petName, actualName);    } }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bd5\/0cc\/07e\/bd50cc07e7282dfb9a15db16aca60119.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bd5\/0cc\/07e\/bd50cc07e7282dfb9a15db16aca60119.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0f8\/6d7\/032\/0f86d703290f904757c75ef90eca8625.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0f8\/6d7\/032\/0f86d703290f904757c75ef90eca8625.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>Dotnet \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430 \u043c\u043e\u0435\u043c \u043b\u0438\u043d\u0443\u043a\u0441\u043e\u0432\u043e\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435. \u041f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 Mono, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0441\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0440\u0435\u043f\u043a\u0438.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u0434\u0436\u0430\u0432\u0438\u0441\u0442\u043e\u0432 \u044f\u0437\u044b\u043a \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0447\u0435\u043c-\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c \u0438 \u0440\u043e\u0434\u043d\u044b\u043c. \u0423\u0447\u0438\u0442\u0441\u044f \u043b\u0435\u0433\u043a\u043e, \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0435\u0433\u043a\u043e. <\/p>\n<\/div>\n<\/details>\n<h3>Go<\/h3>\n<p>Resty + Testify<\/p>\n<pre><code class=\"go\">package tests  import (    \"encoding\/json\"    \"fmt\"    \"testing\"     \"github.com\/go-resty\/resty\/v2\"    \"github.com\/stretchr\/testify\/assert\" )  type Pet struct {    Id   int    `json:\"id\"`    Name string `json:\"Name\"` }  func TestCreateNewPet(t *testing.T) {    uri := \"https:\/\/petstore.swagger.io\/v2\/pet\/\"    petName := \"\u0411\u0430\u0440\u0441\u0438\u043a\"    body := `{\"name\": \"` + petName + `\", \"status\": \"available\"}`    myPet := Pet{}     client := resty.New()     postResponse, _ := client.R().        SetHeader(\"Content-Type\", \"application\/json\").        SetBody(body).        Post(uri)     assert.Equal(t, 200, postResponse.StatusCode(), \"\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0438\")     json.Unmarshal(postResponse.Body(), &amp;myPet)     getResponse, _ := client.R().        Get(fmt.Sprintf(\"%s%d\", uri, myPet.Id))     json.Unmarshal(getResponse.Body(), &amp;myPet)     assert.Equal(t, 200, getResponse.StatusCode(), \"\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0438\")    assert.Equal(t, petName, myPet.Name, \"\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0438\") } <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/82e\/2ea\/ae5\/82e2eaae578b8a488cad1bc3499662b1.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/82e\/2ea\/ae5\/82e2eaae578b8a488cad1bc3499662b1.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e67\/529\/5a0\/e675295a0853a64e28a6d10b573b10c2.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e67\/529\/5a0\/e675295a0853a64e28a6d10b573b10c2.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 \u0432 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u0412\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 Golang, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0432\u0443 \u043d\u0430\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u0441\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043d\u043e \u0436\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0430\u0440\u0441\u0438\u0442\u044c json \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438(<\/p>\n<p>\u0421\u0430\u043c \u044f\u0437\u044b\u043a \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u044f. \u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f <a href=\"https:\/\/habr.com\/ru\/companies\/vivid_money\/articles\/566940\/\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u043f\u0440\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 Go.<\/p>\n<\/div>\n<\/details>\n<h3>PHP<\/h3>\n<p>Codeception<\/p>\n<pre><code class=\"php\">&lt;?php  namespace Tests;  use Tests\\Support\\ApiTester;  class PetStoreCest {      public function createNewPet(ApiTester $I)     {         $URI = 'https:\/\/petstore.swagger.io\/v2\/pet\/';         $PET_NAME = '\u0411\u0430\u0440\u0441\u0438\u043a';          $I->sendPostAsJson($URI, [             'name' => $PET_NAME,             'status' => 'available'         ]);         $I->seeResponseCodeIs(200);         $id = $I->grabDataFromResponseByJsonPath('$.id');          $I->sendGet($URI . strval($id[0]));         $I->seeResponseCodeIs(200);         $I->seeResponseIsJson();         $I->seeResponseContainsJson(array('name' => $PET_NAME));     } }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dad\/35d\/ea6\/dad35dea6d9a90cf07e35d395f70e8f9.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dad\/35d\/ea6\/dad35dea6d9a90cf07e35d395f70e8f9.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4f8\/b8b\/c4e\/4f8b8bc4eec9fc3b6e92c9f0506aca6f.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4f8\/b8b\/c4e\/4f8b8bc4eec9fc3b6e92c9f0506aca6f.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0435\u0449\u0435 \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0435 \u0441 php \u0438 \u0440\u0430\u0434, \u0447\u0442\u043e \u044f\u0437\u044b\u043a \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u0410\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u043e\u0447\u0435\u043d\u044c \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0435 \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u0433\u043b\u0430\u0437\u0443, \u0445\u043e\u0442\u044c \u0438 \u0441 \u043f\u0440\u0438\u0432\u043a\u0443\u0441\u043e\u043c BDD.<\/p>\n<p>\u0421\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e, \u0432\u0441\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0440\u0435\u043f\u043a\u0438.\u00a0<\/p>\n<p>\u041a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a PHPUnit. \u041e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0440\u0435\u043d\u044c\u043a\u0438\u0439, \u043d\u043e \u0435\u0449\u0435 \u0432 \u0445\u043e\u0434\u0443.<\/p>\n<\/div>\n<\/details>\n<h3>Kotlin<\/h3>\n<p>Kotest + fuel<\/p>\n<pre><code class=\"kotlin\">import com.github.kittinunf.fuel.Fuel import com.github.kittinunf.fuel.json.responseJson import io.kotest.core.spec.style.ShouldSpec import io.kotest.matchers.shouldBe  class PetStoreTest : ShouldSpec({     val uri = \"https:\/\/petstore.swagger.io\/v2\/pet\/\"     val petName = \"\u0411\u0430\u0440\u0441\u0438\u043a\"     val jsonBody = \"\"\"         { \"name\": \"$petName\",           \"status\": \"available\"}         \"\"\"      should(\"create new pet\") {         val (_, responsePost, resultPost) = Fuel.post(uri)             .header(\"Content-Type\" to \"application\/json; charset=utf-8\")             .body(jsonBody)             .responseJson()          responsePost.statusCode shouldBe 200          val newPetId = resultPost.get().obj().get(\"id\")         val (_, responseGet, resultGet) = Fuel.get(uri + newPetId).responseJson()          responseGet.statusCode shouldBe 200         resultGet.get().obj().get(\"name\") shouldBe \"\u041c\u0443\u0440\u0437\u0438\u043a\"     } })<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d07\/6f3\/4b0\/d076f34b00b0b209990dd95e0ab0fadf.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d07\/6f3\/4b0\/d076f34b00b0b209990dd95e0ab0fadf.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3aa\/f22\/ae7\/3aaf22ae74cc3ba020470ac23b2c89ed.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3aa\/f22\/ae7\/3aaf22ae74cc3ba020470ac23b2c89ed.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0436\u0434\u0430\u043b, \u0447\u0442\u043e \u043d\u0430 Kotlin \u043d\u0435 \u043d\u0430\u0439\u0434\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432, \u043d\u043e \u0440\u0430\u0434. \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u0430\u043b\u0441\u044f. Kotest \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043a\u043e\u0434 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439. \u0414\u043e\u043b\u0433\u043e \u0438\u0441\u043a\u0430\u043b \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 Fuel, \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0430\u0449\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0441\u044f \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a\u0435.<\/p>\n<p>\u0412\u0440\u043e\u0434\u0435 \u0442\u0430 \u0436\u0435 Java, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430 \u0442\u0435\u0431\u044f. \u0414\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e, \u0445\u043e\u0440\u043e\u0448\u043e \u044d\u0442\u043e \u0438\u043b\u0438 \u043f\u043b\u043e\u0445\u043e.<\/p>\n<\/div>\n<\/details>\n<h3>Ruby<\/h3>\n<p>Rspec<\/p>\n<pre><code class=\"ruby\">require 'rspec' require 'net\/http' require 'json'  describe \"Pet store test\" do   it \"create new pet\" do     uri = URI('https:\/\/petstore.swagger.io\/v2\/pet\/')     pet_name = '\u0411\u0430\u0440\u0441\u0438\u043a'     body = { name: pet_name, status: 'available' }     headers = { 'Content-Type': 'application\/json' }          post_resp = Net::HTTP.post(uri, body.to_json, headers)     expect(post_resp.code).to eq('200')      uri.path += JSON.parse(post_resp.body)['id'].to_s      get_resp = Net::HTTP.get_response(uri)     expect(get_resp.code).to eq('200')     expect(JSON.parse(get_resp.body)['name']).to eq(pet_name)   end end<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e56\/8d4\/e4d\/e568d4e4d0a8698d29ea4be68de4cc7c.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e56\/8d4\/e4d\/e568d4e4d0a8698d29ea4be68de4cc7c.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/50e\/f6b\/c17\/50ef6bc17e02c8ff8cd3a904072e73ff.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/50e\/f6b\/c17\/50ef6bc17e02c8ff8cd3a904072e73ff.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0421\u0430\u043c\u044b\u0439 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u043e \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f\u043c. \u0421\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0436\u0430\u043b\u0443\u044e \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 to_json \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0430 to_string \u043e\u0431\u0440\u0435\u0437\u0430\u043b\u0438 \u0434\u043e to_s? \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044b\u043a\u043d\u0443\u0442\u044c, \u043d\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u0440\u0430\u0445 \u0441 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0434\u0430 \u043d\u0430 Ruby \u043f\u0440\u044f\u043c \u0441\u043b\u043e\u0436\u043d\u043e.<\/p>\n<p>\u041f\u0440\u0438 \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u043d\u0435 \u0443\u043f\u043e\u043b\u0437\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u044b \u0441 \u0440\u0435\u043b\u044c\u0441\u0430\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0438 \u043e\u0434\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0440\u0435\u043b\u044c\u0441\u043e\u0432\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0439.<\/p>\n<\/div>\n<\/details>\n<h3>1C<\/h3>\n<p>1testrunner<\/p>\n<pre><code class=\"1c\">\u041f\u0435\u0440\u0435\u043c \u044e\u0422\u0435\u0441\u0442;  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0421\u043f\u0438\u0441\u043e\u043a\u0422\u0435\u0441\u0442\u043e\u0432(\u042e\u043d\u0438\u0442\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435) \u042d\u043a\u0441\u043f\u043e\u0440\u0442  \u044e\u0422\u0435\u0441\u0442 = \u042e\u043d\u0438\u0442\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435;  \u0412\u0441\u0435\u0422\u0435\u0441\u0442\u044b = \u041d\u043e\u0432\u044b\u0439 \u041c\u0430\u0441\u0441\u0438\u0432; \u0412\u0441\u0435\u0422\u0435\u0441\u0442\u044b.\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c(\"\u0422\u0435\u0441\u0442_\u0414\u043e\u043b\u0436\u0435\u043d_\u0421\u043e\u0437\u0434\u0430\u0442\u044c\u041d\u043e\u0432\u0443\u044e\u0417\u0432\u0435\u0440\u0443\u0448\u043a\u0443\");  \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u0412\u0441\u0435\u0422\u0435\u0441\u0442\u044b; \u041a\u043e\u043d\u0435\u0446\u0424\u0443\u043d\u043a\u0446\u0438\u0438  \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0422\u0435\u0441\u0442_\u0414\u043e\u043b\u0436\u0435\u043d_\u0421\u043e\u0437\u0434\u0430\u0442\u044c\u041d\u043e\u0432\u0443\u044e\u0417\u0432\u0435\u0440\u0443\u0448\u043a\u0443() \u042d\u043a\u0441\u043f\u043e\u0440\u0442  \u0418\u043c\u044f\u0417\u0432\u0435\u0440\u0443\u0448\u043a\u0438 = \"\u0411\u0430\u0440\u0441\u0438\u043a\";  \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435HTTP = \u041d\u043e\u0432\u044b\u0439 HTTP\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435(\"https:\/\/petstore.swagger.io\/v2\/pet\/\");  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0414\u0430\u043d\u043d\u044b\u0445JSON = \u041d\u043e\u0432\u044b\u0439 \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430(); \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0414\u0430\u043d\u043d\u044b\u0445JSON.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"name\", \u0418\u043c\u044f\u0417\u0432\u0435\u0440\u0443\u0448\u043a\u0438); \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0414\u0430\u043d\u043d\u044b\u0445JSON.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"status\", \"available\"); \u0417\u0430\u043f\u0438\u0441\u044cJSON = \u041d\u043e\u0432\u044b\u0439 \u0417\u0430\u043f\u0438\u0441\u044cJSON(); \u0417\u0430\u043f\u0438\u0441\u044cJSON.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0421\u0442\u0440\u043e\u043a\u0443();  \u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044cJSON(\u0417\u0430\u043f\u0438\u0441\u044cJSON, \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0414\u0430\u043d\u043d\u044b\u0445JSON);     \u0421\u0442\u0440\u043e\u043a\u0430JSON = \u0417\u0430\u043f\u0438\u0441\u044cJSON.\u0417\u0430\u043a\u0440\u044b\u0442\u044c();  \u0417\u0430\u043f\u0440\u043e\u0441Post = \u041d\u043e\u0432\u044b\u0439 HTTP\u0417\u0430\u043f\u0440\u043e\u0441(); \u0417\u0430\u043f\u0440\u043e\u0441Post.\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"Content-type\", \"application\/json\"); \u0417\u0430\u043f\u0440\u043e\u0441Post.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0422\u0435\u043b\u043e\u0418\u0437\u0421\u0442\u0440\u043e\u043a\u0438(\u0421\u0442\u0440\u043e\u043a\u0430JSON); \u041e\u0442\u0432\u0435\u0442Post = \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435HTTP.\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0414\u043b\u044f\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438(\u0417\u0430\u043f\u0440\u043e\u0441Post);  \u044e\u0422\u0435\u0441\u0442.\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0420\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e(\u041e\u0442\u0432\u0435\u0442Post.\u041a\u043e\u0434\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, 200);  \u0427\u0442\u0435\u043d\u0438\u0435JSON = \u041d\u043e\u0432\u044b\u0439 \u0427\u0442\u0435\u043d\u0438\u0435JSON(); \u0427\u0442\u0435\u043d\u0438\u0435JSON.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0421\u0442\u0440\u043e\u043a\u0443(\u041e\u0442\u0432\u0435\u0442Post.\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0422\u0435\u043b\u043e\u041a\u0430\u043a\u0421\u0442\u0440\u043e\u043a\u0443(\"UTF-8\"));   \u0422\u0435\u043b\u043e\u041e\u0442\u0432\u0435\u0442\u0430 = \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044cJSON(\u0427\u0442\u0435\u043d\u0438\u0435JSON);  \u0417\u0430\u043f\u0440\u043e\u0441Get = \u041d\u043e\u0432\u044b\u0439 HTTP\u0417\u0430\u043f\u0440\u043e\u0441(\u0422\u0435\u043b\u043e\u041e\u0442\u0432\u0435\u0442\u0430.id); \u0417\u0430\u043f\u0440\u043e\u0441Get.\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438.\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c(\"Content-type\", \"application\/json\"); \u041e\u0442\u0432\u0435\u0442Get = \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435HTTP.\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c(\u0417\u0430\u043f\u0440\u043e\u0441Get);  \u044e\u0422\u0435\u0441\u0442.\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0420\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e(\u041e\u0442\u0432\u0435\u0442Get.\u041a\u043e\u0434\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, 200);  \u0427\u0442\u0435\u043d\u0438\u0435JSON = \u041d\u043e\u0432\u044b\u0439 \u0427\u0442\u0435\u043d\u0438\u0435JSON(); \u0427\u0442\u0435\u043d\u0438\u0435JSON.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0421\u0442\u0440\u043e\u043a\u0443(\u041e\u0442\u0432\u0435\u0442Get.\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0422\u0435\u043b\u043e\u041a\u0430\u043a\u0421\u0442\u0440\u043e\u043a\u0443(\"UTF-8\"));   \u0422\u0435\u043b\u043e\u041e\u0442\u0432\u0435\u0442\u0430 = \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044cJSON(\u0427\u0442\u0435\u043d\u0438\u0435JSON); \u044e\u0422\u0435\u0441\u0442.\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0420\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e(\u0422\u0435\u043b\u043e\u041e\u0442\u0432\u0435\u0442\u0430.name, \u0418\u043c\u044f\u0417\u0432\u0435\u0440\u0443\u0448\u043a\u0438);  \u041a\u043e\u043d\u0435\u0446\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e58\/4d9\/fc1\/e584d9fc1a37daf52c36fa5c3cb17ada.png\" alt=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" title=\"\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e58\/4d9\/fc1\/e584d9fc1a37daf52c36fa5c3cb17ada.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fc3\/e1b\/18e\/fc3e1b18e40c3fdb13af6c32bd5ea4c9.png\" alt=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" title=\"\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439\" width=\"1428\" height=\"965\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fc3\/e1b\/18e\/fc3e1b18e40c3fdb13af6c32bd5ea4c9.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u0430, \u043e\u0434\u0438\u043d\u0435\u0441\u043d\u0438\u043a\u0430\u043c \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b. \u0412 \u0441\u044b\u0440\u043e\u043c \u0432\u0438\u0434\u0435 \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e, \u043d\u043e \u043f\u0430\u0440\u0430 \u043e\u0431\u0435\u0440\u0442\u043e\u043a &#8212; \u0438 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<p>\u0421\u0430\u043c\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0431\u0435\u0437 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438 1Script. \u0412\u043e\u043e\u0431\u0449\u0435 \u043a\u043e\u0434 \u043d\u0430 1\u0421 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0438 \u0435\u0441\u043b\u0438 \u0441 \u0440\u0443\u0441\u0441\u043a\u0438\u043c \u0443 \u0432\u0430\u0441 \u043f\u043b\u043e\u0445\u043e \u0435\u0449\u0435 \u0441\u043e \u0448\u043a\u043e\u043b\u044b, \u0442\u043e \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c.\u00a0<\/p>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<\/div>\n<\/details>\n<h3>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0432\u044b \u0438\u0437\u0432\u043b\u0435\u043a\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/github.com\/ErikNas\/api-tests-polyglot\/\"><u>Github<\/u><\/a> \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0435\u0441\u0442\u044c readme, \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 \u0438 \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0435\u0441\u0442\u044b.<\/p>\n<p>\u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c, \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c, issue, pr. \ud83d\ude42<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430.<\/em><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/735704\/\"> https:\/\/habr.com\/ru\/articles\/735704\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0418\u0440\u0435\u043a, \u0438 \u044f \u0432 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c IT \u0441 2012 \u0433\u043e\u0434\u0430. \u041f\u0440\u043e\u0448\u0435\u043b \u043f\u0443\u0442\u044c \u043e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430 \u0441\u043b\u0443\u0436\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0420\u0422\u041a \u0418\u0422.<\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043a\u0435\u0439\u0441\u0435 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u0438 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430.\u00a0<\/p>\n<p>\u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0443 \u043d\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u0441\u0442\u0435\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u0432\u043e\u0439. \u0412\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 Go, Kotlin, Ruby, Java, Python, \u0421++ \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0441\u0442\u0435\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u201c\u0432\u043c\u0435\u0441\u0442\u043e \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u043b\u043e\u0432\u201d.<\/p>\n<h3>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u044d\u0442\u043e?<\/h3>\n<p>\u0411\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e HelloWorld \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b. \u0412\u043e\u043e\u0431\u0449\u0435 \u0441\u043c\u0435\u043d\u0443 \u0441\u0442\u0435\u043a\u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e, \u0445\u043e\u0442\u044f \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0437\u0430 \u0441\u043c\u0435\u043d\u0443 \u0441\u0442\u0435\u043a\u0430, \u043d\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0434\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0433\u043e\u0442\u043e\u0432\u044b \u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0434\u0435\u0439 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c. \u0425\u043e\u0442\u044f \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u043f\u0440\u0430\u0441\u043d\u043e. \u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u044b \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u0432 \u0441\u0432\u043e\u044e \u0432\u0435\u0440\u0443.<\/p>\n<p>\u0414\u0430 &#8212; \u0431\u0443\u0434\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0434\u0430 &#8212; \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b, \u043d\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0443\u0447\u0438\u0442\u0441\u044f \u0437\u0430 \u0447\u0430\u0441, \u0430 \u0447\u0435\u0440\u0435\u0437 3 \u043c\u0435\u0441\u044f\u0446\u0430 \u0432\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0448\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043a.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0437\u043e\u0440\u043d\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. \u0418\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0433\u0438, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435 \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u043e\u0433\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0432\u044b\u0431\u0440\u0430\u043d <a href=\"https:\/\/petstore.swagger.io\/\">petstore<\/a> (\u0434\u0430 \u043f\u0440\u0438\u0431\u0443\u0434\u0443\u0442 \u0432 \u0437\u0434\u0440\u0430\u0432\u0438\u0438 \u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u043e \u0432\u0435\u043a\u0438 \u0432\u0435\u043a\u043e\u0432).\u00a0<\/p>\n<p>\u041a\u0435\u0439\u0441 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/p>\n<ol>\n<li>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c Post \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0443 \u0432 \u0411\u0414 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043e\u043e\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043e\u0442\u0432\u0435\u0442 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c Json \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0434\u0438\u0440\u0430\u0435\u043c ID<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u0440\u0433\u0430\u0435\u043c Get \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f ID<\/p>\n<\/li>\n<li>\n<p>\u0423\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0448 \u0411\u0430\u0440\u0441\u0438\u043a)<\/p>\n<\/li>\n<\/ol>\n<p>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 petstore<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e \u044f\u0437\u044b\u043a\u0443 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430, \u043f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0443.<\/p>\n<h3>Java<\/h3>\n<p>JUnit5 + RestAssured<\/p>\n<pre><code class=\"java\">import io.restassured.http.ContentType; import org.json.JSONObject; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test;  import static io.restassured.RestAssured.given;  public class PetStoreTests {    @Test    void createNewPetTest() {        String uri = \"https:\/\/petstore.swagger.io\/v2\/pet\/\";        String petName = \"\u0411\u0430\u0440\u0441\u0438\u043a\";         JSONObject bodyJO = new JSONObject()                .put(\"name\", petName)                .put(\"status\", \"available\");         String newPetId = given()                .when()                .log().all()                .contentType(ContentType.JSON)                .body(bodyJO.toString())                .post(uri)                .then()                .log().all()                .statusCode(200)                .extract()                .jsonPath()                .getString(\"id\");         String actualPetName = given()                .when()                .log().all()                .contentType(ContentType.JSON)                .get(uri + newPetId)                .then()                .log().all()                .statusCode(200)                .extract()                .jsonPath()                .getString(\"name\");         Assertions.assertEquals(petName, actualPetName);    } } <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\">\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0438\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. RestAssured \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c, \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u044b\u0440\u043e\u043c \u0432\u0438\u0434\u0435. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0432\u0441\u0435 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 <s>\u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0435 \u0448\u043e\u0440\u0442\u044b<\/s> \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 3 \u0441\u0442\u0440\u043e\u043a\u0438: \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0430 assert. \u0417\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 Gradle \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u0435\u043d, \u043d\u043e \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442, \u0442\u043e \u0442\u044f\u043d\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0448\u0430\u0435\u0442, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u0432 ci.<\/p>\n<p>Java \u043c\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u044f\u0437\u044b\u043a \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043d\u0435 \u043c\u043e\u0433\u0443 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0433\u043a\u043e \u043d\u0430 \u043d\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441 python \u0431\u044b\u043b \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u0445 JUnit, \u0442\u043e \u044d\u0442\u043e TestNG. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u044b.<\/p>\n<\/div>\n<\/details>\n<h3>Python<\/h3>\n<p>Pytest + requests<\/p>\n<pre><code class=\"python\">import requests   def test_create_new_pet():     uri = 'https:\/\/petstore.swagger.io\/v2\/pet\/'    pet_name = '\u0411\u0430\u0440\u0441\u0438\u043a'     body = {'name': pet_name, 'status': 'available'}     post_response = requests.post(uri, json=body)    assert post_response.status_code == 200, '\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0438'     get_response = requests.get(uri+str(post_response.json().get('id')))    assert get_response.status_code == 200, '\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0437\u0432\u0435\u0440\u0443\u0448\u043a\u0438'    assert get_response.json().get('name') == pet_name <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\">\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043e \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u0438\u044f \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u041f\u0435\u0440\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u044f\u0437\u044b\u043a\u043e\u043c \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0412\u0435\u0449\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a (\u043f\u043e\u0447\u0442\u0438) \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435. \u041d\u0443 \u0438 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043c\u0430\u0433\u0438\u044e \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0432 Python. \u0418\u0445 \u043c\u043d\u043e\u0433\u043e, \u043e\u043d\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u0438\u0445 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u0443\u0447\u0438\u0432\u0430\u0442\u044c. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0442\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e.\u00a0<\/p>\n<p>\u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u043d\u0430\u043c\u0435\u0442\u0438\u043b\u0430\u0441\u044c \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043f\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u0441 python \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438. \u0421\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432. \u041d\u043e \u0430\u043d\u043e\u043d\u0441 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 python \u0433\u043b\u0430\u0441\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0435\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0442\u044c \u0432\u0441\u0435\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438. \u0411\u0443\u0434\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.\u00a0<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0433\u043e Pytest, \u0435\u0441\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 Robot framework.<\/p>\n<\/div>\n<\/details>\n<h3>JavaScript<\/h3>\n<p>Playwright<\/p>\n<pre><code class=\"javascript\">const { test, expect } = require(\"@playwright\/test\"); const JSONbig = require(\"json-bigint\");  const URI = \"https:\/\/petstore.swagger.io\/v2\/pet\/\"; const PET_NAME = \"\u0411\u0430\u0440\u0441\u0438\u043a\";  test(\"create new pet test\", async ({ request }) => {    const respPost = await request.post(URI, {        data: {            name: PET_NAME,            status: \"available\",        },    });    expect(respPost.ok()).toBeTruthy();     const respJson = (await respPost.body()).toString();    const id = JSONbig.parse(respJson).id;     const respGet = await request.get(URI + id);    expect(respGet.ok()).toBeTruthy();    expect(await respGet.json()).toHaveProperty(\"name\", PET_NAME); }); <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\">\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 playwright \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c \u0432 JS \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0422\u0443\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0435\u0441\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c, \u0438 \u044f \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0431\u0435\u0437 \u043d\u0435\u0435.\u00a0<\/p>\n<p>\u041f\u043e\u043f\u0438\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u043e\u0432\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u0441\u044f \u0432 integer \u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 3 \u0446\u0438\u0444\u0440\u044b. \u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u0433\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 JSONbig \u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u0431\u0435 \u0441\u0447\u0430\u0441\u0442\u044c\u0435. \u041d\u0435 \u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u044f &#8212; \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u043b\u0441\u044f.<\/p>\n<p>Playwright \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0435\u0435 \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0449\u0435 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 Jest, \u043a\u0430\u043a \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u0436\u0438\u043b\u0430 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0433\u043e.<\/p>\n<\/div>\n<\/details>\n<h3>Rust<\/h3>\n<p>Reqwest<\/p>\n<pre><code class=\"rust\">use reqwest::blocking::Client; use reqwest::{self, StatusCode}; use serde::{Deserialize, Serialize}; use serde_json::{json, Value};  #[derive(Serialize, Deserialize)] struct Pet {    id: i64,    name: String, }  #[test] fn test_create_new_pet() -> Result&lt;(), reqwest::Error> {    let uri = \"https:\/\/petstore.swagger.io\/v2\/pet\/\";    let pet_name = \"\u0411\u0430\u0440\u0441\u0438\u043a\";    let body = json!({\"name\": pet_name, \"status\": \"available\"});     let client = Client::new();     let post_res = client.post(uri).json(&amp;body).send()?;    assert_eq!(post_res.status(), StatusCode::OK);     let res_body = post_res.text()?;    let root: Value = serde_json::from_str(&amp;res_body).unwrap();     let pet_id = root.get(\"id\");    let pet_uri = format!(\"{}{}\", uri, pet_id.unwrap());     let get_res = client.get(pet_uri).send()?;    assert_eq!(get_res.status(), StatusCode::OK);     let actual_pet: Pet = get_res.json()?;    assert_eq!(actual_pet.name, pet_name);     Ok(()) }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\">\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u0440\u044f\u0434 \u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Rust \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0434\u043b\u044f api \u0442\u0435\u0441\u0442\u043e\u0432, \u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c. <\/p>\n<p>\u041d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 Rust, \u0442\u043e \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0442\u043e\u043c \u0433\u0430\u0434\u0430\u0439 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0418\u0437\u0432\u0435\u0447\u043d\u044b\u0439 unwrap \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0431\u0435\u0448\u0438\u0432\u0430\u0435\u0442, \u043d\u043e \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0435\u0449\u0435 \u0445\u0443\u0436\u0435)<\/p>\n<p>\u041f\u043e \u044f\u0437\u044b\u043a\u0443 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0435 \u043a\u043e\u043c\u043c\u044c\u044e\u043d\u0438\u0442\u0438. Rust \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043e\u0432\u0435\u0440\u043a\u0438\u043b\u043b.<\/p>\n<\/div>\n<\/details>\n<h3>C#<\/h3>\n<p>NUnit + RestSharp<\/p>\n<pre><code class=\"cs\">using NUnit.Framework; using RestSharp; using System.Text.Json;  namespace NUnit.Tests;  public class Tests {    [Test]    public void CreateNewPetTest()    {      var uri = \"https:\/\/petstore.swagger.io\/v2\/pet\/\";      var petName = \"\u0411\u0430\u0440\u0441\u0438\u043a\";       var client = new RestClient();      var postRequest = new RestRequest(uri)        .AddHeader(\"Content-Type\", \"application\/json\")        .AddJsonBody(new { name = petName, status = \"available\" });       var postResponse = client.Post(postRequest);      Assert.AreEqual(200, (int)postResponse.StatusCode);           var id = JsonDocument.Parse(postResponse.Content).RootElement.GetProperty(\"id\").ToString();           var getRequest = new RestRequest(uri+id);      var getResponse = client.Get(getRequest);      Assert.AreEqual(200, (int)getResponse.StatusCode);      var actualName = JsonDocument.Parse(getResponse.Content).RootElement.GetProperty(\"name\").ToString();           Assert.AreEqual(petName, actualName);    } }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\">\n<div><figcaption>\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u043e\u0433\u043e\u043d \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439<\/figcaption><\/div>\n<\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>Dotnet \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043b\u0435\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430 \u043c\u043e\u0435\u043c \u043b\u0438\u043d\u0443\u043a\u0441\u043e\u0432\u043e\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435. \u041f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 Mono, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0441\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0440\u0435\u043f\u043a\u0438.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u0434\u0436\u0430\u0432\u0438\u0441\u0442\u043e\u0432 \u044f\u0437\u044b\u043a \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0447\u0435\u043c-\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c \u0438 \u0440\u043e\u0434\u043d\u044b\u043c. \u0423\u0447\u0438\u0442\u0441\u044f \u043b\u0435\u0433\u043a\u043e, \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0435\u0433\u043a\u043e. <\/p>\n<\/div>\n<\/details>\n<h3>Go<\/h3>\n<p>Resty + Testify<\/p>\n<pre><code class=\"go\">package tests  import (    \"encoding\/json\"    \"fmt\"    \"testing\"     \"github.com\/go-resty\/resty\/v2\"    \"github.com\/stretchr\/testify\/assert\" )  type Pet struct {    Id   int    `json:\"id\"`    Name string `json:\"Name\"` }  func TestCreateNewPet(t *testing.T) {    uri := \"https:\/\/petstore.swagger.io\/v2\/pet\/\"    petName := \"\u0411\u0430\u0440\u0441\u0438\u043a\"    body := `{\"name\": \"` + petName <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-389454","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/389454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=389454"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/389454\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=389454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=389454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=389454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}