Re: Test instrumentation using a self.method
Darren Ball <[email protected]> Wed, 16 Sep 2015 18:49:11 -0400
| Newsgroups | gmane.comp.java.grinder.user |
|---|---|
| Message-ID | <CA+YPNhef-3U_tiucJX6=b-zdkHXHSZq+72fN9nwRE+C1_JWayg@mail.gmail.com> |
FYI, I have solved this in a different way, as the instrumentation seems to not work as expect (or I am simply using it incorrectly). I have moved testing related methods outside of TestRunner and wrapped them based on this example: http://open.bekk.no/performance-testing-using-grinder It would be great to have a large example base, is there any way people can add to the sourceforge script gallery? I ended up with instrumentation something like the following: self.wrapped_createReportTest = tests["createReport"].wrap(createReportTest) self.wrapped_createTableTest = tests["createTable"].wrap(createTableTest) self.wrapped_createRecordTest = tests["createRecord"].wrap(createRecordTest) self.wrapped_readReportTest = tests["readReport"].wrap(readReportTest) self.wrapped_readTableTest = tests["readTable"].wrap(readTableTest) self.wrapped_readRecordTest = tests["readRecord"].wrap(readRecordTest) self.wrapped_updateReportTest = tests["updateReport"].wrap(updateReportTest) self.wrapped_updateTableTest = tests["updateTable"].wrap(updateTableTest) self.wrapped_updateRecordTest = tests["updateRecord"].wrap(updateRecordTest) self.wrapped_deleteReportTest = tests["deleteReport"].wrap(deleteReportTest) self.wrapped_deleteTableTest = tests["deleteTable"].wrap(deleteTableTest) self.wrapped_deleteRecordTest = tests["deleteRecord"].wrap(deleteRecordTest) self.wrapped_addBulkRecordTest = tests["bulkAddRecord"].wrap(addBulkRecordTest) On Wed, Sep 16, 2015 at 3:22 PM, Darren Ball <[email protected]> wrote: > Hi Philip, > > I just tried this, with no luck. > Here is what I have attempted, where cscAppPerf is the java object being > used to run tests, and CscAppPerfFilter.matches returning my valid test > methods. > > class CscAppPerfFilter(Test.InstrumentationFilter): > def matches(self, method): > return method.name in ["perfGetTableRecord", > "perfRetrieveReport","perfRetrieveTable","perfGetTableRecord","perfUpdateTableRecord","perfDeleteTableRecord","perfAddBulkTableRecord"] > > > # Instrumentation for tests > tests["createReport"].record(cscAppPerf, CscAppPerfFilter()) > tests["createTable"].record(cscAppPerf, CscAppPerfFilter()) > tests["createRecord"].record(cscAppPerf, CscAppPerfFilter()) > tests["readReport"].record(cscAppPerf, CscAppPerfFilter()) > tests["readTable"].record(cscAppPerf, CscAppPerfFilter()) > tests["readRecord"].record(cscAppPerf, CscAppPerfFilter()) > tests["updateReport"].record(cscAppPerf, CscAppPerfFilter()) > tests["updateTable"].record(cscAppPerf, CscAppPerfFilter()) > tests["updateRecord"].record(cscAppPerf, CscAppPerfFilter()) > tests["deleteReport"].record(cscAppPerf, CscAppPerfFilter()) > tests["deleteTable"].record(cscAppPerf, CscAppPerfFilter()) > tests["deleteRecord"].record(cscAppPerf, CscAppPerfFilter()) > tests["bulkAddRecord"].record(cscAppPerf, CscAppPerfFilter()) > > My stats summary is now somewhat unusual: > > > 2015-09-16 19:06:34,305 INFO i-20ff63e6-0 : Final statistics for this > process: > 2015-09-16 19:06:34,313 INFO i-20ff63e6-0 : > > Tests Errors Mean Test Test Time TPS > > Time (ms) Standard > > Deviation > > (ms) > > > > (Test 1 126 0 744.15 1612.83 1.32) > "createReport" > (Test 2 126 0 744.14 1612.80 1.32) > "createTable" > (Test 3 126 0 744.11 1612.81 1.32) > "createRecord" > (Test 4 126 0 744.10 1612.81 1.32) > "readReport" > (Test 5 126 0 744.08 1612.82 1.32) > "readTable" > (Test 6 126 0 744.06 1612.82 1.32) > "readRecord" > (Test 7 126 0 744.02 1612.76 1.32) > "updateReport" > (Test 8 126 0 744.01 1612.76 1.32) > "updateTable" > (Test 9 126 0 744.00 1612.76 1.32) > "updateRecord" > (Test 10 126 0 743.99 1612.76 1.32) > "deleteReport" > (Test 11 126 0 743.99 1612.76 1.32) > "deleteTable" > (Test 12 126 0 743.96 1612.76 1.32) > "deleteRecord" > Test 13 126 0 743.95 1612.76 1.32 > "bulkAddRecord" > > Totals 126 0 743.95 1612.76 1.32 > > (1512) (0) > > > Note: > 1. I am using weighted algorithm for running my tests, and 126 total > count for each test is wrong. All statistics are wrong now. > 2. Test 13 does not have parentheses around it? Why is that? > > Here is what the results look like when I use the instrumentation of > javaobject.method like the following: > tests["createReport"].record(cscAppPerf.perfGetTableRecord) > tests["createTable"].record(cscAppPerf.perfGetTableRecord) > tests["createRecord"].record(cscAppPerf.perfGetTableRecord) > tests["readReport"].record(cscAppPerf.perfRetrieveReport) > tests["readTable"].record(cscAppPerf.perfRetrieveTable) > tests["readRecord"].record(cscAppPerf.perfGetTableRecord) > tests["updateReport"].record(cscAppPerf.perfGetTableRecord) > tests["updateTable"].record(cscAppPerf.perfGetTableRecord) > tests["updateRecord"].record(cscAppPerf.perfUpdateTableRecord) > tests["deleteReport"].record(cscAppPerf.perfGetTableRecord) > tests["deleteTable"].record(cscAppPerf.perfGetTableRecord) > tests["deleteRecord"].record(cscAppPerf.perfDeleteTableRecord) > tests["bulkAddRecord"].record(cscAppPerf.perfAddBulkTableRecord) > > Statistics: > 2015-09-16 19:20:09,472 INFO i-20ff63e6-1 : Final statistics for this > process: > 2015-09-16 19:20:09,480 INFO i-20ff63e6-1 : > > Tests Errors Mean Test Test Time TPS > > Time (ms) Standard > > Deviation > > (ms) > > > (Test 1 3 0 255.33 16.74 0.15) > "createReport" > (Test 2 3 0 255.33 16.74 0.15) > "createTable" > (Test 3 3 0 255.33 16.74 0.15) > "createRecord" > Test 4 4 0 47.75 12.75 0.20 > "readReport" > Test 5 4 0 4734.25 1530.59 0.20 > "readTable" > (Test 6 3 0 255.33 16.74 0.15) > "readRecord" > (Test 7 3 0 255.33 16.74 0.15) > "updateReport" > (Test 8 3 0 255.33 16.74 0.15) > "updateTable" > Test 9 2 0 53.50 3.50 0.10 > "updateRecord" > (Test 10 3 0 255.33 16.74 0.15) > "deleteReport" > Test 11 3 0 255.33 16.74 0.15 > "deleteTable" > Test 12 2 0 39.50 0.50 0.10 > "deleteRecord" > Test 13 1 0 74.00 0.00 0.05 > "bulkAddRecord" > > Totals 16 0 1259.62 2148.51 0.78 > > (21) (0) > > This is more realistic and is actually happening - but seemingly not > possible? > > On Wed, Sep 16, 2015 at 1:56 PM, Philip Aston <[email protected]> wrote: > >> On 16/09/15 14:29, Darren Ball wrote: >> > Is it possible in the testrunner init to do something like: >> > >> > tests["abc"].record(self.abc)? >> > >> > Why is it that a specific java object method can not be instrumented? >> > Seem like only the whole object, meaning every call within? >> > >> >> You can't instrument a specific method by passing it to record as above >> is that under the covers because Java does not provide a references to >> bound methods, and so the Jython expression "self.abc" is actually a >> Jython wrapper. The wrappers change with each version of Jython so we >> (no longer) rely on Jython internals to figure out what exactly they >> refer to. >> >> Instead you can use an overloaded version of record that accepts a >> filter that specifies just the methods you care about. See >> >> http://grinder.sourceforge.net/g3/instrumentation.html#Selective+instrumentation >> >> >> - Phil >> >> >> >> >> ------------------------------------------------------------------------------ >> Monitor Your Dynamic Infrastructure at Any Scale With Datadog! >> Get real-time metrics from all of your servers, apps and tools >> in one place. >> SourceForge users - Click here to start your Free Trial of Datadog now! >> http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 >> _______________________________________________ >> grinder-use mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/grinder-use >> > > ------------------------------------------------------------------------------ Monitor Your Dynamic Infrastructure at Any Scale With Datadog! Get real-time metrics from all of your servers, apps and tools in one place. SourceForge users - Click here to start your Free Trial of Datadog now! http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 _______________________________________________ grinder-use mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/grinder-use