Forum Discussion

jshu's avatar
jshu
Occasional Contributor
10 years ago

Static values in data driven test

I have a simple project to check whether a customer is 18 years old, and I have an excel spreadsheet of customer's dob to compare with a static value of the last day of this quarter   I can add thi...
  • nmrao's avatar
    10 years ago

    It is not mandatory to have the date in every data if it is a static value. And it can be taken from the script directly.

    Here is the sample script that shows how to do:

     

    Step1:

    AgeCalculator.groovy -- copy this class under ../ReadyAPI-<version>/bin/scripts

    courtesy: tim_yates from stackoverflow

     

    import groovy.time.DatumDependentDuration
    import org.apache.log4j.Logger
    import java.text.SimpleDateFormat
    
    class AgeCalculator {
    
        String dob
        String when
        String format = 'yyyy-MM-dd'
        Logger log
    
        def getDate = { String date, String format ->
            def dateFormat = new SimpleDateFormat(format)
            dateFormat.parse(date)
        }
    
        def getAge() {
            if (!dob) {
                log.error "dob is mandatory"
            }
            Date now
            if (!when) {
                log.info "Value not provided for when, considering today's date"
                now = new Date()
            } else {
                now = getDate(when, format)
            }
            Date dob = getDate(dob,format)
            dob.clearTime()
            now.clearTime()
            assert dob < now
            Calendar.instance.with { c ->
                c.time = dob
                def (years, months, days) = [ 0, 0, 0 ]
    
                while( ( c[ YEAR ] < now[ YEAR ] - 1 ) ||
                        ( c[ YEAR ] < now[ YEAR ] && c[ MONTH ] <= now[ MONTH ] ) ) {
                    c.add( YEAR, 1 )
                    years++
                }
    
                while( ( c[ YEAR ] < now[ YEAR ] ) ||
                        ( c[ MONTH ] < now[ MONTH ] && c[ DAY_OF_MONTH ] <= now[ DAY_OF_MONTH ] ) ) {
                    // Catch when we are wrapping the DEC/JAN border and would end up beyond now
                    if( c[ YEAR ] == now[ YEAR ] - 1 &&
                            now[ MONTH ] == JANUARY && c[ MONTH ] == DECEMBER &&
                            c[ DAY_OF_MONTH ] > now[ DAY_OF_MONTH ] ) {
                        break
                    }
                    c.add( MONTH, 1 )
                    months++
                }
    
                while( c[ DAY_OF_YEAR ] != now[ DAY_OF_YEAR ] ) {
                    c.add( DAY_OF_YEAR, 1 )
                    days++
                }
                log.info "Years : ${years}"
                new DatumDependentDuration( years, months, days, 0, 0, 0, 0 )
            }
        }
    }

    Step2

    Have a groovy script in your data driven test step, with below script.

    It uses 'yyyy-MM-dd' date format.

    import AgeCalculator
    
    //Please assign value for dateOfBirth from data driven by editing, for now using assumed values
    def dateOfBirth = '1995-12-26'
    def quarterEndDate = '2015-12-31'
    def calculate = new AgeCalculator(log: log,
                                     dob: dateOfBirth,
                                     when: quarterEndDate)
    assert calculate.age.years >= 18, "Not an adult"

    If date format is different, use below snippet instead of above

     

    import AgeCalculator
    
    
    //Provide dateFormat as needed
    def dateFormat = 'dd/MM/yyyy'
    
    //Please assign value for dateOfBirth from data driven by editing, for now using assumed values
    
    def dateOfBirth = '26/12/1995'
    def quarterEndDate = '31/12/2015'
    def calculate = new AgeCalculator(log: log,
                                     dob: dateOfBirth,
                                     when: quarterEndDate,
                                     format: dateFormat)
    assert calculate.age.years >= 18, "Not an adult"

    It will show "Not an adult" in the assertion failure if age is not greater or equal to 18 years by quarterEndDate.

     

    Also note that, provided it in two steps because, it will clean and modularized. You may also have both in one groovy step as well. In that case 'Import AgeCalculator' statement is not required

     

    Hope this is useful.