This document discusses using domain-specific languages (DSLs) for test automation. It defines DSLs as programming languages focused on a particular domain, like SQL or CSS. For testing, a DSL can be used to define test cases in a readable way. The example shows implementing a Python-based internal DSL to test a unique report. Test cases are defined via method chaining, like test.user('a').view('asset'), avoiding copying lots of test data each time. DSLs can improve test coverage by making test definition and maintenance easier.
3. What is DSL Domain Specific Language: A computer programming language of limited expressiveness focused on a particular domain. DSLs are very common in computing: examples include CSS, regular expressions, make, ant, SQL, etc Two main styles of DSL External (SQL, CSS and XML configuration file) Internal (LINQ, jQuery)
5. DSL and Software Testing What is the biggest problem in Software Testing? Insufficient test coverage Tight schedule How can we survive? Test automation Automation everything… How about business logic??
6. DSL and Software Testing Solution One part of the people develop automation test suite, another people design test cases. Example
7. Example What to test? Unique report What challenge did I meet? Copy cookie every time Switch network id every time Modify asset id every time Too many information to mark down How to deal with these? Using Python as the host language to implement an internal DSL
8. Example The DSL looks like: test.user('a').view('magus-asset-1').anetwork('1').onsite('MYSS').snetwork('1').dnetwork('1').times(1).go() Pro All information in one place More readable test code How this works? Method Chaining
Quotes from Martin Fowlercomputer programming language: A DSL is used to humans to instruct a computer to do something, as well as helping communication between humans.language nature: A DSL is a programming language, and as such should have a sense of fluency where the expressiveness comes not just from individual expressions but also the way they can by composed together.limited expressiveness: a general purpose programming language provides lots of capabilities, supporting varied data, control, and abstraction structures. All of this is useful but makes it harder to learn and use. A DSL supports a bare minimum of features needed to support its domain. You can't build an entire software system in a DSL, rather you use a DSL for one particular aspect of a system.domain focus: a limited language is only useful if it has a clear focus on a limited domain. The domain focus is what makes a limited language worthwhile.External DSLs are DSLs that use a different language to the main language of the application that uses them.Internal DSLs use the same general purpose programming language that the wider application uses, but uses that language in a particular and limited style. Only a subset of language constructs are used, and only to drive a particular aspect of the application.