рд╕реЗрд▓реЗрдирд┐рдпрдо рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ - рдЧреНрд░рд╛рдлрд╛рдирд╛ рдФрд░ рдЗрдиреНрдлреНрд▓рдХреНрд╕рдмреАрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рдореАрдЯреНрд░рд┐рдХ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдЕрдЧрд▓реЗ рд╣рдлреНрддреЗ, рдЬрд╛рд╡рд╛ рдХреНрдпреВрдП рдЗрдВрдЬреАрдирд┐рдпрд░ рд╕рдореВрд╣ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордпрдмрджреНрдз рд╣реЛрдЧрд╛ред



рдЕрд╡рд▓реЛрдХрди:


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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдкреГрд╖реНрда рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрдиреНрдлреНрд▓рдХреНрд╕рдбреАрдмреА рдФрд░ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджреНрджреЗрд╢реНрдп:


рд╣рдо рд╕рднреА рдЙрдкрд▓рдмреНрдз рдкрд░реАрдХреНрд╖рдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕реЗ:

  • рдЯреЗрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХреА рд╕реНрдерд┐рддрд┐
  • рдЯреЗрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХреА рдЕрд╡рдзрд┐
  • рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛ рдХреА рд╕реНрдерд┐рддрд┐
  • рд╕рд┐рдВрдЧрд▓ рдХреНрд▓рд╛рд╕ рдЯреЗрд╕реНрдЯ рд░рдирдЯрд╛рдЗрдо
  • рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреА рд╕реНрдерд┐рддрд┐
  • рдЯреЗрд╕реНрдЯ рд░рди рдХреА рдЕрд╡рдзрд┐


рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХреБрдЫ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдореВрд╣реАрдХреГрдд рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдкрд╛рд╕: 30, рд╡рд┐рдлрд▓: 2, рд╕реНрдХрд┐рдкреНрдб: 2) рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рджрд┐рдиред
  • рдПрдХ рд╕рдкреНрддрд╛рд╣, рдорд╣реАрдиреЗ, рд╡рд░реНрд╖, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реГрддреНрддрд┐ред


InfluxDB:


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

sudo docker run -p 8086:8086 -v $PWD:/var/lib/influxdb influxdb 


рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛:


рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА InfluxDB рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЙрдард╛рдпрд╛ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИред рдЪрд▓реЛ рд╕реЗрд▓реЗрдирд┐рдпрдо рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдмрдирд╛рдПрдВред рдиреАрдЪреЗ рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ "рд╕реЗрд▓реЗрдирд┐рдпрдо" рдирд╛рдордХ рд╕реНрдХреАрдорд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВред (рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдирд╣реАрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рддреЛ URL рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рд╣реЛрд╕реНрдЯрд╣реЛрд╕реНрдЯ / ipaddress рд╕реЗ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЛ рдмрджрд▓реЗрдВ)ред

 curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE selenium" 


TestNG:


рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдЯреЗрд╕реНрдЯрдЧреИрди рдЯреЗрд╕реНрдЯ рдмрдирд╛рдПрдВ:

 public class SampleTest { @Test(description = "login") public void login(){ } @Test(description = "search for flights", dependsOnMethods = "login") public void search(){ } @Test(description = "select flight", dependsOnMethods = "search") public void select(){ } @Test(description = "book flight", dependsOnMethods = "select") public void book(){ } @Test(description = "logout", dependsOnMethods = "book") public void logout(){ } } 


рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдЗрдиреНрдлреНрд▓рдХреНрд╕рдбреАрдмреА рдореЗрдВ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рддреЛ, рд╣рдореЗрдВ InfluxDB рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░ / рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдорд╛рд╡реЗрди рдирд┐рд░реНрднрд░рддрд╛:


рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдорд╛рд╡реЗрди рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ:

 <dependency> <groupId>org.influxdb</groupId> <artifactId>influxdb-java</artifactId> <version>2.12</version> </dependency> 


рдЫрд╛рддреНрд░:


TestNG рд╢реНрд░реЛрддрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИрдВ, рдФрд░ рдЬреЛ рд╣реБрдЖ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ InfluxDB рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

 import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.Point; public class ResultSender { private static final InfluxDB INFLXUDB = InfluxDBFactory.connect("http://localhost:8086", "root", "root"); private static final String DATABASE = "selenium"; static{ INFLXUDB.setDatabase(DATABASE); } public static void send(final Point point){ INFLXUDB.write(point); } } 


рдЕрдм рдПрдХ рдФрд░ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬреЛ ITestListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

 import org.influxdb.dto.Point; import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; import java.util.concurrent.TimeUnit; public class ExecutionListener implements ITestListener { public void onTestStart(ITestResult iTestResult) { } public void onTestSuccess(ITestResult iTestResult) { this.sendTestMethodStatus(iTestResult, "PASS"); } public void onTestFailure(ITestResult iTestResult) { this.sendTestMethodStatus(iTestResult, "FAIL"); } public void onTestSkipped(ITestResult iTestResult) { this.sendTestMethodStatus(iTestResult, "SKIPPED"); } public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { } public void onStart(ITestContext iTestContext) { } public void onFinish(ITestContext iTestContext) { this.sendTestClassStatus(iTestContext); } private void sendTestMethodStatus(ITestResult iTestResult, String status) { Point point = Point.measurement("testmethod") .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS) .tag("testclass", iTestResult.getTestClass().getName()) .tag("name", iTestResult.getName()) .tag("description", iTestResult.getMethod().getDescription()) .tag("result", status) .addField("duration", (iTestResult.getEndMillis() - iTestResult.getStartMillis())) .build(); ResultSender.send(point); } private void sendTestClassStatus(ITestContext iTestContext) { Point point = Point.measurement("testclass") .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS) .tag("name", iTestContext.getAllTestMethods()[0].getTestClass().getName()) .addField("duration", (iTestContext.getEndDate().getTime() - iTestContext.getStartDate().getTime())) .build(); ResultSender.send(point); } } 


рдиреЛрдЯ: рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдкрдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреИрдЧ ("рдкрд░рд┐рджреГрд╢реНрдп", "рд▓реЙрдЧрд┐рди рдкреНрд░рд╡рд╛рд╣")ред

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

рдЕрдм рд╢реНрд░реЛрддрд╛ рдХреЛ XML рдкреИрдХреЗрдЬ рдпрд╛ TestNG рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

 <suite name="My suite"> <listeners> <listener class-name="com.tag.realtime.ExecutionListener" /> </listeners> <test name="Test1"> <classes> <class name="com.tag.realtime.SampleTest"/> </classes> </test> <test name="Test2"> <classes> <class name="com.tag.realtime.Sample2Test"/> </classes> </test> </suite> 


рд╡рд░рдирд╛:

 @Listeners(ExecutionListener.class) public class SampleTest { @Test public void test(){ } } 


Grafana:


рд╣рдо InfluxDB рдХреЛ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ? рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо "рдЧреНрд░рд╛рдлрд╛рдирд╛" рдирд╛рдордХ рдПрдХ рдФрд░ рдореБрдлреНрдд рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
Grafana рдЯрд╛рдЗрдо рд╕реАрд░реАрдЬрд╝ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓ рд╣реИ, рдпрд╣ InfluxDB рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред Grafana рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд docker рдХрдорд╛рдВрдб рд╣реИрдВред [piechart рдкреНрд▓рдЧрдЗрди рдЯреАрдо рдкрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ]

 docker run -d -p 3000:3000 --name=grafana \ -e "GF_INSTALL_PLUGINS=grafana-piechart-panel" \ -v $PWD:/var/lib/grafana \ grafana/grafana 


Grafana рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд:


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




рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛рдирд╛:


рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рдХреЛ рджреЗрдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦ рдореЗрдВ рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрд╛рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдЗрд╕реАрд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд╣реЛрдЯрд▓ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ред



рдбреЗрдореЛ 2:


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрдиреНрдлреНрд▓реБрдПрдВрд╕рдбреАрдмреА рдФрд░ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЙрдкрдпреЛрдЧреА рдирд┐рдХрд▓реЗред рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдиреНрдпреВрдирддрдо рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо TestNG рд╢реНрд░реЛрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕реЗрдЯ / рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╢реНрд░реЛрддрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЯреАрдо рдореЗрдВ рдХреБрдЫ рдирд┐рд░рд╛рд╢рд╛ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдпрджрд┐ рдЗрд╕рдХреЗ рд╕рджрд╕реНрдп рдХреЗрд╡рд▓ рд░рд┐рдореЛрдЯ рдорд╢реАрди рдкрд░ рдХрдВрд╕реЛрд▓ I / O рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдпрд╛ рдкрд░реАрдХреНрд╖рдг, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░реНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝реЗрдВред

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

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


All Articles