Hi everyone, Just providing an update on this. Alan was able to pull together the unit tests outlined previously [1], and I was able to do so using the Tsung-based Open-Performance-Automation-Framework (OPAF) [2]. I'll speak to the following points with my experience with OPAF:
>> 1. How easy is it to create a re-usable test case. Is it feasible to >> think that an institution will pull the components together needed to >> contribute back to the effort? To create re-usable components in the OPAF, I had to add new elements to the testing API using others as examples. With my limited Ruby experience, aside from a few bumps associated to my learning curve, this was relatively painless. The good thing was that once I added an element to the API, I could use it in many different test cases without having to know anything about the requests being fired. I think that it would be rather easy for a developer to create re-usable test-cases and API components that are of value to the community. >> 2. Which is more feasible for the *test maintainers* to keep updated? >> I highlight test maintainers, because at the end of the day, if those >> who will ultimately be responsible for maintaining the tests are not >> comfortable with the medium, I think the effort will fail First, I believe the responsibility to maintain the performance tests will ultimately fall on to the developers, or those with development background. That said I think it is most feasible for me as a developer to maintain the OPAF APIs instead of the JMeter scripts. While creating the OPAF test cases, I managed to update out-dated test cases (pre-1.3.0) quite easily, and those updates propagate to other test suites automatically. In general, I found that working with the tests through an API made things more explicit, which allowed me to make changes quite quickly. While I think a similar system could be put in place with JMeter using fragments, it does require special knowledge of JMeter, and I've never seen it carried out successfully within the community. >> 3. What effort is required to perform the tests and get the data into >> a valuable format -- is it feasible to do weekly? nightly? I am still in the process of getting a proof-of-concept for Tsung, but I have verified that both client and server-side (using Munin-Tsung integration) profiling data are able to be aggregated by Tsung into an HTML format with a single command. It should be possible to simply host a web server on the driver machine to access these reports immediately after execution. JMeter has integration with Jenkins, which allows it to pull performance testing data from JMeter. I am confident that neither tool will post a barrier to being able to run tests nightly. >> 4. Is the level of quality of the test results acceptable? I don't >> have any doubts that both frameworks offer sufficient data, but I >> would like to see which information is available once you've run it >> through the recommended automation process All of JMeter's and Tsung's data is publishable VIA their automated approaches. >> 5. License? Given this is a support tool, as long as the license >> allows free use, I think we're ok. right? All good for both. In conclusion, I feel that the Tsung-based Open-Performance-Automation-Framework is the better option moving forward. While most aspects remain quite equal, I feel as though the Tsung tests will be more maintainable and re-usable in the long term. Thanks to everyone for your valuable input and effort into this. It certainly helped the process along. Cheers, Branden [1] https://github.com/AlanBerg/SakaiOAE-Open/tree/master/TESTS/jmeter_performance_01 [2] https://github.com/mrvisser/Open-Performance-Automation-Framework/tree/oae-load-tests On Thu, Jul 19, 2012 at 11:17 AM, Kyle Campos <[email protected]> wrote: > On Wed, Jul 18, 2012 at 11:48 AM, Branden Visser <[email protected]> wrote: >> >> [snip] >> >> >> As for selection criteria for a decision, I hope to learn the >> following from the frameworks in this trial (in no particular order of >> priority): >> >> 1. How easy is it to create a re-usable test case. Is it feasible to >> think that an institution will pull the components together needed to >> contribute back to the effort? > > > I went a different direction with Tsung. I wanted a re-usable API that > institutions/implementers could use to quickly write their own tests for > their own use cases. Knowing that there's no way a performance test > "artifact" (in Tsun'gs case the output xml) would be executable or valuable > OOTB in all those differences deployment environments with all their > different customizations. This method has proven true and reliable in many > cases. We've used it for multiple Kuali products across multiple > institutions/implementations. > >> >> 2. Which is more feasible for the *test maintainers* to keep updated? >> I highlight test maintainers, because at the end of the day, if those >> who will ultimately be responsible for maintaining the tests are not >> comfortable with the medium, I think the effort will fail > > > I've expressed my opinion here previously. > >> >> 3. What effort is required to perform the tests and get the data into >> a valuable format -- is it feasible to do weekly? nightly? > > > Tsung framework launched through the cmd line. So automating that is a 1 > line sh command in Jenkins. > >> >> 4. Is the level of quality of the test results acceptable? I don't >> have any doubts that both frameworks offer sufficient data, but I >> would like to see which information is available once you've run it >> through the recommended automation process > > > There's 2 parts to the results, the client side HTTP statistics Tsung would > gather and then the server side resource utilization results. We can parse > and present the HTTP statistics any way we want, but OOTB Tsung has a script > that turns it into HTML. > > On the server side, I created a monitoring tool[1] that synchronizes with > the Tsung test and fires off monitoring "listeners" across an array of > servers asynchronously. It uses all free unix utilities to gather > utilization data (cpu, mem etc...). It currently uses gruff graphs to chart > those results for some data types, but I'd like to change this to using > Google Charts for all the data it gathers. That's not a huge effort and one > I'd actually be excited to do were you interested in using. > > In short I have both sides of the equation there and ready to use in an > automated way. > >> 5. License? Given this is a support tool, as long as the license >> allows free use, I think we're ok. right? > > > Both of mine are ECL. > >> >> Am I missing any important points? > > > Not that I can think of. Let me know if I can be of any assistance. > > -Kyle > > [1] https://github.com/kcampos/Open-Synchronized-System-Resource-Monitoring > >> >> Thanks, >> Branden >> >> On Wed, Jul 18, 2012 at 12:48 PM, Lance Speelmon <[email protected]> wrote: >> > This is all really great discussion. How are we going to drive this to >> > conclusion? We likely are going to need to start writing tests using >> > this >> > tool in the next week or two as part of the first 1.5.x sprint. >> > Suggestions: >> > >> > Adopt an appropriate decision time box - i.e. one or two weeks. >> > Identify selection criteria. Maybe using an existing set of criteria? >> > i.e.: >> > >> > ease of use for developers (APIs, etc.) >> > ease of use for deployers (e.g. running load tests against localized >> > builds) >> > strength of the community >> > suitable license >> > proven track record (success stories in applications somewhat like ours) >> > options for queries >> > options for scaling >> > >> > Examine outcomes >> > Make a decision >> > >> > >> > WDYT? Thanks, L >> > >> > >> > On Jul 18, 2012, at 5:48 AM, Juan Jose Meroño Sanchez <[email protected]> >> > wrote: >> > >> > Hi All, >> > >> > I'm Juan, Alan asked me to join this conversation to give my point >> > of >> > view, thanks !! >> > >> > I think the real important thing is the content not the tool, because >> > all >> > the >> > tools you are evaluating are really good (jmeter, tsung, grinder,..). >> > >> > The framework that I wrote is focus on reduce the manual tasks needed to >> > run >> > performance tests, >> > and try to automatize as much as possible. This allows to add >> > performance >> > tests to software lifecycle >> > and keep performance always in mind, not only when server goes down :-) >> > >> > Also anyone can download and easyly run tests with his own Sakai >> > distribution (without any knowledge of the tool). >> > >> > Anyway, you can achieve this goal with any tool. In my case I picked up >> > JMeter because: >> > >> > 1.- That's the tool I knew. >> > 2.- There are maven plugins ready to execute JMeter tests. >> > >> > If community testers feel more confortable with tsung, or other tools, >> > you >> > only need a maven plugin or >> > ant task that allows to run it. >> > Because of the tests cases are the really valuable thing, the best test >> > tool >> > is the one with more tests :-) >> > >> > Bye, Juan. >> > >> > El 18/07/2012 9:26, Berg, Alan escribió: >> > >> > Hi Kyle, >> > >> > Thanks for taking the time and writing well though out comments. >> > I should take the time to understand tsung in detail, it sounds like a >> > viable solution. >> > >> > I agree with you on: >> > >> >>At their core, both jmeter and tsung are great performance tools, the >> >> question is how do you want to work with the performance framework >> >> inside >> >> the OAE dev community and with implementers at large. That should guide >> >> selection criteria IMO. >> > >> >> If it's a requirement that the community delivery a framework that >> >> implementers can use to performance test their implementations, I'd >> >> love to >> >> hear the argument for jmeter in that case. >> > >> > One partial solution: Write a data driven test plan for Jmeter which has >> > the >> > location of all API's in a text file and make it run through the full >> > API. >> > Have other text files for the input to the API. You could do this as a >> > kind >> > of Performance unit test. If you add assertions for response time or >> > some >> > such, you can add the thresholds to the same text files. Connect that up >> > to >> > Jenkins and make the updating of the data part of the development >> > process. >> > >> > The other part of the solution is to define some standard criteria which >> > can >> > be re-used across performance tools. For example, sizes for provisioned >> > type: smalll, medium, large and try and develop an understanding of the >> > generic mix between. This was done in the Framework for CLE. Which I >> > would >> > argue we need to extend and simplify (perhaps) for OAE. The data mix >> > definitions can be reused across performance tools. >> > >> > >From the JavaScript side you would need something like selenium >> > webdriver >> > to trigger Qunit tests. >> > >> > Sorry cant resist a plug for Jmeter in this election year: The example >> > code >> > I mentioned runs from maven with no setup cost (mvn verify) and >> > generates a >> > report. You can just hook that into the Jmeter plugin in Jenkins which >> > then >> > consumes the results. To add an extra test plan to run you would need to >> > dump it into the /src/test/jmeter directory. The test plans are >> > examples, >> > which need expanding. Juans work looks very interesting, but if there is >> > a >> > setup cost then more work would need to be done to lower that cost. >> > >> > I would say try it out and give feedback. >> > >> > >> > https://github.com/AlanBerg/SakaiOAE-Open/tree/master/TESTS/jmeter_microbenchmark >> > >> > >> > It does assume that you have a demo running on port 8080. However, to >> > change >> > this look at /src/test/jmeter/user.properties and tweak the settings. >> > >> > >> > Thanks Kyle for your response. >> > >> > >> > Regards, >> > >> > >> > Alan >> > >> > >> > >> > Alan Berg >> > >> > Group Education and Research Services >> > Central Computer Services >> > University of Amsterdam >> > ________________________________ >> > From: Kyle Campos [[email protected]] >> > Sent: 17 July 2012 20:19 >> > To: Berg, Alan >> > Cc: Branden Visser; [email protected] >> > >> > Subject: Re: [oae-dev] Load testing tool >> > >> > Hi, >> > >> > I want to make sure I'm commenting on items that actually mean something >> > to >> > you guys, so I'd love to have someone tell me what the requirements are >> > for >> > the performance framework and what selection criteria is in place. I >> > only >> > know of one, that it be open source. >> > >> > I'll respond inline below to some of your points, but the biggest point >> > for >> > me is the point I made about what gets delivered to implementers. If >> > it's a >> > requirement that the community delivery a framework that implementers >> > can >> > use to performance test their implementations, I'd love to hear the >> > argument >> > for jmeter in that case. As I mentioned, I don't see jmeter viable in >> > that >> > scenario. If this isn't a requirement and implementers need to roll >> > their >> > own solution or test a OOTB community deployment then jmeter would be >> > fine. >> > If it is a requirement, the only way I see you being able to meet it is >> > to >> > support an API that implementers can use to develop their use cases. The >> > community won't know what features implementers have >> > enabled/disabled/customized, they won't know the deployment >> > architecture. >> > It's nearly impossible to deliver a static set of tests from the >> > community >> > to all implementers and say, "go click run and all should work". >> > >> > Rest of comments inline below... >> > >> > On Tue, Jul 17, 2012 at 1:27 AM, Berg, Alan <[email protected]> wrote: >> >> >> >> Hi fellow hard workers, >> >> >> >> Good to have this discussion, I can learn from my peers. I will argue >> >> for >> >> Jmeter below. I am certain it is a viable tool, however, I am not >> >> saying >> >> that tsung is not also a viable tool. I want to make a fair comparison, >> >> so >> >> need to note some differences in emphasis. >> >> >> >> In terms of maintainability, it is important for stress tests to be as >> >> simple as is possible and data driven. It does not matter which >> >> technology >> >> you use if you don't follow conventions and basic design patterns. >> >> >> >> >> >> > I much prefer handling this programatically, >> >> >> >> I found it straightforward to mentor a functional administrator to >> >> stress >> >> test using Jmeter. The GUI to create tests with its reverse proxy is >> >> not >> >> difficult to explain. True: The plans are saved in a more complex than >> >> Tsung >> >> XML format.In terms of recording tests i tend to use badboy >> >> (http://www.badboy.com.au/), save in Jmeter format and tweak. Give it a >> >> go. >> > >> > >> > Couple points here: >> > >> > 1. I understad that showing someone the GUI seems to make things easier, >> > and >> > it may for some, especially non-technical people (BA, SME types). But I >> > find >> > the GUI gets in the way of rapid test developmen. >> > >> > 2. I never understood the value of getting non-technical people running >> > performance tests. Even if the GUI makes generating a performance test >> > easy, >> > there's the setup of the system and resource monitoring, then collecting >> > all >> > the data and making sense of it. Performance tests aren't functional >> > tests, >> > whether a performance test passes or fails, is good or bad, requires a >> > good >> > amount of technical expertise. >> > >> > So the argument here really boils down to GUI vs. API. I'd just >> > encourage >> > you to evaluate all the implications of the GUI workflow. >> > >> >> >> >> Jmeter has lots of assertions including reglex. You simply add the >> >> assertions as children under the http samplers. >> >> >> >> >> >> > Dynamic Variables - again it's jmeter's Bean Shell PreProcessor >> >> > workflow >> >> > vs tsung's regexp param in the http request XML >> >> >> >> You can use dynamic variables in Jmeter as well. Here are the list of >> >> functions to use in any sampler and the definition of variables. >> >> http://jmeter.apache.org/usermanual/functions.html >> >> >> >> If all this wiring is not enough, then you can fall back to the >> >> beanshell. >> >> At this point you are moving away from KISS and that should be a >> >> warning >> >> about maintainability. >> > >> > >> > When I use the term "dynamic variables" I'm referring to variables that >> > are >> > only set at runtime, are thread specific and are set by parsing some >> > previous requests HTTP response. AFAIK that type of variable must be set >> > via >> > jmeter's beanshell preprocessor. >> > >> > In any case the point is, its not as straight forward as tsung. >> > >> >> There is a working example of a framework of Jmeter in CLE land which >> >> can >> >> work with CLE, Hybrid and extended to OAE. This will allow us to share >> >> data >> >> models across communities. If later some one wishes to move to a hybrid >> >> instance then they can leverage there knowledge from CLE land. Now, it >> >> is >> >> true that this is currently not a reality (as Lance fairly pointed >> >> out), >> >> however, if we plough the land then seeds can grow. >> >> >> >> There are plenty of examples of Jmeter used at large scale with a large >> >> number of developers. It has a well established community. >> >> >> >> Here is a book on the subject: >> >> http://www.packtpub.com/beginning-apache-jmeter/book >> >> >> >> Here are some links: >> >> http://wiki.apache.org/jmeter/JMeterLinks/ >> >> >> >> Here is a cloud service: >> >> http://blazemeter.com/ >> > >> > >> > I understand the community is large, really large actually. But the way >> > you >> > are forced to collaborate, or the limitations of collaboration on the >> > actual >> > framework that's developed is not optimal mostly due to the GUI >> > interface. >> > We'll all be forced to re-record use cases as implementers, so I'm not >> > sure >> > what value implementers would be leveraging from any community work. >> > Were >> > the community to release a tagged API, implementers would just write >> > very >> > light weight test cases that exercise the API. But again, that goes back >> > to >> > requirements and selection criteria. >> > >> > At their core, both jmeter and tsung are great performance tools, the >> > question is how do you want to work with the performance framework >> > inside >> > the OAE dev community and with implementers at large. That should guide >> > selection criteria IMO. >> > >> > Thanks Alan >> > -Kyle >> > >> >> Jmeters main weakness is that it does not understand JavaScript easily. >> >> Selenium webdriver with Qunit is the way forward for that. >> >> >> >> Looking forward to a detailed response. >> >> >> >> Alan >> >> >> >> >> >> >> >> >> >> >> >> Alan Berg >> >> >> >> Group Education and Research Services >> >> Central Computer Services >> >> University of Amsterdam >> >> ________________________________ >> >> From: [email protected] >> >> [[email protected]] on behalf of Kyle Campos >> >> [[email protected]] >> >> Sent: 17 July 2012 03:25 >> >> >> >> To: Branden Visser >> >> Cc: [email protected] >> >> Subject: Re: [oae-dev] Load testing tool >> >> >> >> Branden, >> >> >> >> I'll just jump into the technical reasons I see jmeter being more >> >> difficult to work with from a community perspective. Really you touched >> >> on >> >> it in your positive point #2 for Tsung and that's Tsung's XML >> >> structure. But >> >> the implications of this deserve more highlight especially in the >> >> context of >> >> the community requirement for automated/nightly performance tests. >> >> >> >> What I don't like about jmeter is primarily its GUI dependency and the >> >> implications of it on workflow, extensibility, collaboration etc... It >> >> makes >> >> for really slow test development with large use cases and more >> >> difficult >> >> maintenance/collaboration between teams. Concrete examples below... >> >> >> >> 1. AJAX request handling - I don't think they could have made it >> >> any >> >> more convoluted with their "logic controller". Using logic "wizards" in >> >> a >> >> GUI is just ugly and makes me cringe. I much prefer handling this >> >> programatically, which is what I did in tsung and what our abstraction >> >> layer >> >> makes really easy and transparent to test writers. If you want the >> >> pain, >> >> then go through jmeter's GUI workflow for developing the logic around >> >> username lookup on signup, then factor in dynamic substitution with >> >> reading >> >> in usernames from an external file, now think about how easy it would >> >> be for >> >> someone else to change this logic at runtime. Ick. >> >> >> >> There's 1 place that controls this in my tsung framework. You don't >> >> need to go through this pain at all writing test cases, and even if you >> >> built it from scratch it's very simple. >> >> >> >> 2. Dynamic Variables - again it's jmeter's Bean Shell PreProcessor >> >> workflow vs tsung's regexp param in the http request XML. And again >> >> this is >> >> also wrapped in our framework. >> >> >> >> Both of the above examples will be in heavy use in any good OAE >> >> performance test. >> >> >> >> I think your point about releasing performance tests as an artifact >> >> with >> >> the release is good in principle, but I don't see jmeter being the best >> >> vehicle to deliver those. As a deployer myself I'd much rather the >> >> community >> >> provide a tagged API set that I can leverage to build that profile MY >> >> use >> >> cases(our tsung framework is built with that in mind). I don't want a >> >> set of >> >> static scripts that may or may not execute in my environment and that >> >> may or >> >> may not profile anything of use for my implementation. There's no way >> >> the >> >> community can know those things or build performance tests that address >> >> all >> >> those use cases. >> >> >> >> I've gone through this technology selection with a more broad set of >> >> requirements than most folks who use jmeter need. jmeter is a very >> >> common >> >> developer tool to quickly script up a simple performance test. I've >> >> never >> >> seen it used very successfully in a broad context with many devs >> >> contributing, with it running complex use cases, against a young code >> >> base >> >> and it being maintainable over time. That being said, you are all very >> >> talented and I'm sure you could get it to work for you, but I'd be very >> >> careful that you don't paint yourself into a corner with burdensome >> >> maintenance and test development workflow that limits contribution. >> >> >> >> My $0.02 >> >> >> >> -Kyle >> >> >> >> On Mon, Jul 16, 2012 at 4:42 AM, Branden Visser <[email protected]> >> >> wrote: >> >>> >> >>> Hi everyone, >> >>> >> >>> I've been putting some research into an appropriate load testing tool >> >>> for us to use, I have been focusing mainly on JMeter and Tsung. >> >>> >> >>> Tsung, as far as I can tell, has the following selling points: >> >>> >> >>> 1. Its erlang guts let it drive many concurrent users more efficiently >> >>> than its competitors >> >>> 2. Its XML structure seems quite leaner, making it easier build tests >> >>> from source >> >>> 3. There is existing work from rSmart that can be leveraged to drive >> >>> our performance tests [1] >> >>> >> >>> With JMeter, I see the following benefits: >> >>> >> >>> 1. Lower overhead in spinning up a test, once the tests are already >> >>> built (VIA a maven plugin) >> >>> 2. I think the increase in complexity of JMeter comes with the benefit >> >>> of extensibility (unless you know erlang, I guess..) >> >>> 3. There is an existing community effort that can be leveraged to >> >>> drive our performance tests [2] >> >>> >> >>> They both have exactly 3 advantages, I don't know what to do!? >> >>> >> >>> Just kidding. But, unless there is quantifiable evidence that suggests >> >>> JMeter's performance will not suffice to properly test OAE (I have not >> >>> been able to find such evidence yet, but others may have more data), I >> >>> propose that we move forward with JMeter. I see value in making the >> >>> JMeter tests executable from the same command-line on which OAE is >> >>> built. I think this moves towards making the JMeter tests an artifact >> >>> of the release and not some orthogonal set of scripts uploaded >> >>> elsewhere, which in my experience tend to become of questionable age >> >>> and relevance. I think it will become more valuable to our deployers, >> >>> and the deployers' performance test data (which would hopefully be >> >>> more abundant with the lower barrier of entry) will become more >> >>> valuable to the core team. >> >>> >> >>> [1] https://github.com/kcampos/Open-Performance-Automation-Framework >> >>> [2] >> >>> https://confluence.sakaiproject.org/display/QA/CLE+Load+Test+Framework >> >>> >> >>> -- >> >>> Cheers, >> >>> Branden >> >>> _______________________________________________ >> >>> oae-dev mailing list >> >>> [email protected] >> >>> http://collab.sakaiproject.org/mailman/listinfo/oae-dev >> >> >> >> >> >> >> >> >> >> -- >> >> Kyle Campos >> >> Director of Quality Operations / rSmart >> >> [email protected] >> >> skype: kyle.campos >> >> phone: 623-455-6180 >> >> GTalk: [email protected] >> >> >> > >> > >> > >> > -- >> > Kyle Campos >> > Director of Quality Operations / rSmart >> > [email protected] >> > skype: kyle.campos >> > phone: 623-455-6180 >> > GTalk: [email protected] >> > >> > >> > >> > _______________________________________________ >> > oae-dev mailing list >> > [email protected] >> > http://collab.sakaiproject.org/mailman/listinfo/oae-dev >> > >> > >> > _______________________________________________ >> > oae-dev mailing list >> > [email protected] >> > http://collab.sakaiproject.org/mailman/listinfo/oae-dev >> > >> > >> > >> > _______________________________________________ >> > oae-dev mailing list >> > [email protected] >> > http://collab.sakaiproject.org/mailman/listinfo/oae-dev >> > >> _______________________________________________ >> oae-dev mailing list >> [email protected] >> http://collab.sakaiproject.org/mailman/listinfo/oae-dev > > > > > -- > Kyle Campos > Director of Quality Operations / rSmart > [email protected] > skype: kyle.campos > phone: 623-455-6180 > GTalk: [email protected] > _______________________________________________ oae-dev mailing list [email protected] http://collab.sakaiproject.org/mailman/listinfo/oae-dev
